vc1dec: fieldtx is only valid for interlaced frame pictures

The fieldtx_plane is not cleared for interlaced fields.

Signed-off-by: Martin Storsjö <martin@martin.st>
pull/18/head
Sebastian Sandberg 12 years ago committed by Martin Storsjö
parent 8bbdd20a29
commit 1bd57a850a
  1. 4
      libavcodec/vc1dec.c

@ -80,7 +80,7 @@ static void vc1_put_signed_blocks_clamped(VC1Context *v)
{ {
MpegEncContext *s = &v->s; MpegEncContext *s = &v->s;
int topleft_mb_pos, top_mb_pos; int topleft_mb_pos, top_mb_pos;
int stride_y, fieldtx; int stride_y, fieldtx = 0;
int v_dist; int v_dist;
/* The put pixels loop is always one MB row behind the decoding loop, /* The put pixels loop is always one MB row behind the decoding loop,
@ -93,6 +93,7 @@ static void vc1_put_signed_blocks_clamped(VC1Context *v)
if (!s->first_slice_line) { if (!s->first_slice_line) {
if (s->mb_x) { if (s->mb_x) {
topleft_mb_pos = (s->mb_y - 1) * s->mb_stride + s->mb_x - 1; topleft_mb_pos = (s->mb_y - 1) * s->mb_stride + s->mb_x - 1;
if (v->fcm == ILACE_FRAME)
fieldtx = v->fieldtx_plane[topleft_mb_pos]; fieldtx = v->fieldtx_plane[topleft_mb_pos];
stride_y = s->linesize << fieldtx; stride_y = s->linesize << fieldtx;
v_dist = (16 - fieldtx) >> (fieldtx == 0); v_dist = (16 - fieldtx) >> (fieldtx == 0);
@ -117,6 +118,7 @@ static void vc1_put_signed_blocks_clamped(VC1Context *v)
} }
if (s->mb_x == s->mb_width - 1) { if (s->mb_x == s->mb_width - 1) {
top_mb_pos = (s->mb_y - 1) * s->mb_stride + s->mb_x; top_mb_pos = (s->mb_y - 1) * s->mb_stride + s->mb_x;
if (v->fcm == ILACE_FRAME)
fieldtx = v->fieldtx_plane[top_mb_pos]; fieldtx = v->fieldtx_plane[top_mb_pos];
stride_y = s->linesize << fieldtx; stride_y = s->linesize << fieldtx;
v_dist = fieldtx ? 15 : 8; v_dist = fieldtx ? 15 : 8;

Loading…
Cancel
Save