[PATCH 5/5] qcap/smartteefilter: Store the sink pin inline in the AviCompressor structure.

Zebediah Figura zfigura at codeweavers.com
Wed Jun 12 18:58:38 CDT 2019


From: Zebediah Figura <z.figura12 at gmail.com>

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/qcap/smartteefilter.c | 49 +++++++++++++++++++-------------------
 1 file changed, 24 insertions(+), 25 deletions(-)

diff --git a/dlls/qcap/smartteefilter.c b/dlls/qcap/smartteefilter.c
index 02503ecb789..69341af8fdd 100644
--- a/dlls/qcap/smartteefilter.c
+++ b/dlls/qcap/smartteefilter.c
@@ -37,7 +37,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(qcap);
 
 typedef struct {
     BaseFilter filter;
-    BaseInputPin *input;
+    BaseInputPin sink;
     BaseOutputPin *capture;
     BaseOutputPin *preview;
 } SmartTeeFilter;
@@ -91,7 +91,7 @@ static HRESULT WINAPI SmartTeeFilter_Run(IBaseFilter *iface, REFERENCE_TIME tSta
         /* We share an allocator among all pins, an allocator can only get committed
          * once, state transitions occur in upstream order, and only output pins
          * commit allocators, so let the filter attached to the input pin worry about it. */
-        if (This->input->pin.pConnectedTo)
+        if (This->sink.pin.pConnectedTo)
             This->filter.state = State_Running;
         else
             hr = VFW_E_NOT_CONNECTED;
@@ -123,7 +123,7 @@ static IPin *smart_tee_get_pin(BaseFilter *iface, unsigned int index)
     SmartTeeFilter *filter = impl_from_BaseFilter(iface);
 
     if (index == 0)
-        return &filter->input->pin.IPin_iface;
+        return &filter->sink.pin.IPin_iface;
     else if (index == 1)
         return &filter->capture->pin.IPin_iface;
     else if (index == 2)
@@ -135,8 +135,7 @@ static void smart_tee_destroy(BaseFilter *iface)
 {
     SmartTeeFilter *filter = impl_from_BaseFilter(iface);
 
-    if (filter->input)
-        BaseInputPinImpl_Release(&filter->input->pin.IPin_iface);
+    strmbase_sink_cleanup(&filter->sink);
     if (filter->capture)
         BaseOutputPinImpl_Release(&filter->capture->pin.IPin_iface);
     if (filter->preview)
@@ -204,10 +203,12 @@ static HRESULT WINAPI SmartTeeFilterInput_GetMediaType(BasePin *base, int iPosit
     if (iPosition)
         return S_FALSE;
     EnterCriticalSection(&This->filter.csFilter);
-    if (This->input->pin.pConnectedTo) {
-        CopyMediaType(amt, &This->input->pin.mtCurrent);
+    if (This->sink.pin.pConnectedTo)
+    {
+        CopyMediaType(amt, &This->sink.pin.mtCurrent);
         hr = S_OK;
-    } else
+    }
+    else
         hr = S_FALSE;
     LeaveCriticalSection(&This->filter.csFilter);
     return hr;
@@ -360,9 +361,9 @@ static HRESULT WINAPI SmartTeeFilterCapture_EnumMediaTypes(IPin *iface, IEnumMed
     HRESULT hr;
     TRACE("(%p)->(%p)\n", This, ppEnum);
     EnterCriticalSection(&This->filter.csFilter);
-    if (This->input->pin.pConnectedTo) {
+    if (This->sink.pin.pConnectedTo)
         hr = BasePinImpl_EnumMediaTypes(iface, ppEnum);
-    } else
+    else
         hr = VFW_E_NOT_CONNECTED;
     LeaveCriticalSection(&This->filter.csFilter);
     return hr;
@@ -400,7 +401,7 @@ static HRESULT WINAPI SmartTeeFilterCapture_GetMediaType(BasePin *base, int iPos
     SmartTeeFilter *This = impl_from_BasePin(base);
     TRACE("(%p, %d, %p)\n", This, iPosition, amt);
     if (iPosition == 0) {
-        CopyMediaType(amt, &This->input->pin.mtCurrent);
+        CopyMediaType(amt, &This->sink.pin.mtCurrent);
         return S_OK;
     } else
         return S_FALSE;
@@ -410,9 +411,9 @@ static HRESULT WINAPI SmartTeeFilterCapture_DecideAllocator(BaseOutputPin *base,
 {
     SmartTeeFilter *This = impl_from_BasePin(&base->pin);
     TRACE("(%p, %p, %p)\n", This, pPin, pAlloc);
-    *pAlloc = This->input->pAllocator;
-    IMemAllocator_AddRef(This->input->pAllocator);
-    return IMemInputPin_NotifyAllocator(pPin, This->input->pAllocator, TRUE);
+    *pAlloc = This->sink.pAllocator;
+    IMemAllocator_AddRef(This->sink.pAllocator);
+    return IMemInputPin_NotifyAllocator(pPin, This->sink.pAllocator, TRUE);
 }
 
 static const BaseOutputPinFuncTable SmartTeeFilterCaptureFuncs = {
@@ -443,9 +444,9 @@ static HRESULT WINAPI SmartTeeFilterPreview_EnumMediaTypes(IPin *iface, IEnumMed
     HRESULT hr;
     TRACE("(%p)->(%p)\n", This, ppEnum);
     EnterCriticalSection(&This->filter.csFilter);
-    if (This->input->pin.pConnectedTo) {
+    if (This->sink.pin.pConnectedTo)
         hr = BasePinImpl_EnumMediaTypes(iface, ppEnum);
-    } else
+    else
         hr = VFW_E_NOT_CONNECTED;
     LeaveCriticalSection(&This->filter.csFilter);
     return hr;
@@ -483,7 +484,7 @@ static HRESULT WINAPI SmartTeeFilterPreview_GetMediaType(BasePin *base, int iPos
     SmartTeeFilter *This = impl_from_BasePin(base);
     TRACE("(%p, %d, %p)\n", This, iPosition, amt);
     if (iPosition == 0) {
-        CopyMediaType(amt, &This->input->pin.mtCurrent);
+        CopyMediaType(amt, &This->sink.pin.mtCurrent);
         return S_OK;
     } else
         return S_FALSE;
@@ -493,9 +494,9 @@ static HRESULT WINAPI SmartTeeFilterPreview_DecideAllocator(BaseOutputPin *base,
 {
     SmartTeeFilter *This = impl_from_BasePin(&base->pin);
     TRACE("(%p, %p, %p)\n", This, pPin, pAlloc);
-    *pAlloc = This->input->pAllocator;
-    IMemAllocator_AddRef(This->input->pAllocator);
-    return IMemInputPin_NotifyAllocator(pPin, This->input->pAllocator, TRUE);
+    *pAlloc = This->sink.pAllocator;
+    IMemAllocator_AddRef(This->sink.pAllocator);
+    return IMemInputPin_NotifyAllocator(pPin, This->sink.pAllocator, TRUE);
 }
 
 static const BaseOutputPinFuncTable SmartTeeFilterPreviewFuncs = {
@@ -526,12 +527,10 @@ IUnknown* WINAPI QCAP_createSmartTeeFilter(IUnknown *outer, HRESULT *phr)
             (DWORD_PTR)(__FILE__ ": SmartTeeFilter.csFilter"), &SmartTeeFilterFuncs);
 
     inputPinInfo.pFilter = &This->filter.IBaseFilter_iface;
-    hr = BaseInputPin_Construct(&SmartTeeFilterInputVtbl, sizeof(BaseInputPin), &inputPinInfo,
-            &SmartTeeFilterInputFuncs, &This->filter.csFilter, NULL, (IPin**)&This->input);
-    if (FAILED(hr))
-        goto end;
+    strmbase_sink_init(&This->sink, &SmartTeeFilterInputVtbl, &inputPinInfo,
+            &SmartTeeFilterInputFuncs, &This->filter.csFilter, NULL);
     hr = CoCreateInstance(&CLSID_MemoryAllocator, NULL, CLSCTX_INPROC_SERVER,
-            &IID_IMemAllocator, (void**)&This->input->pAllocator);
+            &IID_IMemAllocator, (void**)&This->sink.pAllocator);
     if (FAILED(hr))
         goto end;
 
-- 
2.20.1




More information about the wine-devel mailing list