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