Module: wine Branch: master Commit: 096172f27f9f7cc2d1dd4adacb5507b280589c81 URL: https://gitlab.winehq.org/wine/wine/-/commit/096172f27f9f7cc2d1dd4adacb5507b...
Author: Zebediah Figura zfigura@codeweavers.com Date: Wed Dec 6 13:37:17 2023 -0600
quartz: Do not forward IVMRFilterConfig::SetRenderingMode() to IVMRFilterConfig9.
---
dlls/quartz/vmr9.c | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-)
diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c index bc4ad4898f7..e0bcd970783 100644 --- a/dlls/quartz/vmr9.c +++ b/dlls/quartz/vmr9.c @@ -926,10 +926,47 @@ static HRESULT WINAPI VMR7FilterConfig_GetRenderingPrefs(IVMRFilterConfig *iface static HRESULT WINAPI VMR7FilterConfig_SetRenderingMode(IVMRFilterConfig *iface, DWORD mode) { struct quartz_vmr *filter = impl_from_IVMRFilterConfig(iface); + struct default_presenter *default_presenter; + HRESULT hr = S_OK; + + TRACE("filter %p, mode %lu.\n", filter, mode); + + EnterCriticalSection(&filter->renderer.filter.filter_cs); + if (filter->mode) + { + LeaveCriticalSection(&filter->renderer.filter.filter_cs); + return VFW_E_WRONG_STATE; + } + + switch (mode) + { + case VMRMode_Windowed: + case VMRMode_Windowless: + if (FAILED(hr = default_presenter_create(filter, &default_presenter))) + { + ERR("Failed to create default presenter, hr %#lx.\n", hr); + LeaveCriticalSection(&filter->renderer.filter.filter_cs); + return hr; + } + filter->allocator = &default_presenter->IVMRSurfaceAllocator9_iface; + filter->presenter = &default_presenter->IVMRImagePresenter9_iface; + IVMRImagePresenter9_AddRef(filter->presenter);
- TRACE("iface %p, mode %#lx.\n", iface, mode); + IVMRSurfaceAllocator9_AdviseNotify(filter->allocator, &filter->IVMRSurfaceAllocatorNotify9_iface); + break; + case VMRMode_Renderless: + break; + default: + LeaveCriticalSection(&filter->renderer.filter.filter_cs); + return E_INVALIDARG; + }
- return IVMRFilterConfig9_SetRenderingMode(&filter->IVMRFilterConfig9_iface, mode); + if (mode != VMRMode_Windowed) + video_window_cleanup(&filter->window); + + filter->mode = mode; + LeaveCriticalSection(&filter->renderer.filter.filter_cs); + return hr; }
static HRESULT WINAPI VMR7FilterConfig_GetRenderingMode(IVMRFilterConfig *iface, DWORD *mode)