From: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/mfreadwrite/reader.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/dlls/mfreadwrite/reader.c b/dlls/mfreadwrite/reader.c index 6fabc482f0a..c9d20ca213c 100644 --- a/dlls/mfreadwrite/reader.c +++ b/dlls/mfreadwrite/reader.c @@ -1963,7 +1963,8 @@ static HRESULT source_reader_create_transform(struct source_reader *reader, BOOL { MFT_REGISTER_TYPE_INFO in_type, out_type; struct transform_entry *entry; - GUID *classes, category; + IMFActivate **activates; + GUID category; IMFTransform *transform; UINT i, count; HRESULT hr; @@ -1997,7 +1998,7 @@ static HRESULT source_reader_create_transform(struct source_reader *reader, BOOL } count = 0; - if (SUCCEEDED(hr = MFTEnum(category, 0, &in_type, allow_processor ? NULL : &out_type, NULL, &classes, &count))) + if (SUCCEEDED(hr = MFTEnumEx(category, 0, &in_type, allow_processor ? NULL : &out_type, &activates, &count))) { if (!count) { @@ -2007,8 +2008,8 @@ static HRESULT source_reader_create_transform(struct source_reader *reader, BOOL for (i = 0; i < count; i++) { - if (FAILED(hr = CoCreateInstance(&classes[i], NULL, CLSCTX_INPROC_SERVER, &IID_IMFTransform, (void **)&transform))) - break; + if (FAILED(IMFActivate_ActivateObject(activates[i], &IID_IMFTransform, (void **)&transform))) + continue; if (SUCCEEDED(hr = source_reader_connect_transform(reader, allow_processor, input_type, output_type, transform, entry))) { *out = entry; @@ -2018,7 +2019,9 @@ static HRESULT source_reader_create_transform(struct source_reader *reader, BOOL IMFTransform_Release(transform); } - CoTaskMemFree(classes); + for (i = 0; i < count; ++i) + IMFActivate_Release(activates[i]); + CoTaskMemFree(activates); } free(entry); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/5412