Aric Stewart : wineqtdecoder: Implement base IQualityControl in QTOutPin.
Alexandre Julliard
julliard at winehq.org
Wed Mar 28 12:47:05 CDT 2012
Module: wine
Branch: master
Commit: d2348911b73ce30985998dbd80ea797407741f74
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d2348911b73ce30985998dbd80ea797407741f74
Author: Aric Stewart <aric at codeweavers.com>
Date: Mon Mar 26 14:05:59 2012 -0500
wineqtdecoder: Implement base IQualityControl in QTOutPin.
---
dlls/wineqtdecoder/qtsplitter.c | 50 +++++++++++++++++++++++++++++++++++++++
1 files changed, 50 insertions(+), 0 deletions(-)
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c
index e7bfa0b..ba2d05d 100644
--- a/dlls/wineqtdecoder/qtsplitter.c
+++ b/dlls/wineqtdecoder/qtsplitter.c
@@ -133,6 +133,7 @@ extern CLSID CLSID_QTSplitter;
typedef struct QTOutPin {
BaseOutputPin pin;
+ IQualityControl IQualityControl_iface;
AM_MEDIA_TYPE * pmt;
OutputQueue * queue;
@@ -1246,6 +1247,8 @@ static HRESULT WINAPI QTOutPin_QueryInterface(IPin *iface, REFIID riid, void **p
*ppv = iface;
else if (IsEqualIID(riid, &IID_IMediaSeeking))
return IBaseFilter_QueryInterface(This->pin.pin.pinInfo.pFilter, &IID_IMediaSeeking, ppv);
+ else if (IsEqualIID(riid, &IID_IQualityControl))
+ *ppv = &This->IQualityControl_iface;
if (*ppv)
{
@@ -1346,6 +1349,52 @@ static const IPinVtbl QT_OutputPin_Vtbl = {
BasePinImpl_NewSegment
};
+static inline QTOutPin *impl_from_IQualityControl( IQualityControl *iface )
+{
+ return CONTAINING_RECORD(iface, QTOutPin, IQualityControl_iface);
+}
+
+HRESULT WINAPI QT_QualityControl_QueryInterface(IQualityControl *iface, REFIID riid, void **ppv)
+{
+ QTOutPin *This = impl_from_IQualityControl(iface);
+ return IPin_QueryInterface(&This->pin.pin.IPin_iface, riid, ppv);
+}
+
+ULONG WINAPI QT_QualityControl_AddRef(IQualityControl *iface)
+{
+ QTOutPin *This = impl_from_IQualityControl(iface);
+ return IPin_AddRef(&This->pin.pin.IPin_iface);
+}
+
+ULONG WINAPI QT_QualityControl_Release(IQualityControl *iface)
+{
+ QTOutPin *This = impl_from_IQualityControl(iface);
+ return IPin_Release(&This->pin.pin.IPin_iface);
+}
+
+static HRESULT WINAPI QT_QualityControl_Notify(IQualityControl *iface, IBaseFilter *sender, Quality qm)
+{
+ REFERENCE_TIME late = qm.Late;
+ if (qm.Late < 0 && -qm.Late > qm.TimeStamp)
+ late = -qm.TimeStamp;
+ /* TODO: Do Something */
+ return S_OK;
+}
+
+HRESULT WINAPI QT_QualityControl_SetSink(IQualityControl *iface, IQualityControl *tonotify)
+{
+ /* Do nothing */
+ return S_OK;
+}
+
+static const IQualityControlVtbl QTOutPin_QualityControl_Vtbl = {
+ QT_QualityControl_QueryInterface,
+ QT_QualityControl_AddRef,
+ QT_QualityControl_Release,
+ QT_QualityControl_Notify,
+ QT_QualityControl_SetSink
+};
+
static const BasePinFuncTable output_BaseFuncTable = {
NULL,
BaseOutputPinImpl_AttemptConnection,
@@ -1386,6 +1435,7 @@ static HRESULT QT_AddPin(QTSplitter *This, const PIN_INFO *piOutput, const AM_ME
pin->pmt = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
CopyMediaType(pin->pmt, amt);
pin->pin.pin.pinInfo.pFilter = (LPVOID)This;
+ pin->IQualityControl_iface.lpVtbl = &QTOutPin_QualityControl_Vtbl;
BaseFilterImpl_IncrementPinVersion(&This->filter);
More information about the wine-cvs
mailing list