Nikolay Sivov : mfreadwrite: Duplicate media type returned with GetNativeMediaType().

Alexandre Julliard julliard at winehq.org
Fri Apr 19 17:30:45 CDT 2019


Module: wine
Branch: master
Commit: 5b3fdc26b7450d312f33e0cad70eac5b55e746ec
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=5b3fdc26b7450d312f33e0cad70eac5b55e746ec

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Apr 19 11:06:11 2019 +0300

mfreadwrite: Duplicate media type returned with GetNativeMediaType().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mfreadwrite/main.c         | 10 ++++++++--
 dlls/mfreadwrite/tests/mfplat.c |  6 +++++-
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/dlls/mfreadwrite/main.c b/dlls/mfreadwrite/main.c
index 7625669..d80e450 100644
--- a/dlls/mfreadwrite/main.c
+++ b/dlls/mfreadwrite/main.c
@@ -463,6 +463,7 @@ static HRESULT WINAPI src_reader_GetNativeMediaType(IMFSourceReader *iface, DWOR
     struct source_reader *reader = impl_from_IMFSourceReader(iface);
     IMFMediaTypeHandler *handler;
     IMFStreamDescriptor *sd;
+    IMFMediaType *src_type;
     BOOL selected;
     HRESULT hr;
 
@@ -489,11 +490,16 @@ static HRESULT WINAPI src_reader_GetNativeMediaType(IMFSourceReader *iface, DWOR
         return hr;
 
     if (type_index == MF_SOURCE_READER_CURRENT_TYPE_INDEX)
-        hr = IMFMediaTypeHandler_GetCurrentMediaType(handler, type);
+        hr = IMFMediaTypeHandler_GetCurrentMediaType(handler, &src_type);
     else
-        hr = IMFMediaTypeHandler_GetMediaTypeByIndex(handler, type_index, type);
+        hr = IMFMediaTypeHandler_GetMediaTypeByIndex(handler, type_index, &src_type);
     IMFMediaTypeHandler_Release(handler);
 
+    if (SUCCEEDED(hr = MFCreateMediaType(type)))
+        hr = IMFMediaType_CopyAllItems(src_type, (IMFAttributes *)*type);
+
+    IMFMediaType_Release(src_type);
+
     return hr;
 }
 
diff --git a/dlls/mfreadwrite/tests/mfplat.c b/dlls/mfreadwrite/tests/mfplat.c
index 074c403..188e688 100644
--- a/dlls/mfreadwrite/tests/mfplat.c
+++ b/dlls/mfreadwrite/tests/mfplat.c
@@ -186,9 +186,9 @@ static struct async_callback *create_async_callback(void)
 
 static void test_source_reader(void)
 {
+    IMFMediaType *mediatype, *mediatype2;
     struct async_callback *callback;
     IMFAttributes *attributes;
-    IMFMediaType *mediatype;
     IMFSourceReader *reader;
     IMFMediaSource *source;
     IMFByteStream *stream;
@@ -267,6 +267,10 @@ todo_wine
 
     hr = IMFSourceReader_GetNativeMediaType(reader, MF_SOURCE_READER_FIRST_AUDIO_STREAM, 0, &mediatype);
     ok(hr == S_OK, "Failed to get native mediatype, hr %#x.\n", hr);
+    hr = IMFSourceReader_GetNativeMediaType(reader, MF_SOURCE_READER_FIRST_AUDIO_STREAM, 0, &mediatype2);
+    ok(hr == S_OK, "Failed to get native mediatype, hr %#x.\n", hr);
+    ok(mediatype != mediatype2, "Unexpected media type instance.\n");
+    IMFMediaType_Release(mediatype2);
     IMFMediaType_Release(mediatype);
 
     /* MF_SOURCE_READER_CURRENT_TYPE_INDEX is Win8+ */




More information about the wine-cvs mailing list