From: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/mfreadwrite/reader.c | 25 ++++++++++++++++++------- dlls/mfreadwrite/tests/mfplat.c | 5 +---- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/dlls/mfreadwrite/reader.c b/dlls/mfreadwrite/reader.c index de47d07df0d..097fce000fc 100644 --- a/dlls/mfreadwrite/reader.c +++ b/dlls/mfreadwrite/reader.c @@ -2089,14 +2089,9 @@ static HRESULT source_reader_create_transform(struct source_reader *reader, BOOL } count = 0; - if (SUCCEEDED(hr = MFTEnumEx(category, 0, &in_type, allow_processor ? NULL : &out_type, &activates, &count))) + if (SUCCEEDED(hr = MFTEnumEx(category, 0, &in_type, allow_processor ? NULL : &out_type, &activates, &count)) + && count) { - if (!count) - { - free(entry); - return MF_E_TOPO_CODEC_NOT_FOUND; - } - for (i = 0; i < count; i++) { if (FAILED(hr = IMFActivate_ActivateObject(activates[i], &IID_IMFTransform, (void **)&transform))) @@ -2114,6 +2109,22 @@ static HRESULT source_reader_create_transform(struct source_reader *reader, BOOL IMFActivate_Release(activates[i]); CoTaskMemFree(activates); } + else if (IsEqualGUID(&category, &MFT_CATEGORY_VIDEO_PROCESSOR) + && SUCCEEDED(hr = CoCreateInstance(&CLSID_VideoProcessorMFT, NULL, CLSCTX_INPROC_SERVER, + &IID_IMFTransform, (void **)&transform))) + { + if (FAILED(hr = source_reader_connect_transform(reader, allow_processor, input_type, output_type, transform, entry))) + IMFTransform_Release(transform); + else + { + entry->transform = transform; + *out = entry; + } + } + else + { + hr = MF_E_TOPO_CODEC_NOT_FOUND; + } if (FAILED(hr)) free(entry); diff --git a/dlls/mfreadwrite/tests/mfplat.c b/dlls/mfreadwrite/tests/mfplat.c index 8df7b4a13f9..6b050552e8f 100644 --- a/dlls/mfreadwrite/tests/mfplat.c +++ b/dlls/mfreadwrite/tests/mfplat.c @@ -3417,16 +3417,13 @@ static void test_source_reader_transforms_d3d11(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); init_media_type(media_type, abgr32_stream_type_desc, -1); hr = IMFSourceReader_SetCurrentMediaType(reader, 0, NULL, media_type); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); IMFMediaType_Release(media_type); - if (hr == S_OK) - { hr = IMFSourceReader_GetCurrentMediaType(reader, 0, &media_type); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); check_media_type(media_type, abgr32_expect_desc, -1); IMFMediaType_Release(media_type); - } hr = MFCreateMediaType(&media_type); ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/5626