Module: wine Branch: master Commit: 16430c45cdbdc8fd20b10bd1e8d277cd4d154598 URL: https://source.winehq.org/git/wine.git/?a=commit;h=16430c45cdbdc8fd20b10bd1e...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Mon Oct 19 17:10:41 2020 +0300
dxva2: Add GetCreationParameters().
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/dxva2/main.c | 31 +++++++++++++++++++++++++------ dlls/dxva2/tests/dxva2.c | 6 ++---- 2 files changed, 27 insertions(+), 10 deletions(-)
diff --git a/dlls/dxva2/main.c b/dlls/dxva2/main.c index af6ad25697b..6262531c7d1 100644 --- a/dlls/dxva2/main.c +++ b/dlls/dxva2/main.c @@ -71,6 +71,10 @@ struct video_processor LONG refcount;
IDirectXVideoProcessorService *service; + GUID device; + DXVA2_VideoDesc video_desc; + D3DFORMAT rt_format; + unsigned int max_substreams; };
static BOOL dxva_array_reserve(void **elements, size_t *capacity, size_t count, size_t size) @@ -170,14 +174,25 @@ static HRESULT WINAPI video_processor_GetVideoProcessorService(IDirectXVideoProc }
static HRESULT WINAPI video_processor_GetCreationParameters(IDirectXVideoProcessor *iface, - GUID *device, DXVA2_VideoDesc *video_desc, D3DFORMAT *rt_format, UINT *maxstreams) + GUID *device, DXVA2_VideoDesc *video_desc, D3DFORMAT *rt_format, UINT *max_substreams) { - FIXME("%p, %p, %p, %p, %p.\n", iface, device, video_desc, rt_format, maxstreams); + struct video_processor *processor = impl_from_IDirectXVideoProcessor(iface); + + TRACE("%p, %p, %p, %p, %p.\n", iface, device, video_desc, rt_format, max_substreams);
- if (!device && !video_desc && !rt_format && !maxstreams) + if (!device && !video_desc && !rt_format && !max_substreams) return E_INVALIDARG;
- return E_NOTIMPL; + if (device) + *device = processor->device; + if (video_desc) + *video_desc = processor->video_desc; + if (rt_format) + *rt_format = processor->rt_format; + if (max_substreams) + *max_substreams = processor->max_substreams; + + return S_OK; }
static HRESULT WINAPI video_processor_GetVideoProcessorCaps(IDirectXVideoProcessor *iface, @@ -376,12 +391,12 @@ static HRESULT WINAPI device_manager_processor_service_GetFilterPropertyRange( }
static HRESULT WINAPI device_manager_processor_service_CreateVideoProcessor(IDirectXVideoProcessorService *iface, - REFGUID deviceguid, const DXVA2_VideoDesc *video_desc, D3DFORMAT rt_format, UINT max_substreams, + REFGUID device, const DXVA2_VideoDesc *video_desc, D3DFORMAT rt_format, UINT max_substreams, IDirectXVideoProcessor **processor) { struct video_processor *object;
- FIXME("%p, %s, %p, %d, %u, %p.\n", iface, debugstr_guid(deviceguid), video_desc, rt_format, max_substreams, + FIXME("%p, %s, %p, %d, %u, %p.\n", iface, debugstr_guid(device), video_desc, rt_format, max_substreams, processor);
/* FIXME: validate render target format */ @@ -393,6 +408,10 @@ static HRESULT WINAPI device_manager_processor_service_CreateVideoProcessor(IDir object->refcount = 1; object->service = iface; IDirectXVideoProcessorService_AddRef(object->service); + object->device = *device; + object->video_desc = *video_desc; + object->rt_format = rt_format; + object->max_substreams = max_substreams;
*processor = &object->IDirectXVideoProcessor_iface;
diff --git a/dlls/dxva2/tests/dxva2.c b/dlls/dxva2/tests/dxva2.c index 84ccd3b0190..f617bf74079 100644 --- a/dlls/dxva2/tests/dxva2.c +++ b/dlls/dxva2/tests/dxva2.c @@ -420,15 +420,13 @@ static void test_video_processor(void) ok(hr == E_INVALIDARG, "Unexpected hr %#x.\n", hr);
hr = IDirectXVideoProcessor_GetCreationParameters(processor, &guid, NULL, NULL, NULL); -todo_wine { ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(IsEqualGUID(&guid, &DXVA2_VideoProcSoftwareDevice), "Unexpected device guid.\n"); -} + hr = IDirectXVideoProcessor_GetCreationParameters(processor, NULL, NULL, &format, NULL); -todo_wine { ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(format == D3DFMT_A8R8G8B8, "Unexpected format %u.\n", format); -} + IDirectXVideoProcessor_Release(processor); IDirectXVideoProcessor_Release(processor2);