From b9073b1e94d7be21cc2ee2ada888eb1f0a019c52 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Fri, 21 Jun 2019 22:35:41 -0500 Subject: [PATCH] quartz/memallocator: Clear some sample properties when freeing the sample. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=38421 Signed-off-by: Zebediah Figura Signed-off-by: Alexandre Julliard --- dlls/quartz/memallocator.c | 7 +++++++ dlls/quartz/tests/memallocator.c | 24 ++++++++++++------------ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/dlls/quartz/memallocator.c b/dlls/quartz/memallocator.c index 4e366f3146f..be973b30c58 100644 --- a/dlls/quartz/memallocator.c +++ b/dlls/quartz/memallocator.c @@ -492,6 +492,13 @@ static ULONG WINAPI StdMediaSample2_Release(IMediaSample2 * iface) if (!ref) { + if (This->props.pMediaType) + DeleteMediaType(This->props.pMediaType); + This->props.pMediaType = NULL; + This->props.dwSampleFlags = 0; + This->tMediaStart = INVALID_MEDIA_TIME; + This->tMediaEnd = 0; + if (This->pParent) IMemAllocator_ReleaseBuffer(This->pParent, (IMediaSample *)iface); else diff --git a/dlls/quartz/tests/memallocator.c b/dlls/quartz/tests/memallocator.c index 6f094c04d15..effb51dc265 100644 --- a/dlls/quartz/tests/memallocator.c +++ b/dlls/quartz/tests/memallocator.c @@ -324,13 +324,13 @@ static void test_sample_time(void) start = 0xdeadbeef; end = 0xdeadf00d; hr = IMediaSample_GetTime(sample, &start, &end); - todo_wine ok(hr == VFW_E_SAMPLE_TIME_NOT_SET, "Got hr %#x.\n", hr); - todo_wine ok(start == 0xdeadbeef, "Got start %s.\n", wine_dbgstr_longlong(start)); - todo_wine ok(end == 0xdeadf00d, "Got end %s.\n", wine_dbgstr_longlong(end)); + ok(hr == VFW_E_SAMPLE_TIME_NOT_SET, "Got hr %#x.\n", hr); + ok(start == 0xdeadbeef, "Got start %s.\n", wine_dbgstr_longlong(start)); + ok(end == 0xdeadf00d, "Got end %s.\n", wine_dbgstr_longlong(end)); hr = IMediaSample2_GetProperties(sample2, sizeof(props), (BYTE *)&props); ok(hr == S_OK, "Got hr %#x.\n", hr); - todo_wine ok(!props.dwSampleFlags, "Got flags %#x.\n", props.dwSampleFlags); + ok(!props.dwSampleFlags, "Got flags %#x.\n", props.dwSampleFlags); start = 0x123; end = 0x321; @@ -338,7 +338,7 @@ static void test_sample_time(void) ok(hr == S_OK, "Got hr %#x.\n", hr); hr = IMediaSample_GetTime(sample, &start, &end); - todo_wine ok(hr == VFW_E_SAMPLE_TIME_NOT_SET, "Got hr %#x.\n", hr); + ok(hr == VFW_E_SAMPLE_TIME_NOT_SET, "Got hr %#x.\n", hr); IMediaSample2_Release(sample2); IMediaSample_Release(sample); @@ -410,9 +410,9 @@ static void test_media_time(void) start = 0xdeadbeef; end = 0xdeadf00d; hr = IMediaSample_GetMediaTime(sample, &start, &end); - todo_wine ok(hr == VFW_E_MEDIA_TIME_NOT_SET, "Got hr %#x.\n", hr); - todo_wine ok(start == 0xdeadbeef, "Got start %s.\n", wine_dbgstr_longlong(start)); - todo_wine ok(end == 0xdeadf00d, "Got end %s.\n", wine_dbgstr_longlong(end)); + ok(hr == VFW_E_MEDIA_TIME_NOT_SET, "Got hr %#x.\n", hr); + ok(start == 0xdeadbeef, "Got start %s.\n", wine_dbgstr_longlong(start)); + ok(end == 0xdeadf00d, "Got end %s.\n", wine_dbgstr_longlong(end)); start = 0x123; end = 0x321; @@ -420,7 +420,7 @@ static void test_media_time(void) ok(hr == S_OK, "Got hr %#x.\n", hr); hr = IMediaSample_GetMediaTime(sample, &start, &end); - todo_wine ok(hr == VFW_E_MEDIA_TIME_NOT_SET, "Got hr %#x.\n", hr); + ok(hr == VFW_E_MEDIA_TIME_NOT_SET, "Got hr %#x.\n", hr); start = 0x123; end = 0x321; @@ -433,7 +433,7 @@ static void test_media_time(void) ok(hr == S_OK, "Got hr %#x.\n", hr); hr = IMediaSample_GetMediaTime(sample, &start, &end); - todo_wine ok(hr == VFW_E_MEDIA_TIME_NOT_SET, "Got hr %#x.\n", hr); + ok(hr == VFW_E_MEDIA_TIME_NOT_SET, "Got hr %#x.\n", hr); IMediaSample_Release(sample); IMemAllocator_Release(allocator); @@ -638,11 +638,11 @@ static void test_sample_properties(void) hr = IMediaSample2_GetProperties(sample2, sizeof(props), (BYTE *)&props); ok(hr == S_OK, "Got hr %#x.\n", hr); ok(!props.dwTypeSpecificFlags, "Got type-specific flags %#x.\n", props.dwTypeSpecificFlags); - todo_wine ok(!props.dwSampleFlags, "Got flags %#x.\n", props.dwSampleFlags); + ok(!props.dwSampleFlags, "Got flags %#x.\n", props.dwSampleFlags); ok(props.lActual == 123, "Got actual length %d.\n", props.lActual); ok(!props.tStart, "Got sample start %s.\n", wine_dbgstr_longlong(props.tStart)); ok(!props.dwStreamId, "Got stream ID %#x.\n", props.dwStreamId); - todo_wine ok(!props.pMediaType, "Got media type %p.\n", props.pMediaType); + ok(!props.pMediaType, "Got media type %p.\n", props.pMediaType); ok(props.cbBuffer == 65536, "Got buffer length %d.\n", props.cbBuffer); IMediaSample2_Release(sample2);