From: Ziqing Hui zhui@codeweavers.com
--- dlls/winegstreamer/quartz_parser.c | 4 +++- dlls/winegstreamer/wm_reader.c | 3 +++ dlls/wmvcore/tests/wmvcore.c | 14 +++++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c index 0e5bdeca713..33f63e1988c 100644 --- a/dlls/winegstreamer/quartz_parser.c +++ b/dlls/winegstreamer/quartz_parser.c @@ -327,6 +327,9 @@ unsigned int wg_format_get_max_size(const struct wg_format *format) * but as long as every sample fits into our allocator, we're fine. */ return format->u.video_cinepak.width * format->u.video_cinepak.height * 3;
+ case WG_MAJOR_TYPE_VIDEO_WMV: + return format->u.video_wmv.width * format->u.video_wmv.height * 3; + case WG_MAJOR_TYPE_AUDIO: { unsigned int rate = format->u.audio.rate, channels = format->u.audio.channels; @@ -376,7 +379,6 @@ unsigned int wg_format_get_max_size(const struct wg_format *format) case WG_MAJOR_TYPE_AUDIO_MPEG4: case WG_MAJOR_TYPE_AUDIO_WMA: case WG_MAJOR_TYPE_VIDEO_H264: - case WG_MAJOR_TYPE_VIDEO_WMV: case WG_MAJOR_TYPE_VIDEO_INDEO: FIXME("Format %u not implemented!\n", format->major_type); return 0; diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index a6a5a81663e..02237933905 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1826,6 +1826,9 @@ static HRESULT WINAPI reader_GetMaxStreamSampleSize(IWMSyncReader2 *iface, WORD
TRACE("reader %p, stream_number %u, size %p.\n", reader, stream_number, size);
+ if (!size) + return E_INVALIDARG; + EnterCriticalSection(&reader->cs);
if (!(stream = wm_reader_get_stream_by_stream_number(reader, stream_number))) diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c index 6071ac25ad7..2022aed85a2 100644 --- a/dlls/wmvcore/tests/wmvcore.c +++ b/dlls/wmvcore/tests/wmvcore.c @@ -912,7 +912,7 @@ static void test_sync_reader_compressed(IWMSyncReader *reader) QWORD pts, duration; INSSBuffer *sample; WORD stream_number; - DWORD flags; + DWORD flags, size; HRESULT hr;
hr = IWMSyncReader_SetReadStreamSamples(reader, 0, TRUE); @@ -924,6 +924,18 @@ static void test_sync_reader_compressed(IWMSyncReader *reader) hr = IWMSyncReader_SetReadStreamSamples(reader, 3, TRUE); ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr);
+ hr = IWMSyncReader_GetMaxStreamSampleSize(reader, 0, &size); + ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); + hr = IWMSyncReader_GetMaxStreamSampleSize(reader, 1, NULL); + ok(hr == E_INVALIDARG, "Got hr %#lx.\n", hr); + hr = IWMSyncReader_GetMaxStreamSampleSize(reader, 1, &size); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + ok(size == 64 * 48 * 3, "Got unexpected size %lu.\n", size); + hr = IWMSyncReader_GetMaxStreamSampleSize(reader, 2, &size); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine + ok(size == 743, "Got unexpected size %lu.\n", size); + hr = IWMSyncReader_SetRange(reader, 0, 0); ok(hr == S_OK, "Got hr %#lx.\n", hr);