[PATCH 1/5] mfreadwrite: Duplicate media type returned with GetNativeMediaType().
Nikolay Sivov
nsivov at codeweavers.com
Fri Apr 19 03:06:11 CDT 2019
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
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 7625669ddb..d80e450c85 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 074c403e49..188e6889fe 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+ */
--
2.20.1
More information about the wine-devel
mailing list