From b23154808f78cacf311994c8523349a3f210fac9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Bernon?= Date: Mon, 22 Aug 2022 16:04:36 +0200 Subject: [PATCH] winegstreamer: Use IWMSyncReader2_GetAllocateForStream in the async reader. --- dlls/winegstreamer/wm_asyncreader.c | 18 ++++++++++++++---- dlls/wmvcore/tests/wmvcore.c | 34 ++++++++++++++-------------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 4d067dbb239..9f25d726a51 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -905,11 +905,21 @@ static HRESULT WINAPI WMReaderAdvanced_SetAllocateForStream(IWMReaderAdvanced6 * return IWMSyncReader2_SetAllocateForStream(reader->reader, stream_number, allocate ? reader->allocator : NULL); } -static HRESULT WINAPI WMReaderAdvanced_GetAllocateForStream(IWMReaderAdvanced6 *iface, WORD output_num, BOOL *allocate) +static HRESULT WINAPI WMReaderAdvanced_GetAllocateForStream(IWMReaderAdvanced6 *iface, WORD stream_number, BOOL *allocate) { - struct async_reader *This = impl_from_IWMReaderAdvanced6(iface); - FIXME("(%p)->(%d %p)\n", This, output_num, allocate); - return E_NOTIMPL; + struct async_reader *reader = impl_from_IWMReaderAdvanced6(iface); + IWMReaderAllocatorEx *allocator; + HRESULT hr; + + TRACE("reader %p, stream_number %u, allocate %p.\n", reader, stream_number, allocate); + + if (FAILED(hr = IWMSyncReader2_GetAllocateForStream(reader->reader, stream_number, &allocator))) + return hr; + + if ((*allocate = allocator != NULL)) + IWMReaderAllocatorEx_Release(allocator); + + return hr; } static HRESULT WINAPI WMReaderAdvanced_GetStatistics(IWMReaderAdvanced6 *iface, WM_READER_STATISTICS *statistics) diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index fc4b6ac390c..401856eb744 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -2514,17 +2514,15 @@ static void test_async_reader_allocate(IWMReader *reader, ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMReaderAdvanced2_GetAllocateForStream(advanced, 0, &allocate); - todo_wine ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); + ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMReaderAdvanced2_GetAllocateForStream(advanced, 1, &allocate); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - if (hr == S_OK) - ok(!allocate, "Got allocate %d.\n", allocate); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(!allocate, "Got allocate %d.\n", allocate); hr = IWMReaderAdvanced2_GetAllocateForStream(advanced, 2, &allocate); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - if (hr == S_OK) - ok(!allocate, "Got allocate %d.\n", allocate); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(!allocate, "Got allocate %d.\n", allocate); hr = IWMReaderAdvanced2_GetAllocateForStream(advanced, 3, &allocate); - todo_wine ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); + ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); hr = IWMReaderAdvanced2_SetAllocateForOutput(advanced, 0, TRUE); ok(hr == S_OK, "Got hr %#lx.\n", hr); @@ -2541,13 +2539,11 @@ static void test_async_reader_allocate(IWMReader *reader, ok(allocate == TRUE, "Got allocate %d.\n", allocate); hr = IWMReaderAdvanced2_GetAllocateForStream(advanced, 1, &allocate); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - if (hr == S_OK) - ok(!allocate, "Got allocate %d.\n", allocate); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(!allocate, "Got allocate %d.\n", allocate); hr = IWMReaderAdvanced2_GetAllocateForStream(advanced, 2, &allocate); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - if (hr == S_OK) - ok(!allocate, "Got allocate %d.\n", allocate); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(!allocate, "Got allocate %d.\n", allocate); run_async_reader(reader, advanced, callback); @@ -2575,13 +2571,11 @@ static void test_async_reader_allocate(IWMReader *reader, ok(!allocate, "Got allocate %d.\n", allocate); hr = IWMReaderAdvanced2_GetAllocateForStream(advanced, 1, &allocate); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - if (hr == S_OK) - ok(allocate == TRUE, "Got allocate %d.\n", allocate); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(allocate == TRUE, "Got allocate %d.\n", allocate); hr = IWMReaderAdvanced2_GetAllocateForStream(advanced, 2, &allocate); - todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); - if (hr == S_OK) - ok(allocate == TRUE, "Got allocate %d.\n", allocate); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(allocate == TRUE, "Got allocate %d.\n", allocate); run_async_reader(reader, advanced, callback); -- 2.11.4.GIT