Aric Stewart : quartz: Add VMRFilterConfig9 to VMR9.
Alexandre Julliard
julliard at winehq.org
Thu Apr 5 12:31:46 CDT 2012
Module: wine
Branch: master
Commit: eb4972017e5188500c8144ecac81f75eba02884f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=eb4972017e5188500c8144ecac81f75eba02884f
Author: Aric Stewart <aric at codeweavers.com>
Date: Tue Apr 3 14:38:07 2012 -0500
quartz: Add VMRFilterConfig9 to VMR9.
---
dlls/quartz/vmr9.c | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 156 insertions(+), 0 deletions(-)
diff --git a/dlls/quartz/vmr9.c b/dlls/quartz/vmr9.c
index 07e3428..b8b81c2 100644
--- a/dlls/quartz/vmr9.c
+++ b/dlls/quartz/vmr9.c
@@ -53,12 +53,20 @@ typedef struct
IUnknown IUnknown_inner;
IAMFilterMiscFlags IAMFilterMiscFlags_iface;
+ IVMRFilterConfig9 IVMRFilterConfig9_iface;
+ IVMRSurfaceAllocatorEx9 *allocator;
+ IVMRImagePresenter9 *presenter;
+ BOOL allocator_is_ex;
+
+ VMR9Mode mode;
BITMAPINFOHEADER bmiheader;
IUnknown * outer_unk;
BOOL bUnkOuterValid;
BOOL bAggregatable;
+ DWORD_PTR cookie;
+
RECT source_rect;
RECT target_rect;
LONG VideoWidth;
@@ -95,6 +103,11 @@ static inline VMR9Impl *impl_from_IAMFilterMiscFlags( IAMFilterMiscFlags *iface)
return CONTAINING_RECORD(iface, VMR9Impl, IAMFilterMiscFlags_iface);
}
+static inline VMR9Impl *impl_from_IVMRFilterConfig9( IVMRFilterConfig9 *iface)
+{
+ return CONTAINING_RECORD(iface, VMR9Impl, IVMRFilterConfig9_iface);
+}
+
static HRESULT WINAPI VMR9_DoRenderSample(BaseRenderer *iface, IMediaSample * pSample)
{
VMR9Impl *This = (VMR9Impl *)iface;
@@ -433,6 +446,8 @@ static HRESULT WINAPI VMR9Inner_QueryInterface(IUnknown * iface, REFIID riid, LP
*ppv = &This->baseControlVideo.IBasicVideo_iface;
else if (IsEqualIID(riid, &IID_IAMFilterMiscFlags))
*ppv = &This->IAMFilterMiscFlags_iface;
+ else if (IsEqualIID(riid, &IID_IVMRFilterConfig9))
+ *ppv = &This->IVMRFilterConfig9_iface;
else
{
HRESULT hr;
@@ -494,6 +509,11 @@ static ULONG WINAPI VMR9Inner_Release(IUnknown * iface)
{
TRACE("Destroying\n");
+ if (This->allocator)
+ IVMRSurfaceAllocator9_Release(This->allocator);
+ if (This->presenter)
+ IVMRImagePresenter9_Release(This->presenter);
+
CoTaskMemFree(This);
}
return refCount;
@@ -762,6 +782,137 @@ static const IAMFilterMiscFlagsVtbl IAMFilterMiscFlags_Vtbl = {
AMFilterMiscFlags_GetMiscFlags
};
+static HRESULT WINAPI VMR9FilterConfig_QueryInterface(IVMRFilterConfig9 *iface, REFIID riid, LPVOID * ppv)
+{
+ VMR9Impl *This = impl_from_IVMRFilterConfig9(iface);
+ return VMR9_QueryInterface(&This->renderer.filter.IBaseFilter_iface, riid, ppv);
+}
+
+static ULONG WINAPI VMR9FilterConfig_AddRef(IVMRFilterConfig9 *iface)
+{
+ VMR9Impl *This = impl_from_IVMRFilterConfig9(iface);
+ return VMR9_AddRef(&This->renderer.filter.IBaseFilter_iface);
+}
+
+static ULONG WINAPI VMR9FilterConfig_Release(IVMRFilterConfig9 *iface)
+{
+ VMR9Impl *This = impl_from_IVMRFilterConfig9(iface);
+ return VMR9_Release(&This->renderer.filter.IBaseFilter_iface);
+}
+
+static HRESULT WINAPI VMR9FilterConfig_SetImageCompositor(IVMRFilterConfig9 *iface, IVMRImageCompositor9 *compositor)
+{
+ VMR9Impl *This = impl_from_IVMRFilterConfig9(iface);
+
+ FIXME("(%p/%p)->(%p) stub\n", iface, This, compositor);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI VMR9FilterConfig_SetNumberOfStreams(IVMRFilterConfig9 *iface, DWORD max)
+{
+ VMR9Impl *This = impl_from_IVMRFilterConfig9(iface);
+
+ FIXME("(%p/%p)->(%u) stub\n", iface, This, max);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI VMR9FilterConfig_GetNumberOfStreams(IVMRFilterConfig9 *iface, DWORD *max)
+{
+ VMR9Impl *This = impl_from_IVMRFilterConfig9(iface);
+
+ FIXME("(%p/%p)->(%p) stub\n", iface, This, max);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI VMR9FilterConfig_SetRenderingPrefs(IVMRFilterConfig9 *iface, DWORD renderflags)
+{
+ VMR9Impl *This = impl_from_IVMRFilterConfig9(iface);
+
+ FIXME("(%p/%p)->(%u) stub\n", iface, This, renderflags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI VMR9FilterConfig_GetRenderingPrefs(IVMRFilterConfig9 *iface, DWORD *renderflags)
+{
+ VMR9Impl *This = impl_from_IVMRFilterConfig9(iface);
+
+ FIXME("(%p/%p)->(%p) stub\n", iface, This, renderflags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI VMR9FilterConfig_SetRenderingMode(IVMRFilterConfig9 *iface, DWORD mode)
+{
+ HRESULT hr = S_OK;
+ VMR9Impl *This = impl_from_IVMRFilterConfig9(iface);
+
+ TRACE("(%p/%p)->(%u)\n", iface, This, mode);
+
+ EnterCriticalSection(&This->renderer.filter.csFilter);
+ if (This->mode)
+ {
+ LeaveCriticalSection(&This->renderer.filter.csFilter);
+ return VFW_E_WRONG_STATE;
+ }
+
+ if (This->allocator)
+ IVMRSurfaceAllocator9_Release(This->allocator);
+ if (This->presenter)
+ IVMRImagePresenter9_Release(This->presenter);
+
+ This->allocator = NULL;
+ This->presenter = NULL;
+
+ switch (mode)
+ {
+ case VMR9Mode_Windowed:
+ case VMR9Mode_Windowless:
+ This->allocator = NULL;
+ This->presenter = NULL;
+ This->allocator_is_ex = 0;
+ This->cookie = ~0;
+ break;
+ case VMR9Mode_Renderless:
+ break;
+ default:
+ LeaveCriticalSection(&This->renderer.filter.csFilter);
+ return E_INVALIDARG;
+ }
+
+ This->mode = mode;
+ LeaveCriticalSection(&This->renderer.filter.csFilter);
+ return hr;
+}
+
+static HRESULT WINAPI VMR9FilterConfig_GetRenderingMode(IVMRFilterConfig9 *iface, DWORD *mode)
+{
+ VMR9Impl *This = impl_from_IVMRFilterConfig9(iface);
+
+ TRACE("(%p/%p)->(%p) stub\n", iface, This, mode);
+ if (!mode)
+ return E_POINTER;
+
+ if (This->mode)
+ *mode = This->mode;
+ else
+ *mode = VMR9Mode_Windowed;
+
+ return S_OK;
+}
+
+static const IVMRFilterConfig9Vtbl VMR9_FilterConfig_Vtbl =
+{
+ VMR9FilterConfig_QueryInterface,
+ VMR9FilterConfig_AddRef,
+ VMR9FilterConfig_Release,
+ VMR9FilterConfig_SetImageCompositor,
+ VMR9FilterConfig_SetNumberOfStreams,
+ VMR9FilterConfig_GetNumberOfStreams,
+ VMR9FilterConfig_SetRenderingPrefs,
+ VMR9FilterConfig_GetRenderingPrefs,
+ VMR9FilterConfig_SetRenderingMode,
+ VMR9FilterConfig_GetRenderingMode
+};
+
HRESULT VMR9Impl_create(IUnknown * outer_unk, LPVOID * ppv)
{
HRESULT hr;
@@ -779,6 +930,11 @@ HRESULT VMR9Impl_create(IUnknown * outer_unk, LPVOID * ppv)
pVMR9->IUnknown_inner.lpVtbl = &IInner_VTable;
pVMR9->IAMFilterMiscFlags_iface.lpVtbl = &IAMFilterMiscFlags_Vtbl;
+ pVMR9->mode = 0;
+ pVMR9->allocator = NULL;
+ pVMR9->presenter = NULL;
+ pVMR9->IVMRFilterConfig9_iface.lpVtbl = &VMR9_FilterConfig_Vtbl;
+
hr = BaseRenderer_Init(&pVMR9->renderer, &VMR9_Vtbl, outer_unk, &CLSID_VideoMixingRenderer9, (DWORD_PTR)(__FILE__ ": VMR9Impl.csFilter"), &BaseFuncTable);
if (FAILED(hr))
goto fail;
More information about the wine-cvs
mailing list