[PATCH v6 3/4] mfplat/buffer: Support YV12, I420 and IYUV image formats.
Giovanni Mascellani
gmascellani at codeweavers.com
Wed Jun 29 04:47:23 CDT 2022
Signed-off-by: Giovanni Mascellani <gmascellani at codeweavers.com>
---
v2:
* Added
v4:
* Fix typo in subject
---
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 e3d38438b88..6f06eb25992 100644
--- a/dlls/mfplat/buffer.c
+++ b/dlls/mfplat/buffer.c
@@ -1315,13 +1315,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)
@@ -1357,12 +1369,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:
@@ -1379,6 +1391,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:
@@ -1397,6 +1411,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