avcodecmap: Configure field order in the context if we can
authorSebastian Dröge <sebastian@centricular.com>
Thu, 29 Sep 2016 12:18:46 +0000 (15:18 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 1 Nov 2016 18:42:52 +0000 (20:42 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=771376

ext/libav/gstavcodecmap.c

index f1587c5..9b27044 100644 (file)
@@ -2426,6 +2426,7 @@ gst_ffmpeg_caps_to_pixfmt (const GstCaps * caps,
   const GValue *par = NULL;
   const gchar *fmt;
   GstVideoFormat format = GST_VIDEO_FORMAT_UNKNOWN;
+  const gchar *s;
 
   GST_DEBUG ("converting caps %" GST_PTR_FORMAT, caps);
   g_return_if_fail (gst_caps_get_size (caps) == 1);
@@ -2541,6 +2542,22 @@ gst_ffmpeg_caps_to_pixfmt (const GstCaps * caps,
     default:
       break;
   }
+
+  s = gst_structure_get_string (structure, "interlaced-mode");
+  if (s) {
+    if (strcmp (s, "progressive") == 0) {
+      context->field_order = AV_FIELD_PROGRESSIVE;
+    } else if (strcmp (s, "interleaved") == 0) {
+      s = gst_structure_get_string (structure, "field-order");
+      if (s) {
+        if (strcmp (s, "top-field-first") == 0) {
+          context->field_order = AV_FIELD_TT;
+        } else if (strcmp (s, "bottom-field-first") == 0) {
+          context->field_order = AV_FIELD_TB;
+        }
+      }
+    }
+  }
 }
 
 typedef struct