[PATCH 4/5] qcap/avimux: Use BaseFilterImpl_Release().
Zebediah Figura
z.figura12 at gmail.com
Tue May 28 23:10:19 CDT 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/qcap/avimux.c | 51 +++++++++++++++++++++-------------------------
1 file changed, 23 insertions(+), 28 deletions(-)
diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c
index 77e5898aeee..3ca55ca99bb 100644
--- a/dlls/qcap/avimux.c
+++ b/dlls/qcap/avimux.c
@@ -134,8 +134,30 @@ static IPin *avi_mux_get_pin(BaseFilter *iface, unsigned int index)
return NULL;
}
+static void avi_mux_destroy(BaseFilter *iface)
+{
+ AviMux *filter = impl_from_BaseFilter(iface);
+ int i;
+
+ BaseOutputPinImpl_Release(&filter->out->pin.pin.IPin_iface);
+
+ for (i = 0; i < filter->input_pin_no; ++i)
+ {
+ IPin_Disconnect(&filter->in[i]->pin.pin.IPin_iface);
+ IMemAllocator_Release(filter->in[i]->samples_allocator);
+ filter->in[i]->samples_allocator = NULL;
+ BaseInputPinImpl_Release(&filter->in[i]->pin.pin.IPin_iface);
+ }
+
+ heap_free(filter->idx1);
+ strmbase_filter_cleanup(&filter->filter);
+ heap_free(filter);
+ ObjectRefCount(FALSE);
+}
+
static const BaseFilterFuncTable filter_func_table = {
.filter_get_pin = avi_mux_get_pin,
+ .filter_destroy = avi_mux_destroy,
};
static inline AviMux* impl_from_IBaseFilter(IBaseFilter *iface)
@@ -173,33 +195,6 @@ static HRESULT WINAPI AviMux_QueryInterface(IBaseFilter *iface, REFIID riid, voi
return S_OK;
}
-static ULONG WINAPI AviMux_Release(IBaseFilter *iface)
-{
- AviMux *This = impl_from_IBaseFilter(iface);
- ULONG ref = InterlockedDecrement(&This->filter.refCount);
-
- TRACE("(%p) new refcount: %u\n", This, ref);
-
- if(!ref) {
- int i;
-
- BaseOutputPinImpl_Release(&This->out->pin.pin.IPin_iface);
-
- for(i=0; i<This->input_pin_no; i++) {
- IPin_Disconnect(&This->in[i]->pin.pin.IPin_iface);
- IMemAllocator_Release(This->in[i]->samples_allocator);
- This->in[i]->samples_allocator = NULL;
- BaseInputPinImpl_Release(&This->in[i]->pin.pin.IPin_iface);
- }
-
- HeapFree(GetProcessHeap(), 0, This->idx1);
- strmbase_filter_cleanup(&This->filter);
- HeapFree(GetProcessHeap(), 0, This);
- ObjectRefCount(FALSE);
- }
- return ref;
-}
-
static HRESULT out_flush(AviMux *This)
{
ULONG written;
@@ -766,7 +761,7 @@ static HRESULT WINAPI AviMux_QueryVendorInfo(IBaseFilter *iface, LPWSTR *pVendor
static const IBaseFilterVtbl AviMuxVtbl = {
AviMux_QueryInterface,
BaseFilterImpl_AddRef,
- AviMux_Release,
+ BaseFilterImpl_Release,
BaseFilterImpl_GetClassID,
AviMux_Stop,
AviMux_Pause,
--
2.21.0
More information about the wine-devel
mailing list