[PATCH v2 3/5] quartz/vmr9: Add IVMRMixerControl9.
Zebediah Figura
z.figura12 at gmail.com
Tue May 12 21:25:00 CDT 2020
Needed by Sniper Fury and Modern Combat 5.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/quartz/tests/vmr9.c | 7 +-
dlls/quartz/vmr9.c | 171 +++++++++++++++++++++++++++++++++++++++
2 files changed, 174 insertions(+), 4 deletions(-)
diff --git a/dlls/quartz/tests/vmr9.c b/dlls/quartz/tests/vmr9.c
index 3edc91a342d..d7664adac08 100644
--- a/dlls/quartz/tests/vmr9.c
+++ b/dlls/quartz/tests/vmr9.c
@@ -334,7 +334,7 @@ static void test_interfaces(void)
check_interface(filter, &IID_IBasicVideo, TRUE);
todo_wine check_interface(filter, &IID_IBasicVideo2, TRUE);
check_interface(filter, &IID_IVideoWindow, TRUE);
- todo_wine check_interface(filter, &IID_IVMRMixerControl9, TRUE);
+ check_interface(filter, &IID_IVMRMixerControl9, TRUE);
/* IVMRMonitorConfig9 may not be available if the d3d9 device has
* insufficient support. */
check_interface_broken(filter, &IID_IVMRMonitorConfig9, TRUE);
@@ -3153,9 +3153,8 @@ static void test_mixing_mode(void)
ok(stream_count == 1, "Got %u streams.\n", stream_count);
hr = IBaseFilter_QueryInterface(filter, &IID_IVMRMixerControl9, (void **)&mixer_control);
- todo_wine ok(hr == S_OK, "Got hr %#x.\n", hr);
- if (hr == S_OK)
- IVMRMixerControl9_Release(mixer_control);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ IVMRMixerControl9_Release(mixer_control);
hr = IVMRFilterConfig9_SetNumberOfStreams(config, 2);
ok(hr == VFW_E_WRONG_STATE, "Got hr %#x.\n", hr);
diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c
index 6dfc82804f1..edcfe447323 100644
--- a/dlls/quartz/vmr9.c
+++ b/dlls/quartz/vmr9.c
@@ -63,6 +63,7 @@ struct quartz_vmr
IVMRFilterConfig IVMRFilterConfig_iface;
IVMRFilterConfig9 IVMRFilterConfig9_iface;
IVMRMixerBitmap9 IVMRMixerBitmap9_iface;
+ IVMRMixerControl9 IVMRMixerControl9_iface;
IVMRMonitorConfig IVMRMonitorConfig_iface;
IVMRMonitorConfig9 IVMRMonitorConfig9_iface;
IVMRSurfaceAllocatorNotify IVMRSurfaceAllocatorNotify_iface;
@@ -597,6 +598,8 @@ static HRESULT vmr_query_interface(struct strmbase_renderer *iface, REFIID iid,
*out = &filter->IVMRFilterConfig9_iface;
else if (IsEqualGUID(iid, &IID_IVMRMixerBitmap9) && is_vmr9(filter))
*out = &filter->IVMRMixerBitmap9_iface;
+ else if (IsEqualGUID(iid, &IID_IVMRMixerControl9) && is_vmr9(filter) && filter->stream_count)
+ *out = &filter->IVMRMixerControl9_iface;
else if (IsEqualGUID(iid, &IID_IVMRMonitorConfig))
*out = &filter->IVMRMonitorConfig_iface;
else if (IsEqualGUID(iid, &IID_IVMRMonitorConfig9))
@@ -2121,6 +2124,173 @@ static const IVMRSurfaceAllocatorNotify9Vtbl VMR9_SurfaceAllocatorNotify_Vtbl =
VMR9SurfaceAllocatorNotify_NotifyEvent
};
+static inline struct quartz_vmr *impl_from_IVMRMixerControl9(IVMRMixerControl9 *iface)
+{
+ return CONTAINING_RECORD(iface, struct quartz_vmr, IVMRMixerControl9_iface);
+}
+
+static HRESULT WINAPI mixer_control9_QueryInterface(IVMRMixerControl9 *iface, REFIID iid, void **out)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+ return IUnknown_QueryInterface(filter->renderer.filter.outer_unk, iid, out);
+}
+
+static ULONG WINAPI mixer_control9_AddRef(IVMRMixerControl9 *iface)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+ return IUnknown_AddRef(filter->renderer.filter.outer_unk);
+}
+
+static ULONG WINAPI mixer_control9_Release(IVMRMixerControl9 *iface)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+ return IUnknown_Release(filter->renderer.filter.outer_unk);
+}
+
+static HRESULT WINAPI mixer_control9_SetAlpha(IVMRMixerControl9 *iface, DWORD stream, float alpha)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, stream %u, alpha %.8e, stub!\n", filter, stream, alpha);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI mixer_control9_GetAlpha(IVMRMixerControl9 *iface, DWORD stream, float *alpha)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, stream %u, alpha %p, stub!\n", filter, stream, alpha);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI mixer_control9_SetZOrder(IVMRMixerControl9 *iface, DWORD stream, DWORD z)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, stream %u, z %u, stub!\n", filter, stream, z);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI mixer_control9_GetZOrder(IVMRMixerControl9 *iface, DWORD stream, DWORD *z)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, stream %u, z %p, stub!\n", filter, stream, z);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI mixer_control9_SetOutputRect(IVMRMixerControl9 *iface,
+ DWORD stream, const VMR9NormalizedRect *rect)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, stream %u, rect %s, stub!\n", filter, stream, debugstr_normalized_rect(rect));
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI mixer_control9_GetOutputRect(IVMRMixerControl9 *iface,
+ DWORD stream, VMR9NormalizedRect *rect)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, stream %u, rect %p, stub!\n", filter, stream, rect);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI mixer_control9_SetBackgroundClr(IVMRMixerControl9 *iface, COLORREF color)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, color #%06x, stub!\n", filter, color);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI mixer_control9_GetBackgroundClr(IVMRMixerControl9 *iface, COLORREF *color)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, color %p, stub!\n", filter, color);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI mixer_control9_SetMixingPrefs(IVMRMixerControl9 *iface, DWORD flags)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, flags %#x, stub!\n", filter, flags);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI mixer_control9_GetMixingPrefs(IVMRMixerControl9 *iface, DWORD *flags)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, flags %p, stub!\n", filter, flags);
+
+ *flags = MixerPref9_NoDecimation | MixerPref9_ARAdjustXorY | MixerPref9_BiLinearFiltering | MixerPref9_RenderTargetRGB;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI mixer_control9_SetProcAmpControl(IVMRMixerControl9 *iface,
+ DWORD stream, VMR9ProcAmpControl *settings)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, settings %p, stub!\n", filter, settings);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI mixer_control9_GetProcAmpControl(IVMRMixerControl9 *iface,
+ DWORD stream, VMR9ProcAmpControl *settings)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, settings %p, stub!\n", filter, settings);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI mixer_control9_GetProcAmpControlRange(IVMRMixerControl9 *iface,
+ DWORD stream, VMR9ProcAmpControlRange *settings)
+{
+ struct quartz_vmr *filter = impl_from_IVMRMixerControl9(iface);
+
+ FIXME("filter %p, settings %p, stub!\n", filter, settings);
+
+ return E_NOTIMPL;
+}
+
+static const IVMRMixerControl9Vtbl mixer_control9_vtbl =
+{
+ mixer_control9_QueryInterface,
+ mixer_control9_AddRef,
+ mixer_control9_Release,
+ mixer_control9_SetAlpha,
+ mixer_control9_GetAlpha,
+ mixer_control9_SetZOrder,
+ mixer_control9_GetZOrder,
+ mixer_control9_SetOutputRect,
+ mixer_control9_GetOutputRect,
+ mixer_control9_SetBackgroundClr,
+ mixer_control9_GetBackgroundClr,
+ mixer_control9_SetMixingPrefs,
+ mixer_control9_GetMixingPrefs,
+ mixer_control9_SetProcAmpControl,
+ mixer_control9_GetProcAmpControl,
+ mixer_control9_GetProcAmpControlRange,
+};
+
static inline struct quartz_vmr *impl_from_IVMRMixerBitmap9(IVMRMixerBitmap9 *iface)
{
return CONTAINING_RECORD(iface, struct quartz_vmr, IVMRMixerBitmap9_iface);
@@ -2307,6 +2477,7 @@ static HRESULT vmr_create(IUnknown *outer, IUnknown **out, const CLSID *clsid)
object->IVMRFilterConfig_iface.lpVtbl = &VMR7_FilterConfig_Vtbl;
object->IVMRFilterConfig9_iface.lpVtbl = &VMR9_FilterConfig_Vtbl;
object->IVMRMixerBitmap9_iface.lpVtbl = &mixer_bitmap9_vtbl;
+ object->IVMRMixerControl9_iface.lpVtbl = &mixer_control9_vtbl;
object->IVMRMonitorConfig_iface.lpVtbl = &VMR7_MonitorConfig_Vtbl;
object->IVMRMonitorConfig9_iface.lpVtbl = &VMR9_MonitorConfig_Vtbl;
object->IVMRSurfaceAllocatorNotify_iface.lpVtbl = &VMR7_SurfaceAllocatorNotify_Vtbl;
--
2.26.2
More information about the wine-devel
mailing list