Nikolay Sivov : mf/evr: Actually use custom mixer when available.
Alexandre Julliard
julliard at winehq.org
Mon Sep 7 16:12:54 CDT 2020
Module: wine
Branch: master
Commit: c1c4856205c78a9c8c153cbec2907e8b392b9838
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c1c4856205c78a9c8c153cbec2907e8b392b9838
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Sep 7 12:43:34 2020 +0300
mf/evr: Actually use custom mixer when available.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mf/evr.c | 36 ++++++++++++++++++++++--------------
1 file changed, 22 insertions(+), 14 deletions(-)
diff --git a/dlls/mf/evr.c b/dlls/mf/evr.c
index 8a4aa3c350..fe73f6a4a0 100644
--- a/dlls/mf/evr.c
+++ b/dlls/mf/evr.c
@@ -734,7 +734,7 @@ static HRESULT video_renderer_create_mixer(struct video_renderer *renderer, IMFA
CLSID clsid;
HRESULT hr;
- if (SUCCEEDED(IMFAttributes_GetUnknown(attributes, &MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE,
+ if (SUCCEEDED(hr = IMFAttributes_GetUnknown(attributes, &MF_ACTIVATE_CUSTOM_VIDEO_MIXER_ACTIVATE,
&IID_IMFActivate, (void **)&activate)))
{
IMFAttributes_GetUINT32(attributes, &MF_ACTIVATE_CUSTOM_VIDEO_MIXER_FLAGS, &flags);
@@ -744,23 +744,31 @@ static HRESULT video_renderer_create_mixer(struct video_renderer *renderer, IMFA
return hr;
}
- if (FAILED(IMFAttributes_GetGUID(attributes, &MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID, &clsid)))
- memcpy(&clsid, &CLSID_MFVideoMixer9, sizeof(clsid));
+ /* Activation object failed, use class activation. */
+ if (FAILED(hr))
+ {
+ if (FAILED(IMFAttributes_GetGUID(attributes, &MF_ACTIVATE_CUSTOM_VIDEO_MIXER_CLSID, &clsid)))
+ memcpy(&clsid, &CLSID_MFVideoMixer9, sizeof(clsid));
+ hr = CoCreateInstance(&clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IMFTransform, (void **)out);
+ }
- if (SUCCEEDED(hr = CoCreateInstance(&clsid, NULL, CLSCTX_INPROC_SERVER, &IID_IMFTransform, (void **)out)))
+ if (FAILED(hr))
{
- if (SUCCEEDED(hr = IMFTransform_QueryInterface(*out, &IID_IMFTopologyServiceLookupClient,
- (void **)&lookup_client)))
+ WARN("Failed to create a mixer object, hr %#x.\n", hr);
+ return hr;
+ }
+
+ if (SUCCEEDED(hr = IMFTransform_QueryInterface(*out, &IID_IMFTopologyServiceLookupClient,
+ (void **)&lookup_client)))
+ {
+ renderer->flags |= EVR_INIT_SERVICES;
+ if (SUCCEEDED(hr = IMFTopologyServiceLookupClient_InitServicePointers(lookup_client,
+ &renderer->IMFTopologyServiceLookup_iface)))
{
- renderer->flags |= EVR_INIT_SERVICES;
- if (SUCCEEDED(hr = IMFTopologyServiceLookupClient_InitServicePointers(lookup_client,
- &renderer->IMFTopologyServiceLookup_iface)))
- {
- renderer->flags |= EVR_MIXER_INITED_SERVICES;
- }
- renderer->flags &= ~EVR_INIT_SERVICES;
- IMFTopologyServiceLookupClient_Release(lookup_client);
+ renderer->flags |= EVR_MIXER_INITED_SERVICES;
}
+ renderer->flags &= ~EVR_INIT_SERVICES;
+ IMFTopologyServiceLookupClient_Release(lookup_client);
}
return hr;
More information about the wine-cvs
mailing list