[PATCH 5/5] strmbase: Don't increment the pin reference count in filter_get_pin().
Zebediah Figura
zfigura at codeweavers.com
Tue Jun 11 09:42:16 CDT 2019
From: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/qcap/avico.c | 13 ++++---------
dlls/qcap/avimux.c | 15 ++++-----------
dlls/qcap/smartteefilter.c | 15 +++++----------
dlls/qcap/vfwcapture.c | 1 -
dlls/qedit/samplegrabber.c | 13 ++++---------
dlls/quartz/filesource.c | 10 ++++------
dlls/quartz/parser.c | 8 +++-----
dlls/strmbase/enumpins.c | 22 +++++++---------------
dlls/strmbase/filter.c | 8 ++------
dlls/strmbase/renderer.c | 1 -
dlls/strmbase/transform.c | 1 -
dlls/winegstreamer/gstdemux.c | 16 +++++-----------
dlls/wineqtdecoder/qtsplitter.c | 12 ------------
13 files changed, 38 insertions(+), 97 deletions(-)
diff --git a/dlls/qcap/avico.c b/dlls/qcap/avico.c
index 684a3324920..d257051b1ca 100644
--- a/dlls/qcap/avico.c
+++ b/dlls/qcap/avico.c
@@ -180,18 +180,13 @@ static const IBaseFilterVtbl AVICompressorVtbl = {
static IPin *avi_compressor_get_pin(BaseFilter *iface, unsigned int index)
{
- AVICompressor *This = impl_from_BaseFilter(iface);
- IPin *ret;
+ AVICompressor *filter = impl_from_BaseFilter(iface);
if (index == 0)
- ret = &This->in->pin.IPin_iface;
+ return &filter->in->pin.IPin_iface;
else if (index == 1)
- ret = &This->out->pin.IPin_iface;
- else
- return NULL;
-
- IPin_AddRef(ret);
- return ret;
+ return &filter->out->pin.IPin_iface;
+ return NULL;
}
static void avi_compressor_destroy(BaseFilter *iface)
diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c
index de56a20b6f3..d289d2b9fed 100644
--- a/dlls/qcap/avimux.c
+++ b/dlls/qcap/avimux.c
@@ -118,19 +118,12 @@ static inline AviMux* impl_from_BaseFilter(BaseFilter *filter)
static IPin *avi_mux_get_pin(BaseFilter *iface, unsigned int index)
{
- AviMux *This = impl_from_BaseFilter(iface);
+ AviMux *filter = impl_from_BaseFilter(iface);
if (!index)
- {
- IPin_AddRef(&This->out->pin.pin.IPin_iface);
- return &This->out->pin.pin.IPin_iface;
- }
- else if (index <= This->input_pin_no)
- {
- IPin_AddRef(&This->in[index - 1]->pin.pin.IPin_iface);
- return &This->in[index - 1]->pin.pin.IPin_iface;
- }
-
+ return &filter->out->pin.pin.IPin_iface;
+ else if (index <= filter->input_pin_no)
+ return &filter->in[index - 1]->pin.pin.IPin_iface;
return NULL;
}
diff --git a/dlls/qcap/smartteefilter.c b/dlls/qcap/smartteefilter.c
index 4095d95f947..02503ecb789 100644
--- a/dlls/qcap/smartteefilter.c
+++ b/dlls/qcap/smartteefilter.c
@@ -120,20 +120,15 @@ static const IBaseFilterVtbl SmartTeeFilterVtbl = {
static IPin *smart_tee_get_pin(BaseFilter *iface, unsigned int index)
{
- SmartTeeFilter *This = impl_from_BaseFilter(iface);
- IPin *ret;
+ SmartTeeFilter *filter = impl_from_BaseFilter(iface);
if (index == 0)
- ret = &This->input->pin.IPin_iface;
+ return &filter->input->pin.IPin_iface;
else if (index == 1)
- ret = &This->capture->pin.IPin_iface;
+ return &filter->capture->pin.IPin_iface;
else if (index == 2)
- ret = &This->preview->pin.IPin_iface;
- else
- return NULL;
-
- IPin_AddRef(ret);
- return ret;
+ return &filter->preview->pin.IPin_iface;
+ return NULL;
}
static void smart_tee_destroy(BaseFilter *iface)
diff --git a/dlls/qcap/vfwcapture.c b/dlls/qcap/vfwcapture.c
index d9d937a4a50..0bf8c45d9c0 100644
--- a/dlls/qcap/vfwcapture.c
+++ b/dlls/qcap/vfwcapture.c
@@ -104,7 +104,6 @@ static IPin *vfw_capture_get_pin(BaseFilter *iface, unsigned int index)
if (index >= 1)
return NULL;
- IPin_AddRef(This->pOutputPin);
return This->pOutputPin;
}
diff --git a/dlls/qedit/samplegrabber.c b/dlls/qedit/samplegrabber.c
index b53d4d8c7e9..9836d9e3740 100644
--- a/dlls/qedit/samplegrabber.c
+++ b/dlls/qedit/samplegrabber.c
@@ -275,18 +275,13 @@ static void SampleGrabber_cleanup(SG_Impl *This)
static IPin *sample_grabber_get_pin(BaseFilter *iface, unsigned int index)
{
- SG_Impl *This = impl_from_BaseFilter(iface);
- IPin *pin;
+ SG_Impl *filter = impl_from_BaseFilter(iface);
if (index == 0)
- pin = &This->pin_in.IPin_iface;
+ return &filter->pin_in.IPin_iface;
else if (index == 1)
- pin = &This->pin_out.IPin_iface;
- else
- return NULL;
-
- IPin_AddRef(pin);
- return pin;
+ return &filter->pin_out.IPin_iface;
+ return NULL;
}
static void sample_grabber_destroy(BaseFilter *iface)
diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c
index b2fc4015816..34601da6b47 100644
--- a/dlls/quartz/filesource.c
+++ b/dlls/quartz/filesource.c
@@ -394,13 +394,11 @@ HRESULT GetClassMediaFile(IAsyncReader * pReader, LPCOLESTR pszFileName, GUID *
static IPin *async_reader_get_pin(BaseFilter *iface, unsigned int index)
{
- AsyncReader *This = impl_from_BaseFilter(iface);
+ AsyncReader *filter = impl_from_BaseFilter(iface);
- if (index >= 1 || !This->pOutputPin)
- return NULL;
-
- IPin_AddRef(This->pOutputPin);
- return This->pOutputPin;
+ if (!index && filter->pOutputPin)
+ return filter->pOutputPin;
+ return NULL;
}
static void async_reader_destroy(BaseFilter *iface)
diff --git a/dlls/quartz/parser.c b/dlls/quartz/parser.c
index 3320dece4b5..2666eb75aad 100644
--- a/dlls/quartz/parser.c
+++ b/dlls/quartz/parser.c
@@ -66,11 +66,9 @@ IPin *parser_get_pin(BaseFilter *iface, unsigned int index)
{
ParserImpl *filter = impl_from_BaseFilter(iface);
- if (index > filter->cStreams)
- return NULL;
-
- IPin_AddRef(filter->ppPins[index]);
- return filter->ppPins[index];
+ if (index <= filter->cStreams)
+ return filter->ppPins[index];
+ return NULL;
}
HRESULT Parser_Create(ParserImpl *pParser, const IBaseFilterVtbl *vtbl, IUnknown *outer,
diff --git a/dlls/strmbase/enumpins.c b/dlls/strmbase/enumpins.c
index 198c8397a31..6e3357f5605 100644
--- a/dlls/strmbase/enumpins.c
+++ b/dlls/strmbase/enumpins.c
@@ -60,10 +60,7 @@ HRESULT enum_pins_create(BaseFilter *base, IEnumPins **out)
object->Version = base->pin_version;
while ((pin = base->pFuncsTable->filter_get_pin(base, object->count)))
- {
- IPin_Release(pin);
++object->count;
- }
TRACE("Created enumerator %p.\n", object);
*out = &object->IEnumPins_iface;
@@ -122,7 +119,7 @@ static ULONG WINAPI IEnumPinsImpl_Release(IEnumPins * iface)
static HRESULT WINAPI IEnumPinsImpl_Next(IEnumPins * iface, ULONG cPins, IPin ** ppPins, ULONG * pcFetched)
{
IEnumPinsImpl *This = impl_from_IEnumPins(iface);
- ULONG i = 0;
+ ULONG i;
TRACE("(%p)->(%u, %p, %p)\n", iface, cPins, ppPins, pcFetched);
@@ -138,16 +135,14 @@ static HRESULT WINAPI IEnumPinsImpl_Next(IEnumPins * iface, ULONG cPins, IPin **
if (This->Version != This->base->pin_version)
return VFW_E_ENUM_OUT_OF_SYNC;
- while (i < cPins)
+ for (i = 0; i < cPins; ++i)
{
- IPin *pin;
- pin = This->base->pFuncsTable->filter_get_pin(This->base, This->uIndex + i);
+ IPin *pin = This->base->pFuncsTable->filter_get_pin(This->base, This->uIndex + i);
- if (!pin)
- break;
- else
- ppPins[i] = pin;
- ++i;
+ if (!pin)
+ break;
+
+ IPin_AddRef(ppPins[i] = pin);
}
if (pcFetched)
@@ -186,10 +181,7 @@ static HRESULT WINAPI IEnumPinsImpl_Reset(IEnumPins *iface)
{
enum_pins->count = 0;
while ((pin = enum_pins->base->pFuncsTable->filter_get_pin(enum_pins->base, enum_pins->count)))
- {
- IPin_Release(pin);
++enum_pins->count;
- }
}
enum_pins->Version = enum_pins->base->pin_version;
diff --git a/dlls/strmbase/filter.c b/dlls/strmbase/filter.c
index b61d3ffa99f..5f57731b7a1 100644
--- a/dlls/strmbase/filter.c
+++ b/dlls/strmbase/filter.c
@@ -194,19 +194,15 @@ HRESULT WINAPI BaseFilterImpl_FindPin(IBaseFilter *iface, const WCHAR *id, IPin
{
hr = IPin_QueryPinInfo(pin, &info);
if (FAILED(hr))
- {
- IPin_Release(pin);
return hr;
- }
+
if (info.pFilter) IBaseFilter_Release(info.pFilter);
if (!lstrcmpW(id, info.achName))
{
- *ret = pin;
+ IPin_AddRef(*ret = pin);
return S_OK;
}
-
- IPin_Release(pin);
}
return VFW_E_NOT_FOUND;
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index 1017c8c5747..b1b318f54f2 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -190,7 +190,6 @@ static IPin *renderer_get_pin(BaseFilter *iface, unsigned int index)
if (index >= 1)
return NULL;
- IPin_AddRef(&This->pInputPin->pin.IPin_iface);
return &This->pInputPin->pin.IPin_iface;
}
diff --git a/dlls/strmbase/transform.c b/dlls/strmbase/transform.c
index a7c47b509f8..fe54ebe861f 100644
--- a/dlls/strmbase/transform.c
+++ b/dlls/strmbase/transform.c
@@ -135,7 +135,6 @@ static IPin *transform_get_pin(BaseFilter *iface, unsigned int index)
if (index >= 2)
return NULL;
- IPin_AddRef(filter->ppPins[index]);
return filter->ppPins[index];
}
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
index 8649c8af736..2ec540a3e42 100644
--- a/dlls/winegstreamer/gstdemux.c
+++ b/dlls/winegstreamer/gstdemux.c
@@ -1198,19 +1198,13 @@ static inline GSTOutPin *impl_from_IMediaSeeking( IMediaSeeking *iface )
static IPin *gstdemux_get_pin(BaseFilter *base, unsigned int index)
{
- GSTImpl *This = impl_from_IBaseFilter(&base->IBaseFilter_iface);
- IPin *pin;
-
- if (index > This->cStreams)
- return NULL;
+ GSTImpl *filter = impl_from_IBaseFilter(&base->IBaseFilter_iface);
if (!index)
- pin = &This->pInputPin.pin.IPin_iface;
- else
- pin = &This->ppPins[index - 1]->pin.pin.IPin_iface;
-
- IPin_AddRef(pin);
- return pin;
+ return &filter->pInputPin.pin.IPin_iface;
+ else if (index <= filter->cStreams)
+ return &filter->ppPins[index - 1]->pin.pin.IPin_iface;
+ return NULL;
}
static void gstdemux_destroy(BaseFilter *iface)
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c
index 6c1105ce4b5..3dd530fac3e 100644
--- a/dlls/wineqtdecoder/qtsplitter.c
+++ b/dlls/wineqtdecoder/qtsplitter.c
@@ -207,28 +207,16 @@ static IPin *qt_splitter_get_pin(BaseFilter *base, unsigned int index)
QTSplitter *filter = impl_from_BaseFilter(base);
if (index == 0)
- {
- IPin_AddRef(&filter->pInputPin.pin.IPin_iface);
return &filter->pInputPin.pin.IPin_iface;
- }
else if (index == 1)
{
if (filter->pVideo_Pin)
- {
- IPin_AddRef(&filter->pVideo_Pin->pin.pin.IPin_iface);
return &filter->pVideo_Pin->pin.pin.IPin_iface;
- }
else if (filter->pAudio_Pin)
- {
- IPin_AddRef(&filter->pAudio_Pin->pin.pin.IPin_iface);
return &filter->pAudio_Pin->pin.pin.IPin_iface;
- }
}
else if (index == 2 && filter->pVideo_Pin && filter->pAudio_Pin)
- {
- IPin_AddRef(&filter->pAudio_Pin->pin.pin.IPin_iface);
return &filter->pAudio_Pin->pin.pin.IPin_iface;
- }
return NULL;
}
--
2.20.1
More information about the wine-devel
mailing list