From 74b10b2a4c81f5b0f43f4004783fa6055f719b67 Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Mon, 2 Nov 2020 15:27:48 +0300 Subject: [PATCH] mfplat: Consider first type entry when returning major type for stream descriptors. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- 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)