avcodec/vc1: fix mquant calculation for interlace field pictures
authorJerome Borsboom <jerome.borsboom@carpalis.nl>
Fri, 18 May 2018 15:06:23 +0000 (17:06 +0200)
committerCarl Eugen Hoyos <ceffmpeg@gmail.com>
Mon, 28 May 2018 21:38:49 +0000 (23:38 +0200)
For interlace field pictures s->mb_height indicates the height of the full
picture in MBs, i.e. the two fields combined. A single field is half this
size. When calculating mquant for interlace field pictures, the bottom edge
is the last MB row of the field.

Signed-off-by: Jerome Borsboom <jerome.borsboom@carpalis.nl>
libavcodec/vc1_block.c

index 2d76da2..21ab108 100644 (file)
@@ -181,7 +181,8 @@ static void vc1_put_signed_blocks_clamped(VC1Context *v)
             mquant = -v->altpq;                                \
         if ((edges&4) && s->mb_x == (s->mb_width - 1))         \
             mquant = -v->altpq;                                \
-        if ((edges&8) && s->mb_y == (s->mb_height - 1))        \
+        if ((edges&8) &&                                       \
+            s->mb_y == ((s->mb_height >> v->field_mode) - 1))  \
             mquant = -v->altpq;                                \
         if (!mquant || mquant > 31) {                          \
             av_log(v->s.avctx, AV_LOG_ERROR,                   \