From: Rémi Bernon rbernon@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);