Nikolay Sivov : evr/mixer: Implement GetVideoProcessorCaps().
Alexandre Julliard
julliard at winehq.org
Mon Apr 11 15:54:59 CDT 2022
Module: wine
Branch: master
Commit: 28423d79d4440b0b2a44ad92be305ba37d765012
URL: https://source.winehq.org/git/wine.git/?a=commit;h=28423d79d4440b0b2a44ad92be305ba37d765012
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Apr 11 11:23:13 2022 +0300
evr/mixer: Implement GetVideoProcessorCaps().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/evr/mixer.c | 25 +++++++++++++++++++++++--
dlls/evr/tests/evr.c | 4 +++-
2 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/dlls/evr/mixer.c b/dlls/evr/mixer.c
index c7e3033f2d1..668a97da979 100644
--- a/dlls/evr/mixer.c
+++ b/dlls/evr/mixer.c
@@ -1956,9 +1956,30 @@ static HRESULT WINAPI video_mixer_processor_GetAvailableVideoProcessorModes(IMFV
static HRESULT WINAPI video_mixer_processor_GetVideoProcessorCaps(IMFVideoProcessor *iface, GUID *mode,
DXVA2_VideoProcessorCaps *caps)
{
- FIXME("%p, %s, %p.\n", iface, debugstr_guid(mode), caps);
+ struct video_mixer *mixer = impl_from_IMFVideoProcessor(iface);
+ IDirectXVideoProcessorService *service;
+ DXVA2_VideoDesc video_desc;
+ GUID subtype = { 0 };
+ HRESULT hr;
- return E_NOTIMPL;
+ TRACE("%p, %s, %p.\n", iface, debugstr_guid(mode), caps);
+
+ EnterCriticalSection(&mixer->cs);
+
+ if (!mixer->inputs[0].media_type || !mixer->output.media_type)
+ hr = MF_E_TRANSFORM_TYPE_NOT_SET;
+ else if (SUCCEEDED(hr = video_mixer_get_processor_service(mixer, &service)))
+ {
+ video_mixer_init_dxva_videodesc(mixer->inputs[0].media_type, &video_desc);
+ IMFMediaType_GetGUID(mixer->output.media_type, &MF_MT_SUBTYPE, &subtype);
+
+ hr = IDirectXVideoProcessorService_GetVideoProcessorCaps(service, mode, &video_desc, subtype.Data1, caps);
+ IDirectXVideoProcessorService_Release(service);
+ }
+
+ LeaveCriticalSection(&mixer->cs);
+
+ return hr;
}
static HRESULT WINAPI video_mixer_processor_GetVideoProcessorMode(IMFVideoProcessor *iface, GUID *mode)
diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c
index bd280836046..93e262e52a3 100644
--- a/dlls/evr/tests/evr.c
+++ b/dlls/evr/tests/evr.c
@@ -1292,7 +1292,6 @@ static void test_default_mixer_type_negotiation(void)
ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "Unexpected hr %#lx.\n", hr);
hr = IMFVideoProcessor_GetVideoProcessorCaps(processor, (GUID *)&DXVA2_VideoProcSoftwareDevice, &caps);
- todo_wine
ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "Unexpected hr %#lx.\n", hr);
hr = IMFTransform_GetInputCurrentType(transform, 0, &media_type);
@@ -1324,6 +1323,9 @@ static void test_default_mixer_type_negotiation(void)
ok(count > 0 && !!guids, "Unexpected modes data.\n");
CoTaskMemFree(guids);
+ hr = IMFVideoProcessor_GetVideoProcessorCaps(processor, (GUID *)&DXVA2_VideoProcSoftwareDevice, &caps);
+ ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
+
hr = IMFTransform_GetOutputCurrentType(transform, 0, &media_type2);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(media_type == media_type2, "Unexpected media type instance.\n");
More information about the wine-cvs
mailing list