[PATCH 4/5] mfplat: Default to synchronous model for locally registered MFTs.
Nikolay Sivov
nsivov at codeweavers.com
Tue Mar 3 03:22:45 CST 2020
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/mfplat/main.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
index d15bf00337..a1314f6eb3 100644
--- a/dlls/mfplat/main.c
+++ b/dlls/mfplat/main.c
@@ -97,6 +97,7 @@ struct mft_registration
UINT32 input_types_count;
MFT_REGISTER_TYPE_INFO *output_types;
UINT32 output_types_count;
+ BOOL local;
};
static CRITICAL_SECTION local_mfts_section = { NULL, -1, 0, 0, 0, 0 };
@@ -818,7 +819,10 @@ static HRESULT mft_register_local(IClassFactory *factory, REFCLSID clsid, REFGUI
if (clsid)
mft->clsid = *clsid;
mft->category = *category;
- mft->flags = flags | MFT_ENUM_FLAG_LOCALMFT;
+ if (!(flags & (MFT_ENUM_FLAG_SYNCMFT | MFT_ENUM_FLAG_ASYNCMFT | MFT_ENUM_FLAG_HARDWARE)))
+ flags |= MFT_ENUM_FLAG_SYNCMFT;
+ mft->flags = flags;
+ mft->local = TRUE;
if (FAILED(hr = heap_strdupW(name, &mft->name)))
goto failed;
@@ -1198,6 +1202,7 @@ static HRESULT mft_enum(GUID category, UINT32 flags, const MFT_REGISTER_TYPE_INF
if (mft->factory)
IClassFactory_AddRef(mft->factory);
mft->flags = local->flags;
+ mft->local = local->local;
list_add_tail(&mfts, &mft->entry);
}
@@ -1213,7 +1218,7 @@ static HRESULT mft_enum(GUID category, UINT32 flags, const MFT_REGISTER_TYPE_INF
/* Local registrations. */
LIST_FOR_EACH_ENTRY_SAFE(mft, mft2, &mfts, struct mft_registration, entry)
{
- if (mft->flags & MFT_ENUM_FLAG_LOCALMFT)
+ if (mft->local)
{
list_remove(&mft->entry);
list_add_tail(&mfts_sorted, &mft->entry);
@@ -1239,7 +1244,7 @@ static HRESULT mft_enum(GUID category, UINT32 flags, const MFT_REGISTER_TYPE_INF
list_add_tail(&mfts_sorted, &mft->entry);
}
- result = &mfts;
+ result = &mfts_sorted;
}
IMFPluginControl_Release(plugin_control);
@@ -1265,7 +1270,7 @@ static HRESULT mft_enum(GUID category, UINT32 flags, const MFT_REGISTER_TYPE_INF
{
(*activate)[obj_count] = mft_activate;
- if (mft->flags & MFT_ENUM_FLAG_LOCALMFT)
+ if (mft->local)
{
IMFActivate_SetUINT32(mft_activate, &MFT_PROCESS_LOCAL_Attribute, 1);
}
--
2.25.1
More information about the wine-devel
mailing list