avvidenc: Also set the repeat_pict flag correctly and take the TFF flag from caps...
authorSebastian Dröge <sebastian@centricular.com>
Wed, 19 Jun 2019 12:44:49 +0000 (15:44 +0300)
committerTim-Philipp Müller <tim@centricular.com>
Wed, 7 Aug 2019 00:06:10 +0000 (01:06 +0100)
ext/libav/gstavvidenc.c

index ab44e9d..8dc514b 100644 (file)
@@ -557,9 +557,12 @@ gst_ffmpegvidenc_send_frame (GstFFMpegVidEnc * ffmpegenc,
   if (ffmpegenc->context->flags & (AV_CODEC_FLAG_INTERLACED_DCT |
           AV_CODEC_FLAG_INTERLACED_ME)) {
     picture->interlaced_frame = TRUE;
-    /* if this is not the case, a filter element should be used to swap fields */
     picture->top_field_first =
-        GST_BUFFER_FLAG_IS_SET (frame->input_buffer, GST_VIDEO_BUFFER_FLAG_TFF);
+        GST_BUFFER_FLAG_IS_SET (frame->input_buffer, GST_VIDEO_BUFFER_FLAG_TFF)
+        || GST_VIDEO_INFO_FIELD_ORDER (&ffmpegenc->input_state->info) ==
+        GST_VIDEO_FIELD_ORDER_TOP_FIELD_FIRST;
+    picture->repeat_pict =
+        GST_BUFFER_FLAG_IS_SET (frame->input_buffer, GST_VIDEO_BUFFER_FLAG_RFF);
   }
 
   if (GST_VIDEO_INFO_MULTIVIEW_MODE (info) != GST_VIDEO_MULTIVIEW_MODE_NONE) {