diff --git a/libavcodec/h261dec.c b/libavcodec/h261dec.c index 696a0f2d00..882bef1947 100644 --- a/libavcodec/h261dec.c +++ b/libavcodec/h261dec.c @@ -341,7 +341,8 @@ static int h261_decode_block(H261Context *h, int16_t *block, int n, int coded) static int h261_decode_mb(H261Context *h) { MpegEncContext *const s = &h->s; - int i, cbp, xy; + int i, cbp, xy, b_xy; + int b_stride = 2*s->mb_width + 1; cbp = 63; // Read mba @@ -374,6 +375,7 @@ static int h261_decode_mb(H261Context *h) s->mb_x = ((h->gob_number - 1) % 2) * 11 + ((h->current_mba - 1) % 11); s->mb_y = ((h->gob_number - 1) / 2) * 3 + ((h->current_mba - 1) / 11); xy = s->mb_x + s->mb_y * s->mb_stride; + b_xy = 2 * s->mb_x + (2 * s->mb_y) * b_stride; ff_init_block_index(s); ff_update_block_index(s); @@ -432,6 +434,11 @@ static int h261_decode_mb(H261Context *h) s->mv[0][0][0] = h->current_mv_x * 2; // gets divided by 2 in motion compensation s->mv[0][0][1] = h->current_mv_y * 2; + if (s->current_picture.motion_val[0]) { + s->current_picture.motion_val[0][b_xy][0] = s->mv[0][0][0]; + s->current_picture.motion_val[0][b_xy][1] = s->mv[0][0][1]; + } + intra: /* decode each block */ if (s->mb_intra || HAS_CBP(h->mtype)) {