Zebediah Figura : quartz/vmr9: Support YUV formats in the VMR7.
Alexandre Julliard
julliard at winehq.org
Thu Jun 25 16:14:24 CDT 2020
Module: wine
Branch: master
Commit: 8fcdca9dd533b1bd74eb41bcca87e354198bef6f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=8fcdca9dd533b1bd74eb41bcca87e354198bef6f
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Wed Jun 24 16:52:42 2020 -0500
quartz/vmr9: Support YUV formats in the VMR7.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/quartz/vmr9.c | 36 +++++++++++++++++++++++++++---------
1 file changed, 27 insertions(+), 9 deletions(-)
diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c
index e49266c30c..e4db42223e 100644
--- a/dlls/quartz/vmr9.c
+++ b/dlls/quartz/vmr9.c
@@ -417,17 +417,35 @@ static HRESULT allocate_surfaces(struct quartz_vmr *filter, const AM_MEDIA_TYPE
if (!is_vmr9(filter))
{
- switch (filter->bmiheader.biBitCount)
+ switch (filter->bmiheader.biCompression)
{
- case 24: info.Format = D3DFMT_R8G8B8; break;
- case 32: info.Format = D3DFMT_X8R8G8B8; break;
- default:
- FIXME("Unhandled bit depth %u.\n", filter->bmiheader.biBitCount);
- free(filter->surfaces);
- return VFW_E_TYPE_NOT_ACCEPTED;
- }
+ case BI_RGB:
+ switch (filter->bmiheader.biBitCount)
+ {
+ case 24: info.Format = D3DFMT_R8G8B8; break;
+ case 32: info.Format = D3DFMT_X8R8G8B8; break;
+ default:
+ FIXME("Unhandled bit depth %u.\n", filter->bmiheader.biBitCount);
+ free(filter->surfaces);
+ return VFW_E_TYPE_NOT_ACCEPTED;
+ }
+
+ info.dwFlags = VMR9AllocFlag_TextureSurface;
+ break;
- info.dwFlags = VMR9AllocFlag_TextureSurface;
+ case mmioFOURCC('N','V','1','2'):
+ case mmioFOURCC('U','Y','V','Y'):
+ case mmioFOURCC('Y','U','Y','2'):
+ case mmioFOURCC('Y','V','1','2'):
+ info.Format = filter->bmiheader.biCompression;
+ info.dwFlags = VMR9AllocFlag_OffscreenSurface;
+ break;
+
+ default:
+ WARN("Unhandled video compression %#x.\n", filter->bmiheader.biCompression);
+ free(filter->surfaces);
+ return VFW_E_TYPE_NOT_ACCEPTED;
+ }
if (FAILED(hr = initialize_device(filter, &info, count)))
free(filter->surfaces);
return hr;
More information about the wine-cvs
mailing list