From: Santino Mazza smazza@codeweavers.com
--- dlls/amstream/ddrawstream.c | 7 +++++++ dlls/amstream/tests/amstream.c | 4 ++++ 2 files changed, 11 insertions(+)
diff --git a/dlls/amstream/ddrawstream.c b/dlls/amstream/ddrawstream.c index c7eba9b4892..03d0919c784 100644 --- a/dlls/amstream/ddrawstream.c +++ b/dlls/amstream/ddrawstream.c @@ -678,6 +678,13 @@ static HRESULT WINAPI ddraw_IDirectDrawMediaStream_SetFormat(IDirectDrawMediaStr
if (stream->peer && !is_format_compatible(stream, old_format.width, old_format.height, &old_format.pf)) { + if (stream->sample_refs > 0) + { + stream->format = old_format; + LeaveCriticalSection(&stream->cs); + return MS_E_SAMPLEALLOC; + } + if (FAILED(hr = CopyMediaType(&old_media_type, &stream->mt))) { stream->format = old_format; diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c index 2c05bcffd92..89adb41996a 100644 --- a/dlls/amstream/tests/amstream.c +++ b/dlls/amstream/tests/amstream.c @@ -8673,6 +8673,10 @@ static void test_ddrawstream_mem_allocator(void)
hr = IDirectDrawMediaStream_CreateSample(ddraw_stream, NULL, NULL, 0, &ddraw_sample1); ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IDirectDrawMediaStream_SetFormat(ddraw_stream, &rgb32_format, NULL); + ok(hr == MS_E_SAMPLEALLOC, "Got hr %#lx.\n", hr); + hr = IDirectDrawStreamSample_Update(ddraw_sample1, SSUPDATE_ASYNC, NULL, NULL, 0); ok(hr == MS_S_PENDING, "Got hr %#lx.\n", hr); hr = IDirectDrawMediaStream_CreateSample(ddraw_stream, NULL, NULL, 0, &ddraw_sample2);