[PATCH v2 7/8] mflat/buffer: Support YV12, I420 and IYUV image formats.

Giovanni Mascellani gmascellani at codeweavers.com
Tue Jun 14 05:50:50 CDT 2022


Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
---
v2:
* Added
---
 dlls/mfplat/buffer.c | 36 ++++++++++++++++++++++++++----------
 1 file changed, 26 insertions(+), 10 deletions(-)

diff --git a/dlls/mfplat/buffer.c b/dlls/mfplat/buffer.c
index 52800b37203..cf1b46709a4 100644
--- a/dlls/mfplat/buffer.c
+++ b/dlls/mfplat/buffer.c
@@ -1236,13 +1236,25 @@ static HRESULT create_1d_buffer(DWORD max_length, DWORD alignment, IMFMediaBuffe
 
 static p_copy_image_func get_2d_buffer_copy_func(DWORD fourcc)
 {
-    if (fourcc == MAKEFOURCC('N','V','1','2'))
-        return copy_image_nv12;
-    if (fourcc == MAKEFOURCC('I','M','C','1') || fourcc == MAKEFOURCC('I','M','C','3'))
-        return copy_image_imc1;
-    if (fourcc == MAKEFOURCC('I','M','C','2') || fourcc == MAKEFOURCC('I','M','C','4'))
-        return copy_image_imc2;
-    return NULL;
+    switch (fourcc)
+    {
+        case MAKEFOURCC('N','V','1','2'):
+            return copy_image_nv12;
+
+        case MAKEFOURCC('I','M','C','1'):
+        case MAKEFOURCC('I','M','C','3'):
+            return copy_image_imc1;
+
+        case MAKEFOURCC('I','M','C','2'):
+        case MAKEFOURCC('I','M','C','4'):
+        case MAKEFOURCC('Y','V','1','2'):
+        case MAKEFOURCC('I','4','2','0'):
+        case MAKEFOURCC('I','Y','U','V'):
+            return copy_image_imc2;
+
+        default:
+            return NULL;
+    }
 }
 
 static HRESULT create_2d_buffer(DWORD width, DWORD height, DWORD fourcc, BOOL bottom_up, IMFMediaBuffer **buffer)
@@ -1278,12 +1290,12 @@ static HRESULT create_2d_buffer(DWORD width, DWORD height, DWORD fourcc, BOOL bo
             break;
         case MAKEFOURCC('I','M','C','2'):
         case MAKEFOURCC('I','M','C','4'):
-            plane_size = stride * 3 / 2 * height;
-            break;
-        case MAKEFOURCC('N','V','1','2'):
         case MAKEFOURCC('Y','V','1','2'):
         case MAKEFOURCC('I','4','2','0'):
         case MAKEFOURCC('I','Y','U','V'):
+            plane_size = stride * 3 / 2 * height;
+            break;
+        case MAKEFOURCC('N','V','1','2'):
             plane_size = stride * height * 3 / 2;
             break;
         default:
@@ -1300,6 +1312,8 @@ static HRESULT create_2d_buffer(DWORD width, DWORD height, DWORD fourcc, BOOL bo
         case MAKEFOURCC('I','M','C','3'):
         case MAKEFOURCC('I','M','C','4'):
         case MAKEFOURCC('Y','V','1','2'):
+        case MAKEFOURCC('I','4','2','0'):
+        case MAKEFOURCC('I','Y','U','V'):
             row_alignment = MF_128_BYTE_ALIGNMENT;
             break;
         default:
@@ -1318,6 +1332,8 @@ static HRESULT create_2d_buffer(DWORD width, DWORD height, DWORD fourcc, BOOL bo
         case MAKEFOURCC('Y','V','1','2'):
         case MAKEFOURCC('I','M','C','2'):
         case MAKEFOURCC('I','M','C','4'):
+        case MAKEFOURCC('I','4','2','0'):
+        case MAKEFOURCC('I','Y','U','V'):
             max_length = pitch * height * 3 / 2;
             break;
         default:
-- 
2.36.1




More information about the wine-devel mailing list