Commit 75b9c340 authored by aurel's avatar aurel

some simplifications and uniformisation

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@10568 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent a7f2ea03
...@@ -265,7 +265,7 @@ static int vp5_decode_init(AVCodecContext *avctx) ...@@ -265,7 +265,7 @@ static int vp5_decode_init(AVCodecContext *avctx)
{ {
vp56_context_t *s = avctx->priv_data; vp56_context_t *s = avctx->priv_data;
vp56_init(s, avctx, 1); vp56_init(avctx, 1);
s->vp56_coord_div = vp5_coord_div; s->vp56_coord_div = vp5_coord_div;
s->parse_vector_adjustment = vp5_parse_vector_adjustment; s->parse_vector_adjustment = vp5_parse_vector_adjustment;
s->adjust = vp5_adjust; s->adjust = vp5_adjust;
......
...@@ -322,10 +322,9 @@ static void vp56_deblock_filter(vp56_context_t *s, uint8_t *yuv, ...@@ -322,10 +322,9 @@ static void vp56_deblock_filter(vp56_context_t *s, uint8_t *yuv,
if (dy) vp56_edge_filter(s, yuv + stride*(10-dy), stride, 1, t); if (dy) vp56_edge_filter(s, yuv + stride*(10-dy), stride, 1, t);
} }
static void vp56_mc(vp56_context_t *s, int b, uint8_t *src, static void vp56_mc(vp56_context_t *s, int b, int plane, uint8_t *src,
int stride, int x, int y) int stride, int x, int y)
{ {
int plane = vp56_b6to3[b];
uint8_t *dst=s->framep[VP56_FRAME_CURRENT]->data[plane]+s->block_offset[b]; uint8_t *dst=s->framep[VP56_FRAME_CURRENT]->data[plane]+s->block_offset[b];
uint8_t *src_block; uint8_t *src_block;
int src_offset; int src_offset;
...@@ -448,7 +447,7 @@ static void vp56_decode_mb(vp56_context_t *s, int row, int col) ...@@ -448,7 +447,7 @@ static void vp56_decode_mb(vp56_context_t *s, int row, int col)
int x_off = b==1 || b==3 ? 8 : 0; int x_off = b==1 || b==3 ? 8 : 0;
int y_off = b==2 || b==3 ? 8 : 0; int y_off = b==2 || b==3 ? 8 : 0;
plan = vp56_b6to3[b]; plan = vp56_b6to3[b];
vp56_mc(s, b, frame_ref->data[plan], s->stride[plan], vp56_mc(s, b, plan, frame_ref->data[plan], s->stride[plan],
16*col+x_off, 16*row+y_off); 16*col+x_off, 16*row+y_off);
s->dsp.idct_add(frame_current->data[plan] + s->block_offset[b], s->dsp.idct_add(frame_current->data[plan] + s->block_offset[b],
s->stride[plan], s->block_coeff[b]); s->stride[plan], s->block_coeff[b]);
...@@ -457,21 +456,22 @@ static void vp56_decode_mb(vp56_context_t *s, int row, int col) ...@@ -457,21 +456,22 @@ static void vp56_decode_mb(vp56_context_t *s, int row, int col)
} }
} }
static int vp56_size_changed(AVCodecContext *avctx, vp56_context_t *s) static int vp56_size_changed(AVCodecContext *avctx)
{ {
vp56_context_t *s = avctx->priv_data;
int stride = s->framep[VP56_FRAME_CURRENT]->linesize[0]; int stride = s->framep[VP56_FRAME_CURRENT]->linesize[0];
int i; int i;
s->plane_width[0] = s->avctx->coded_width; s->plane_width[0] = avctx->coded_width;
s->plane_width[1] = s->plane_width[2] = s->avctx->coded_width/2; s->plane_width[1] = s->plane_width[2] = avctx->coded_width/2;
s->plane_height[0] = s->avctx->coded_height; s->plane_height[0] = avctx->coded_height;
s->plane_height[1] = s->plane_height[2] = s->avctx->coded_height/2; s->plane_height[1] = s->plane_height[2] = avctx->coded_height/2;
for (i=0; i<3; i++) for (i=0; i<3; i++)
s->stride[i] = s->flip * s->framep[VP56_FRAME_CURRENT]->linesize[i]; s->stride[i] = s->flip * s->framep[VP56_FRAME_CURRENT]->linesize[i];
s->mb_width = (s->avctx->coded_width+15) / 16; s->mb_width = (avctx->coded_width +15) / 16;
s->mb_height = (s->avctx->coded_height+15) / 16; s->mb_height = (avctx->coded_height+15) / 16;
if (s->mb_width > 1000 || s->mb_height > 1000) { if (s->mb_width > 1000 || s->mb_height > 1000) {
av_log(avctx, AV_LOG_ERROR, "picture too big\n"); av_log(avctx, AV_LOG_ERROR, "picture too big\n");
...@@ -512,7 +512,7 @@ int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size, ...@@ -512,7 +512,7 @@ int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
} }
if (res == 2) if (res == 2)
if (vp56_size_changed(avctx, s)) { if (vp56_size_changed(avctx)) {
avctx->release_buffer(avctx, p); avctx->release_buffer(avctx, p);
return -1; return -1;
} }
...@@ -612,19 +612,20 @@ int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size, ...@@ -612,19 +612,20 @@ int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
return buf_size; return buf_size;
} }
void vp56_init(vp56_context_t *s, AVCodecContext *avctx, int flip) void vp56_init(AVCodecContext *avctx, int flip)
{ {
vp56_context_t *s = avctx->priv_data;
int i; int i;
s->avctx = avctx; s->avctx = avctx;
avctx->pix_fmt = PIX_FMT_YUV420P; avctx->pix_fmt = PIX_FMT_YUV420P;
if (s->avctx->idct_algo == FF_IDCT_AUTO) if (avctx->idct_algo == FF_IDCT_AUTO)
s->avctx->idct_algo = FF_IDCT_VP3; avctx->idct_algo = FF_IDCT_VP3;
dsputil_init(&s->dsp, s->avctx); dsputil_init(&s->dsp, avctx);
ff_init_scantable(s->dsp.idct_permutation, &s->scantable,ff_zigzag_direct); ff_init_scantable(s->dsp.idct_permutation, &s->scantable,ff_zigzag_direct);
avcodec_set_dimensions(s->avctx, 0, 0); avcodec_set_dimensions(avctx, 0, 0);
for (i=0; i<3; i++) for (i=0; i<3; i++)
s->framep[i] = &s->frames[i]; s->framep[i] = &s->frames[i];
...@@ -656,8 +657,7 @@ int vp56_free(AVCodecContext *avctx) ...@@ -656,8 +657,7 @@ int vp56_free(AVCodecContext *avctx)
av_free(s->above_blocks); av_free(s->above_blocks);
av_free(s->macroblocks); av_free(s->macroblocks);
av_free(s->edge_emu_buffer_alloc); av_free(s->edge_emu_buffer_alloc);
if (s->framep[VP56_FRAME_GOLDEN]->data[0] if (s->framep[VP56_FRAME_GOLDEN]->data[0])
&& (s->framep[VP56_FRAME_PREVIOUS] != s->framep[VP56_FRAME_GOLDEN]))
avctx->release_buffer(avctx, s->framep[VP56_FRAME_GOLDEN]); avctx->release_buffer(avctx, s->framep[VP56_FRAME_GOLDEN]);
if (s->framep[VP56_FRAME_PREVIOUS]->data[0]) if (s->framep[VP56_FRAME_PREVIOUS]->data[0])
avctx->release_buffer(avctx, s->framep[VP56_FRAME_PREVIOUS]); avctx->release_buffer(avctx, s->framep[VP56_FRAME_PREVIOUS]);
......
...@@ -153,7 +153,7 @@ struct vp56_context { ...@@ -153,7 +153,7 @@ struct vp56_context {
}; };
void vp56_init(vp56_context_t *s, AVCodecContext *avctx, int flip); void vp56_init(AVCodecContext *avctx, int flip);
int vp56_free(AVCodecContext *avctx); int vp56_free(AVCodecContext *avctx);
void vp56_init_dequant(vp56_context_t *s, int quantizer); void vp56_init_dequant(vp56_context_t *s, int quantizer);
int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size, int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
......
...@@ -488,7 +488,7 @@ static int vp6_decode_init(AVCodecContext *avctx) ...@@ -488,7 +488,7 @@ static int vp6_decode_init(AVCodecContext *avctx)
{ {
vp56_context_t *s = avctx->priv_data; vp56_context_t *s = avctx->priv_data;
vp56_init(s, avctx, avctx->codec->id == CODEC_ID_VP6); vp56_init(avctx, avctx->codec->id == CODEC_ID_VP6);
s->vp56_coord_div = vp6_coord_div; s->vp56_coord_div = vp6_coord_div;
s->parse_vector_adjustment = vp6_parse_vector_adjustment; s->parse_vector_adjustment = vp6_parse_vector_adjustment;
s->adjust = vp6_adjust; s->adjust = vp6_adjust;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment