From: Gijs Vermeulen gijsvrm@gmail.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57323 Signed-off-by: Gijs Vermeulen gijsvrm@gmail.com --- dlls/winegstreamer/wm_reader.c | 22 ++++++++++++++++++---- dlls/wmvcore/tests/wmvcore.c | 5 +++++ 2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index ce79aa04cd7..b3e2c4b46e3 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1932,11 +1932,25 @@ static HRESULT WINAPI reader_Close(IWMSyncReader2 *iface) return S_OK; }
-static HRESULT WINAPI reader_GetMaxOutputSampleSize(IWMSyncReader2 *iface, DWORD output, DWORD *max) +static HRESULT WINAPI reader_GetMaxOutputSampleSize(IWMSyncReader2 *iface, DWORD output_number, DWORD *size) { - struct wm_reader *This = impl_from_IWMSyncReader2(iface); - FIXME("(%p)->(%lu %p): stub!\n", This, output, max); - return E_NOTIMPL; + struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct wm_stream *stream; + + TRACE("reader %p, output_number %lu, size %p.\n", reader, output_number, size); + + EnterCriticalSection(&reader->cs); + + if (!(stream = get_stream_by_output_number(reader, output_number))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } + + *size = wg_format_get_max_size(&stream->format); + + LeaveCriticalSection(&reader->cs); + return S_OK; }
static HRESULT WINAPI reader_GetMaxStreamSampleSize(IWMSyncReader2 *iface, WORD stream_number, DWORD *size) diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index ff2ab4c21eb..462916edfa8 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -1219,6 +1219,11 @@ static void test_sync_reader_streaming(void)
for (i = 0; i < 2; ++i) { + DWORD max_sample_size = 0xdeadbeef; + hr = IWMSyncReader_GetMaxOutputSampleSize(reader, i, &max_sample_size); + ok(hr == S_OK, "Got hr %#lx for output %lu.\n", hr, i); + ok(max_sample_size > 0, "Expected max sample size > 0\n"); + hr = IWMProfile_GetStream(profile, i, &config); ok(hr == S_OK, "Got hr %#lx.\n", hr);