matroskamux: adds support for wmv family
authorThiago Santos <thiagoss@embedded.ufcg.edu.br>
Thu, 6 Aug 2009 23:15:17 +0000 (20:15 -0300)
committerThiago Santos <thiagoss@embedded.ufcg.edu.br>
Sun, 9 Aug 2009 23:34:04 +0000 (20:34 -0300)
Adds support to WMV1, WMV2, WMV3 and other family formats that
are signaled by the 'format' field in the caps (i.e. WVC1).
Partially fixes #576378

gst/matroska/matroska-mux.c

index 421dcd5..a40cea3 100644 (file)
@@ -115,7 +115,8 @@ static GstStaticPadTemplate videosink_templ =
         COMMON_VIDEO_CAPS "; "
         "video/x-raw-yuv, "
         "format = (fourcc) { YUY2, I420, YV12, UYVY, AYUV }, "
-        COMMON_VIDEO_CAPS)
+        COMMON_VIDEO_CAPS "; "
+        "video/x-wmv, " "wmvversion = (int) [ 1, 3 ], " COMMON_VIDEO_CAPS)
     );
 
 #define COMMON_AUDIO_CAPS \
@@ -710,7 +711,8 @@ skip_details:
       || !strcmp (mimetype, "video/x-divx")
       || !strcmp (mimetype, "video/x-dv")
       || !strcmp (mimetype, "video/x-h263")
-      || !strcmp (mimetype, "video/x-msmpeg")) {
+      || !strcmp (mimetype, "video/x-msmpeg")
+      || !strcmp (mimetype, "video/x-wmv")) {
     BITMAPINFOHEADER *bih;
     gint size = sizeof (BITMAPINFOHEADER);
     guint32 fourcc = 0;
@@ -753,6 +755,22 @@ skip_details:
           goto msmpeg43;
           break;
       }
+    } else if (!strcmp (mimetype, "video/x-wmv")) {
+      gint wmvversion;
+      guint32 format;
+      GST_WARNING_OBJECT (mux, "WMV");
+      if (gst_structure_get_fourcc (structure, "format", &format)) {
+        fourcc = format;
+      } else if (gst_structure_get_int (structure, "wmvversion", &wmvversion)) {
+        if (wmvversion == 2) {
+          fourcc = GST_MAKE_FOURCC ('W', 'M', 'V', '2');
+        } else if (wmvversion == 1) {
+          fourcc = GST_MAKE_FOURCC ('W', 'M', 'V', '1');
+        } else if (wmvversion == 3) {
+          fourcc = GST_MAKE_FOURCC ('W', 'M', 'V', '3');
+        }
+      }
+      GST_WARNING_OBJECT (mux, "fourcc=%u", fourcc);
     }
 
     if (!fourcc)