Maarten Lankhorst : strmbase: Add support for IQualityControl to transform filter.
Alexandre Julliard
julliard at winehq.org
Mon Nov 8 11:46:23 CST 2010
Module: wine
Branch: master
Commit: 5955a349c6c3196374fd118eb6ccb7a5d63b12a3
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5955a349c6c3196374fd118eb6ccb7a5d63b12a3
Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Fri Nov 5 23:19:14 2010 +0100
strmbase: Add support for IQualityControl to transform filter.
---
dlls/strmbase/transform.c | 28 ++++++++++++++++++++++++++++
include/wine/strmbase.h | 3 +++
2 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/dlls/strmbase/transform.c b/dlls/strmbase/transform.c
index e17620c..029d289 100644
--- a/dlls/strmbase/transform.c
+++ b/dlls/strmbase/transform.c
@@ -44,6 +44,7 @@ static const WCHAR wcsOutputPinName[] = {'o','u','t','p','u','t',' ','p','i','n'
static const IBaseFilterVtbl TransformFilter_Vtbl;
static const IPinVtbl TransformFilter_InputPin_Vtbl;
static const IPinVtbl TransformFilter_OutputPin_Vtbl;
+static const IQualityControlVtbl TransformFilter_QualityControl_Vtbl;
static HRESULT WINAPI TransformFilter_Input_CheckMediaType(BasePin *iface, const AM_MEDIA_TYPE * pmt)
{
@@ -198,6 +199,10 @@ static HRESULT TransformFilter_Init(const IBaseFilterVtbl *pVtbl, const CLSID* p
if (FAILED(hr))
ERR("Cannot create output pin (%x)\n", hr);
+ else {
+ QualityControlImpl_init(&pTransformFilter->qcimpl, (IPin*)pTransformFilter->ppPins[0], (IBaseFilter*)pTransformFilter);
+ pTransformFilter->qcimpl.lpVtbl = &TransformFilter_QualityControl_Vtbl;
+ }
}
if (FAILED(hr))
{
@@ -238,6 +243,11 @@ HRESULT WINAPI TransformFilterImpl_QueryInterface(IBaseFilter * iface, REFIID ri
TransformFilter *This = (TransformFilter *)iface;
TRACE("(%p/%p)->(%s, %p)\n", This, iface, debugstr_guid(riid), ppv);
+ if (IsEqualIID(riid, &IID_IQualityControl)) {
+ *ppv = (IQualityControl*)&This->qcimpl;
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
+ }
hr = BaseFilterImpl_QueryInterface(iface, riid, ppv);
if (FAILED(hr) && (!IsEqualIID(riid, &IID_IPin) && !IsEqualIID(riid, &IID_IVideoWindow)))
@@ -547,3 +557,21 @@ static const IPinVtbl TransformFilter_OutputPin_Vtbl =
BaseOutputPinImpl_EndFlush,
BasePinImpl_NewSegment
};
+
+HRESULT WINAPI TransformFilter_QualityControlImpl_Notify(IQualityControl *iface, IBaseFilter *sender, Quality qm) {
+ QualityControlImpl *qc = (QualityControlImpl*)iface;
+ TransformFilter *This = (TransformFilter *)qc->self;
+
+ if (This->pFuncsTable->pfnNotify)
+ return This->pFuncsTable->pfnNotify(This, sender, qm);
+ else
+ return QualityControlImpl_Notify(iface, sender, qm);
+}
+
+static const IQualityControlVtbl TransformFilter_QualityControl_Vtbl = {
+ QualityControlImpl_QueryInterface,
+ QualityControlImpl_AddRef,
+ QualityControlImpl_Release,
+ TransformFilter_QualityControlImpl_Notify,
+ QualityControlImpl_SetSink
+};
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index b748930..bbb1363 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -219,6 +219,7 @@ typedef struct TransformFilter
AM_MEDIA_TYPE pmt;
const struct TransformFilterFuncTable * pFuncsTable;
+ QualityControlImpl qcimpl;
} TransformFilter;
typedef HRESULT (WINAPI *TransformFilter_DecideBufferSize) (TransformFilter *iface, IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest);
@@ -234,6 +235,7 @@ typedef HRESULT (WINAPI *TransformFilter_BeginFlush) (TransformFilter *iface);
typedef HRESULT (WINAPI *TransformFilter_EndFlush) (TransformFilter *iface);
typedef HRESULT (WINAPI *TransformFilter_NewSegment) (TransformFilter *iface,
REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
+typedef HRESULT (WINAPI *TransformFilter_Notify) (TransformFilter *iface, IBaseFilter *sender, Quality qm);
typedef struct TransformFilterFuncTable {
/* Required */
@@ -250,6 +252,7 @@ typedef struct TransformFilterFuncTable {
TransformFilter_BeginFlush pfnBeginFlush;
TransformFilter_EndFlush pfnEndFlush;
TransformFilter_NewSegment pfnNewSegment;
+ TransformFilter_Notify pfnNotify;
} TransformFilterFuncTable;
HRESULT WINAPI TransformFilterImpl_QueryInterface(IBaseFilter * iface, REFIID riid, LPVOID * ppv);
More information about the wine-cvs
mailing list