]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/dvdec: correctly set interlaced and tff
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>
Fri, 28 Jun 2019 17:33:05 +0000 (10:33 -0700)
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>
Wed, 6 Nov 2019 16:40:08 +0000 (08:40 -0800)
libavcodec/dvdec.c

index 89864f2edc3166497c6454240e003f4028519587..daa8c74328ae9779019d72af08ef7f1c6717c647 100644 (file)
@@ -542,12 +542,19 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, void *data,
 
     if ((ret = ff_thread_get_buffer(avctx, &frame, 0)) < 0)
         return ret;
-    frame.f->interlaced_frame = 1;
-    frame.f->top_field_first  = 0;
 
     /* Determine the codec's field order from the packet */
     if ( *vsc_pack == dv_video_control ) {
-        frame.f->top_field_first = !(vsc_pack[3] & 0x40);
+        if (avctx->height == 720) {
+            frame.f->interlaced_frame = 0;
+            frame.f->top_field_first = 0;
+        } else if (avctx->height == 1080) {
+            frame.f->interlaced_frame = 1;
+            frame.f->top_field_first = (vsc_pack[3] & 0x40) == 0x40;
+        } else {
+            frame.f->interlaced_frame = (vsc_pack[3] & 0x10) == 0x10;
+            frame.f->top_field_first = !(vsc_pack[3] & 0x40);
+        }
     }
 
     s->buf = buf;