Nikolay Sivov : mfplat: Consider first type entry when returning major type for stream descriptors.
Alexandre Julliard
julliard at winehq.org
Mon Nov 2 16:21:19 CST 2020
Module: wine
Branch: master
Commit: 74b10b2a4c81f5b0f43f4004783fa6055f719b67
URL: https://source.winehq.org/git/wine.git/?a=commit;h=74b10b2a4c81f5b0f43f4004783fa6055f719b67
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Nov 2 15:27:48 2020 +0300
mfplat: Consider first type entry when returning major type for stream descriptors.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mfplat/mediatype.c | 6 ++----
dlls/mfplat/tests/mfplat.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c
index ccae999b7d7..0217237d85a 100644
--- a/dlls/mfplat/mediatype.c
+++ b/dlls/mfplat/mediatype.c
@@ -2003,10 +2003,8 @@ static HRESULT WINAPI mediatype_handler_GetMajorType(IMFMediaTypeHandler *iface,
TRACE("%p, %p.\n", iface, type);
EnterCriticalSection(&stream_desc->attributes.cs);
- if (stream_desc->current_type)
- hr = IMFMediaType_GetGUID(stream_desc->current_type, &MF_MT_MAJOR_TYPE, type);
- else
- hr = MF_E_ATTRIBUTENOTFOUND;
+ hr = IMFMediaType_GetGUID(stream_desc->current_type ? stream_desc->current_type :
+ stream_desc->media_types[0], &MF_MT_MAJOR_TYPE, type);
LeaveCriticalSection(&stream_desc->attributes.cs);
return hr;
diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
index fed6b392b21..a0789ee6b2c 100644
--- a/dlls/mfplat/tests/mfplat.c
+++ b/dlls/mfplat/tests/mfplat.c
@@ -3679,6 +3679,42 @@ static void test_stream_descriptor(void)
IMFMediaTypeHandler_Release(type_handler);
IMFStreamDescriptor_Release(stream_desc);
+
+ /* Major type is returned for first entry. */
+ hr = MFCreateMediaType(&media_types[0]);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = MFCreateMediaType(&media_types[1]);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFMediaType_SetGUID(media_types[0], &MF_MT_MAJOR_TYPE, &MFMediaType_Audio);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMFMediaType_SetGUID(media_types[1], &MF_MT_MAJOR_TYPE, &MFMediaType_Video);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = MFCreateStreamDescriptor(0, 2, media_types, &stream_desc);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFStreamDescriptor_GetMediaTypeHandler(stream_desc, &type_handler);
+ ok(hr == S_OK, "Failed to get type handler, hr %#x.\n", hr);
+
+ hr = IMFMediaTypeHandler_GetMajorType(type_handler, &major_type);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(IsEqualGUID(&major_type, &MFMediaType_Audio), "Unexpected major type %s.\n", wine_dbgstr_guid(&major_type));
+
+ hr = IMFMediaType_SetGUID(media_types[0], &MF_MT_MAJOR_TYPE, &MFMediaType_Video);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ hr = IMFMediaType_SetGUID(media_types[1], &MF_MT_MAJOR_TYPE, &MFMediaType_Audio);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFMediaTypeHandler_GetMajorType(type_handler, &major_type);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+ ok(IsEqualGUID(&major_type, &MFMediaType_Video), "Unexpected major type %s.\n", wine_dbgstr_guid(&major_type));
+
+ IMFMediaType_Release(media_types[0]);
+ IMFMediaType_Release(media_types[1]);
+
+ IMFMediaTypeHandler_Release(type_handler);
+ IMFStreamDescriptor_Release(stream_desc);
}
static void test_MFCalculateImageSize(void)
More information about the wine-cvs
mailing list