[PATCH 1/5] wineqtdecoder: Use strmbase_source_init().

Zebediah Figura z.figura12 at gmail.com
Thu Sep 5 19:02:12 CDT 2019


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
Not compile-tested.

 dlls/wineqtdecoder/qtsplitter.c | 48 +++++++++++++--------------------
 1 file changed, 18 insertions(+), 30 deletions(-)

diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c
index e7597e16ca8..3931452e525 100644
--- a/dlls/wineqtdecoder/qtsplitter.c
+++ b/dlls/wineqtdecoder/qtsplitter.c
@@ -790,10 +790,8 @@ static void free_source_pin(QTOutPin *pin)
     LeaveCriticalSection(pin->pin.pin.pCritSec);
 
     DeleteMediaType(pin->pmt);
-    FreeMediaType(&pin->pin.pin.mtCurrent);
-    if (pin->pin.pAllocator)
-        IMemAllocator_Release(pin->pin.pAllocator);
-    CoTaskMemFree(pin);
+    strmbase_source_cleanup(&pin->pin);
+    heap_free(pin);
 }
 
 /*
@@ -1446,38 +1444,28 @@ static const OutputQueueFuncTable output_OutputQueueFuncTable = {
     OutputQueueImpl_ThreadProc
 };
 
-static HRESULT QT_AddPin(QTSplitter *This, const PIN_INFO *piOutput, const AM_MEDIA_TYPE *amt, BOOL video)
+static HRESULT QT_AddPin(QTSplitter *filter, const PIN_INFO *pin_info,
+        const AM_MEDIA_TYPE *mt, BOOL video)
 {
-    HRESULT hr;
-    IPin **target;
+    QTOutPin *pin;
+
+    if (!(pin = heap_alloc_zero(sizeof(*pin))))
+        return E_OUTOFMEMORY;
 
     if (video)
-        target = (IPin**)&This->pVideo_Pin;
+        filter->pVideo_Pin = pin;
     else
-        target = (IPin**)&This->pAudio_Pin;
-
-    if (*target != NULL)
-    {
-        FIXME("We already have a %s pin\n",(video)?"video":"audio");
-        return E_FAIL;
-    }
+        filter->pAudio_Pin = pin;
 
-    hr = BaseOutputPin_Construct(&QT_OutputPin_Vtbl, sizeof(QTOutPin), piOutput, &output_BaseOutputFuncTable, &This->filter.csFilter, (IPin**)target);
-    if (SUCCEEDED(hr))
-    {
-        QTOutPin *pin = (QTOutPin*)*target;
-        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);
+    strmbase_source_init(&pin->pin, &QT_OutputPin_Vtbl, piOutput,
+            &output_BaseOutputFuncTable, &filter->filter.csFilter);
+    pin->pmt = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
+    CopyMediaType(pin->pmt, mt);
+    pin->IQualityControl_iface.lpVtbl = &QTOutPin_QualityControl_Vtbl;
+    BaseFilterImpl_IncrementPinVersion(&filter->filter);
 
-        hr = OutputQueue_Construct(&pin->pin, TRUE, TRUE, 5, FALSE, THREAD_PRIORITY_NORMAL, &output_OutputQueueFuncTable, &pin->queue);
-    }
-    else
-        ERR("Failed with error %x\n", hr);
-    return hr;
+    return OutputQueue_Construct(&pin->pin, TRUE, TRUE, 5, FALSE,
+            THREAD_PRIORITY_NORMAL, &output_OutputQueueFuncTable, &pin->queue);
 }
 
 static HRESULT WINAPI QTSplitter_ChangeStart(IMediaSeeking *iface)
-- 
2.22.0




More information about the wine-devel mailing list