From: Brendan McGrath bmcgrath@codeweavers.com
If IMFMediaSource::Shutdown is not called, then the streams are not released and they continue to hold a reference to the IMFMediaSource, so the reference count of the source never reaches 0. --- dlls/mfplat/tests/mfplat.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index c23dba5c24e..99ef074a282 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -1232,6 +1232,7 @@ static void test_compressed_media_types(IMFSourceResolver *resolver) IMFStreamDescriptor_Release(sd);
IMFPresentationDescriptor_Release(descriptor); + IMFMediaSource_Shutdown(source); IMFMediaSource_Release(source); IMFByteStream_Release(stream);
@@ -1379,8 +1380,8 @@ static void test_source_resolver(void) ok(mediasource != NULL, "got %p\n", mediasource); ok(obj_type == MF_OBJECT_MEDIASOURCE, "got %d\n", obj_type);
+ IMFMediaSource_Shutdown(mediasource); refcount = IMFMediaSource_Release(mediasource); - todo_wine ok(!refcount, "Unexpected refcount %ld\n", refcount); IMFByteStream_Release(stream);
@@ -1392,7 +1393,11 @@ static void test_source_resolver(void) hr = IMFSourceResolver_CreateObjectFromByteStream(resolver, stream, NULL, MF_RESOLUTION_MEDIASOURCE, NULL, &obj_type, (IUnknown **)&mediasource); ok(hr == S_OK || broken(hr == MF_E_UNSUPPORTED_BYTESTREAM_TYPE) /* w7 || w8 */, "Unexpected hr %#lx.\n", hr); - if (hr == S_OK) IMFMediaSource_Release(mediasource); + if (hr == S_OK) + { + IMFMediaSource_Shutdown(mediasource); + IMFMediaSource_Release(mediasource); + } IMFByteStream_Release(stream);
hr = MFCreateFile(MF_ACCESSMODE_READ, MF_OPENMODE_FAIL_IF_NOT_EXIST, MF_FILEFLAGS_NONE, filename, &stream); @@ -1404,7 +1409,11 @@ static void test_source_resolver(void) hr = IMFSourceResolver_CreateObjectFromByteStream(resolver, stream, NULL, MF_RESOLUTION_MEDIASOURCE, NULL, &obj_type, (IUnknown **)&mediasource); ok(hr == S_OK || broken(hr == MF_E_UNSUPPORTED_BYTESTREAM_TYPE) /* w7 || w8 */, "Unexpected hr %#lx.\n", hr); - if (hr == S_OK) IMFMediaSource_Release(mediasource); + if (hr == S_OK) + { + IMFMediaSource_Shutdown(mediasource); + IMFMediaSource_Release(mediasource); + } IMFByteStream_Release(stream);
/* stream must have a valid header, media cannot start in the middle of a stream */