Module: wine Branch: master Commit: 74b10b2a4c81f5b0f43f4004783fa6055f719b67 URL: https://source.winehq.org/git/wine.git/?a=commit;h=74b10b2a4c81f5b0f43f40047...
Author: Nikolay Sivov nsivov@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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)