[PATCH v2 08/18] winegstreamer: Translate WMV caps to attributes.

Derek Lesho dlesho at codeweavers.com
Wed Apr 1 17:05:29 CDT 2020


Signed-off-by: Derek Lesho <dlesho at codeweavers.com>
---
 dlls/winegstreamer/mfplat.c | 44 +++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c
index b76714c482..1b0f562dbb 100644
--- a/dlls/winegstreamer/mfplat.c
+++ b/dlls/winegstreamer/mfplat.c
@@ -592,6 +592,50 @@ static IMFMediaType* transform_to_media_type(GstCaps *caps)
                 gst_structure_remove_field(structure, "codec_data");
             }
         }
+        else if (!(strcmp(mime_type, "video/x-wmv")))
+        {
+            gint wmv_version;
+            const char *format;
+            const GValue *codec_data;
+
+            if (gst_structure_get_int(info, "wmvversion", &wmv_version))
+            {
+                switch (wmv_version)
+                {
+                    case 1:
+                        IMFMediaType_SetGUID(media_type, &MF_MT_SUBTYPE, &MFVideoFormat_WMV1);
+                        break;
+                    case 2:
+                        IMFMediaType_SetGUID(media_type, &MF_MT_SUBTYPE, &MFVideoFormat_WMV2);
+                        break;
+                    case 3:
+                        IMFMediaType_SetGUID(media_type, &MF_MT_SUBTYPE, &MFVideoFormat_WMV3);
+                        break;
+                    default:
+                        FIXME("Unrecognized wmvversion %d\n", wmv_version);
+                }
+            }
+
+            if ((format = gst_structure_get_string(info, "format")))
+            {
+                if (!(strcmp(format, "WVC1")))
+                    IMFMediaType_SetGUID(media_type, &MF_MT_SUBTYPE, &MFVideoFormat_WVC1);
+                else
+                    FIXME("Unrecognized format %s\n", format);
+            }
+
+            if ((codec_data = gst_structure_get_value(info, "codec_data")))
+            {
+                GstBuffer *codec_data_buffer = gst_value_get_buffer(codec_data);
+                if (codec_data_buffer)
+                {
+                    gsize codec_data_size = gst_buffer_get_size(codec_data_buffer);
+                    gpointer codec_data_raw = heap_alloc(codec_data_size);
+                    gst_buffer_extract(codec_data_buffer, 0, codec_data_raw, codec_data_size);
+                    IMFMediaType_SetBlob(media_type, &MF_MT_USER_DATA, codec_data_raw, codec_data_size);
+                }
+            }
+        }
         else
             FIXME("Unrecognized video format %s\n", mime_type);
     }
-- 
2.26.0




More information about the wine-devel mailing list