From: Zebediah Figura zfigura@codeweavers.com
Rewrite needs this. --- dlls/quartz/vmr7_presenter.c | 152 +++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+)
diff --git a/dlls/quartz/vmr7_presenter.c b/dlls/quartz/vmr7_presenter.c index ddb402456f7..222e6db6048 100644 --- a/dlls/quartz/vmr7_presenter.c +++ b/dlls/quartz/vmr7_presenter.c @@ -28,6 +28,7 @@ struct vmr7_presenter { IVMRImagePresenter IVMRImagePresenter_iface; IVMRSurfaceAllocator IVMRSurfaceAllocator_iface; + IVMRWindowlessControl IVMRWindowlessControl_iface; LONG refcount; };
@@ -46,6 +47,8 @@ static HRESULT WINAPI image_presenter_QueryInterface(IVMRImagePresenter *iface, *out = iface; else if (IsEqualGUID(iid, &IID_IVMRSurfaceAllocator)) *out = &presenter->IVMRSurfaceAllocator_iface; + else if (IsEqualGUID(iid, &IID_IVMRWindowlessControl)) + *out = &presenter->IVMRWindowlessControl_iface; else { *out = NULL; @@ -170,6 +173,154 @@ static const IVMRSurfaceAllocatorVtbl surface_allocator_vtbl = surface_allocator_AdviseNotify, };
+static struct vmr7_presenter *impl_from_IVMRWindowlessControl(IVMRWindowlessControl *iface) +{ + return CONTAINING_RECORD(iface, struct vmr7_presenter, IVMRWindowlessControl_iface); +} + +static HRESULT WINAPI windowless_control_QueryInterface(IVMRWindowlessControl *iface, REFIID iid, void **out) +{ + struct vmr7_presenter *presenter = impl_from_IVMRWindowlessControl(iface); + + return IVMRImagePresenter_QueryInterface(&presenter->IVMRImagePresenter_iface, iid, out); +} + +static ULONG WINAPI windowless_control_AddRef(IVMRWindowlessControl *iface) +{ + struct vmr7_presenter *presenter = impl_from_IVMRWindowlessControl(iface); + + return IVMRImagePresenter_AddRef(&presenter->IVMRImagePresenter_iface); +} + +static ULONG WINAPI windowless_control_Release(IVMRWindowlessControl *iface) +{ + struct vmr7_presenter *presenter = impl_from_IVMRWindowlessControl(iface); + + return IVMRImagePresenter_Release(&presenter->IVMRImagePresenter_iface); +} + +static HRESULT WINAPI windowless_control_GetNativeVideoSize(IVMRWindowlessControl *iface, + LONG *width, LONG *height, LONG *aspect_width, LONG *aspect_height) +{ + FIXME("iface %p, width %p, height %p, aspect_width %p, aspect_height %p.\n", + iface, width, height, aspect_width, aspect_height); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_GetMinIdealVideoSize( + IVMRWindowlessControl *iface, LONG *width, LONG *height) +{ + FIXME("iface %p, width %p, height %p, stub!\n", iface, width, height); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_GetMaxIdealVideoSize( + IVMRWindowlessControl *iface, LONG *width, LONG *height) +{ + FIXME("iface %p, width %p, height %p, stub!\n", iface, width, height); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_SetVideoPosition( + IVMRWindowlessControl *iface, const RECT *source, const RECT *dest) +{ + FIXME("iface %p, source %s, dest %s, stub!.\n", iface, wine_dbgstr_rect(source), wine_dbgstr_rect(dest)); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_GetVideoPosition( + IVMRWindowlessControl *iface, RECT *source, RECT *dest) +{ + FIXME("iface %p, source %p, dest %p.\n", iface, source, dest); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_GetAspectRatioMode( + IVMRWindowlessControl *iface, DWORD *mode) +{ + FIXME("iface %p, mode %p, stub!\n", iface, mode); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_SetAspectRatioMode( + IVMRWindowlessControl *iface, DWORD mode) +{ + FIXME("iface %p, mode %#lx, stub!\n", iface, mode); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_SetVideoClippingWindow( + IVMRWindowlessControl *iface, HWND window) +{ + FIXME("iface %p, window %p, stub!.\n", iface, window); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_RepaintVideo( + IVMRWindowlessControl *iface, HWND window, HDC dc) +{ + FIXME("iface %p, window %p, dc %p, stub!\n", iface, window, dc); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_DisplayModeChanged(IVMRWindowlessControl *iface) +{ + FIXME("iface %p, stub!\n", iface); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_GetCurrentImage(IVMRWindowlessControl *iface, BYTE **image) +{ + FIXME("iface %p, image %p, stub!\n", iface, image); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_SetBorderColor(IVMRWindowlessControl *iface, COLORREF color) +{ + FIXME("iface %p, color %#08lx, stub!\n", iface, color); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_GetBorderColor(IVMRWindowlessControl *iface, COLORREF *color) +{ + FIXME("iface %p, color %p, stub!\n", iface, color); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_SetColorKey(IVMRWindowlessControl *iface, COLORREF color) +{ + FIXME("iface %p, color %#08lx, stub!\n", iface, color); + return E_NOTIMPL; +} + +static HRESULT WINAPI windowless_control_GetColorKey(IVMRWindowlessControl *iface, COLORREF *color) +{ + FIXME("iface %p, color %p, stub!\n", iface, color); + return E_NOTIMPL; +} + +static const IVMRWindowlessControlVtbl windowless_control_vtbl = +{ + windowless_control_QueryInterface, + windowless_control_AddRef, + windowless_control_Release, + windowless_control_GetNativeVideoSize, + windowless_control_GetMinIdealVideoSize, + windowless_control_GetMaxIdealVideoSize, + windowless_control_SetVideoPosition, + windowless_control_GetVideoPosition, + windowless_control_GetAspectRatioMode, + windowless_control_SetAspectRatioMode, + windowless_control_SetVideoClippingWindow, + windowless_control_RepaintVideo, + windowless_control_DisplayModeChanged, + windowless_control_GetCurrentImage, + windowless_control_SetBorderColor, + windowless_control_GetBorderColor, + windowless_control_SetColorKey, + windowless_control_GetColorKey, +}; + HRESULT vmr7_presenter_create(IUnknown *outer, IUnknown **out) { struct vmr7_presenter *object; @@ -183,6 +334,7 @@ HRESULT vmr7_presenter_create(IUnknown *outer, IUnknown **out) return E_OUTOFMEMORY; object->IVMRImagePresenter_iface.lpVtbl = &image_presenter_vtbl; object->IVMRSurfaceAllocator_iface.lpVtbl = &surface_allocator_vtbl; + object->IVMRWindowlessControl_iface.lpVtbl = &windowless_control_vtbl; object->refcount = 1;
TRACE("Created VMR7 default presenter %p.\n", object);