]> git.sesse.net Git - ffmpeg/commitdiff
speedhq: fix behavior of single-field decoding
authorSteinar H. Gunderson <steinar+ffmpeg@gunderson.no>
Thu, 3 Aug 2017 07:22:57 +0000 (09:22 +0200)
committerJames Almer <jamrial@gmail.com>
Thu, 3 Aug 2017 19:36:02 +0000 (16:36 -0300)
The height convention for decoding frames with only a single field made sense
for compatibility with legacy decoders, but doesn't really match the convention
used by NDI, which is the primary (only?) user. Thus, change it to simply
assuming that if the two fields overlap, the frame is meant to be a single
field and the frame height matches the field height.

Signed-off-by: James Almer <jamrial@gmail.com>
libavcodec/speedhq.c

index 60efb0222b2763243f188ea957c8d557f1471464..47b1e4dc7a5b039d2eb67bea3d4a1337acb34f7f 100644 (file)
@@ -450,10 +450,13 @@ static int speedhq_decode_frame(AVCodecContext *avctx,
     if (second_field_offset == 4) {
         /*
          * Overlapping first and second fields is used to signal
-         * encoding only a single field (the second field then comes
-         * as a separate, later frame).
+         * encoding only a single field. In this case, "height"
+         * is ambiguous; it could mean either the height of the
+         * frame as a whole, or of the field. The former would make
+         * more sense for compatibility with legacy decoders,
+         * but this matches the convention used in NDI, which is
+         * the primary user of this trick.
          */
-        frame->height >>= 1;
         if ((ret = decode_speedhq_field(s, buf, buf_size, frame, 0, 4, buf_size, 1)) < 0)
             return ret;
     } else {