[PATCH v2 3/4] winegstreamer: Use the "format" field to determine the subtype and bit depth.

Zebediah Figura z.figura12 at gmail.com
Sat Sep 14 12:43:27 CDT 2019


The "bits" field does not directly describe the total bit depth.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/winegstreamer/gstdemux.c | 39 ++++++++++++++++++++++++++---------
 1 file changed, 29 insertions(+), 10 deletions(-)

diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
index e76ceda0fe6..c733b6e7e61 100644
--- a/dlls/winegstreamer/gstdemux.c
+++ b/dlls/winegstreamer/gstdemux.c
@@ -207,16 +207,35 @@ static gboolean amt_from_gst_caps_video(GstCaps *caps, AM_MEDIA_TYPE *amt)
     amt->pUnk = NULL;
     ZeroMemory(vih, sizeof(*vih));
     amt->majortype = MEDIATYPE_Video;
-    if (GST_VIDEO_INFO_IS_RGB(&vinfo)) {
-        bih->biBitCount = GST_VIDEO_FORMAT_INFO_BITS(vinfo.finfo);
-        switch (bih->biBitCount) {
-            case 16: amt->subtype = MEDIASUBTYPE_RGB555; break;
-            case 24: amt->subtype = MEDIASUBTYPE_RGB24; break;
-            case 32: amt->subtype = MEDIASUBTYPE_RGB32; break;
-            default:
-                FIXME("Unknown bpp %u\n", bih->biBitCount);
-                heap_free(vih);
-                return FALSE;
+
+    if (GST_VIDEO_INFO_IS_RGB(&vinfo))
+    {
+        switch (vinfo.finfo->format)
+        {
+        case GST_VIDEO_FORMAT_BGRA:
+            amt->subtype = MEDIASUBTYPE_ARGB32;
+            bih->biBitCount = 32;
+            break;
+        case GST_VIDEO_FORMAT_BGRx:
+            amt->subtype = MEDIASUBTYPE_RGB32;
+            bih->biBitCount = 32;
+            break;
+        case GST_VIDEO_FORMAT_BGR:
+            amt->subtype = MEDIASUBTYPE_RGB24;
+            bih->biBitCount = 24;
+            break;
+        case GST_VIDEO_FORMAT_BGR16:
+            amt->subtype = MEDIASUBTYPE_RGB565;
+            bih->biBitCount = 16;
+            break;
+        case GST_VIDEO_FORMAT_BGR15:
+            amt->subtype = MEDIASUBTYPE_RGB555;
+            bih->biBitCount = 16;
+            break;
+        default:
+            FIXME("Unhandled type %s.\n", vinfo.finfo->name);
+            heap_free(vih);
+            return FALSE;
         }
         bih->biCompression = BI_RGB;
     } else {
-- 
2.23.0




More information about the wine-devel mailing list