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