[PATCH 4/5] qcap: Use BasePinImpl_QueryInterface().
Zebediah Figura
z.figura12 at gmail.com
Wed Sep 25 22:36:25 CDT 2019
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/qcap/avico.c | 28 ++++++++++--------
dlls/qcap/smartteefilter.c | 20 +++++++++++--
dlls/qcap/vfwcapture.c | 47 +++++++++++-------------------
dlls/strmbase/pin.c | 59 --------------------------------------
include/wine/strmbase.h | 2 --
5 files changed, 50 insertions(+), 106 deletions(-)
diff --git a/dlls/qcap/avico.c b/dlls/qcap/avico.c
index 33d1c7fab2e..89e8dda08f8 100644
--- a/dlls/qcap/avico.c
+++ b/dlls/qcap/avico.c
@@ -318,11 +318,6 @@ static inline AVICompressor *impl_from_IPin(IPin *iface)
return impl_from_strmbase_filter(CONTAINING_RECORD(iface, struct strmbase_pin, IPin_iface)->filter);
}
-static HRESULT WINAPI AVICompressorIn_QueryInterface(IPin *iface, REFIID riid, void **ppv)
-{
- return BaseInputPinImpl_QueryInterface(iface, riid, ppv);
-}
-
static HRESULT WINAPI AVICompressorIn_ReceiveConnection(IPin *iface,
IPin *pConnector, const AM_MEDIA_TYPE *pmt)
{
@@ -359,7 +354,7 @@ static HRESULT WINAPI AVICompressorIn_Disconnect(IPin *iface)
}
static const IPinVtbl AVICompressorInputPinVtbl = {
- AVICompressorIn_QueryInterface,
+ BasePinImpl_QueryInterface,
BasePinImpl_AddRef,
BasePinImpl_Release,
BaseInputPinImpl_Connect,
@@ -406,6 +401,19 @@ static HRESULT sink_query_accept(struct strmbase_pin *base, const AM_MEDIA_TYPE
return res == ICERR_OK ? S_OK : S_FALSE;
}
+static HRESULT sink_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
+{
+ AVICompressor *filter = impl_from_strmbase_pin(iface);
+
+ if (IsEqualGUID(iid, &IID_IMemInputPin))
+ *out = &filter->sink.IMemInputPin_iface;
+ else
+ return E_NOINTERFACE;
+
+ IUnknown_AddRef((IUnknown *)*out);
+ return S_OK;
+}
+
static HRESULT WINAPI AVICompressorIn_Receive(BaseInputPin *base, IMediaSample *pSample)
{
AVICompressor *This = impl_from_strmbase_pin(&base->pin);
@@ -497,16 +505,12 @@ static const BaseInputPinFuncTable AVICompressorBaseInputPinVtbl =
{
.base.pin_query_accept = sink_query_accept,
.base.pin_get_media_type = strmbase_pin_get_media_type,
+ .base.pin_query_interface = sink_query_interface,
.pfnReceive = AVICompressorIn_Receive,
};
-static HRESULT WINAPI AVICompressorOut_QueryInterface(IPin *iface, REFIID riid, void **ppv)
-{
- return BaseInputPinImpl_QueryInterface(iface, riid, ppv);
-}
-
static const IPinVtbl AVICompressorOutputPinVtbl = {
- AVICompressorOut_QueryInterface,
+ BasePinImpl_QueryInterface,
BasePinImpl_AddRef,
BasePinImpl_Release,
BaseOutputPinImpl_Connect,
diff --git a/dlls/qcap/smartteefilter.c b/dlls/qcap/smartteefilter.c
index e7ff5f9b345..b2e5496b7dd 100644
--- a/dlls/qcap/smartteefilter.c
+++ b/dlls/qcap/smartteefilter.c
@@ -142,7 +142,7 @@ static const struct strmbase_filter_ops filter_ops =
};
static const IPinVtbl SmartTeeFilterInputVtbl = {
- BaseInputPinImpl_QueryInterface,
+ BasePinImpl_QueryInterface,
BasePinImpl_AddRef,
BasePinImpl_Release,
BaseInputPinImpl_Connect,
@@ -194,6 +194,19 @@ static HRESULT sink_get_media_type(struct strmbase_pin *base,
return hr;
}
+static HRESULT sink_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
+{
+ SmartTeeFilter *filter = impl_from_strmbase_pin(iface);
+
+ if (IsEqualGUID(iid, &IID_IMemInputPin))
+ *out = &filter->sink.IMemInputPin_iface;
+ else
+ return E_NOINTERFACE;
+
+ IUnknown_AddRef((IUnknown *)*out);
+ return S_OK;
+}
+
static HRESULT copy_sample(IMediaSample *inputSample, IMemAllocator *allocator, IMediaSample **pOutputSample)
{
REFERENCE_TIME startTime, endTime;
@@ -319,11 +332,12 @@ static const BaseInputPinFuncTable SmartTeeFilterInputFuncs =
{
.base.pin_query_accept = sink_query_accept,
.base.pin_get_media_type = sink_get_media_type,
+ .base.pin_query_interface = sink_query_interface,
.pfnReceive = SmartTeeFilterInput_Receive,
};
static const IPinVtbl SmartTeeFilterCaptureVtbl = {
- BaseOutputPinImpl_QueryInterface,
+ BasePinImpl_QueryInterface,
BasePinImpl_AddRef,
BasePinImpl_Release,
BaseOutputPinImpl_Connect,
@@ -387,7 +401,7 @@ static const struct strmbase_source_ops capture_ops =
};
static const IPinVtbl SmartTeeFilterPreviewVtbl = {
- BaseOutputPinImpl_QueryInterface,
+ BasePinImpl_QueryInterface,
BasePinImpl_AddRef,
BasePinImpl_Release,
BaseOutputPinImpl_Connect,
diff --git a/dlls/qcap/vfwcapture.c b/dlls/qcap/vfwcapture.c
index e5278152edd..e2608f43581 100644
--- a/dlls/qcap/vfwcapture.c
+++ b/dlls/qcap/vfwcapture.c
@@ -82,11 +82,6 @@ static inline VfwCapture *impl_from_IPersistPropertyBag(IPersistPropertyBag *ifa
return CONTAINING_RECORD(iface, VfwCapture, IPersistPropertyBag_iface);
}
-static inline VfwCapture *impl_from_IPin(IPin *iface)
-{
- return CONTAINING_RECORD(iface, VfwCapture, source.pin.IPin_iface);
-}
-
static IPin *vfw_capture_get_pin(struct strmbase_filter *iface, unsigned int index)
{
VfwCapture *This = impl_from_strmbase_filter(iface);
@@ -536,6 +531,21 @@ static HRESULT source_get_media_type(struct strmbase_pin *pin,
return hr;
}
+static HRESULT source_query_interface(struct strmbase_pin *iface, REFIID iid, void **out)
+{
+ VfwCapture *filter = impl_from_strmbase_pin(iface);
+
+ if (IsEqualGUID(iid, &IID_IKsPropertySet))
+ *out = &filter->IKsPropertySet_iface;
+ else if (IsEqualGUID(iid, &IID_IAMStreamConfig))
+ *out = &filter->IAMStreamConfig_iface;
+ else
+ return E_NOINTERFACE;
+
+ IUnknown_AddRef((IUnknown *)*out);
+ return S_OK;
+}
+
static HRESULT WINAPI VfwPin_DecideBufferSize(struct strmbase_source *iface,
IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest)
{
@@ -557,38 +567,15 @@ static const struct strmbase_source_ops source_ops =
{
.base.pin_query_accept = source_query_accept,
.base.pin_get_media_type = source_get_media_type,
+ .base.pin_query_interface = source_query_interface,
.pfnAttemptConnection = BaseOutputPinImpl_AttemptConnection,
.pfnDecideBufferSize = VfwPin_DecideBufferSize,
.pfnDecideAllocator = BaseOutputPinImpl_DecideAllocator,
};
-static HRESULT WINAPI VfwPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
-{
- VfwCapture *filter = impl_from_IPin(iface);
-
- TRACE("%s %p\n", debugstr_guid(riid), ppv);
-
- *ppv = NULL;
- if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IPin))
- *ppv = &filter->source.pin.IPin_iface;
- else if (IsEqualIID(riid, &IID_IKsPropertySet))
- *ppv = &filter->IKsPropertySet_iface;
- else if (IsEqualIID(riid, &IID_IAMStreamConfig))
- *ppv = &filter->IAMStreamConfig_iface;
-
- if (*ppv)
- {
- IUnknown_AddRef((IUnknown *)(*ppv));
- return S_OK;
- }
-
- FIXME("No interface for %s!\n", debugstr_guid(riid));
- return E_NOINTERFACE;
-}
-
static const IPinVtbl VfwPin_Vtbl =
{
- VfwPin_QueryInterface,
+ BasePinImpl_QueryInterface,
BasePinImpl_AddRef,
BasePinImpl_Release,
BaseOutputPinImpl_Connect,
diff --git a/dlls/strmbase/pin.c b/dlls/strmbase/pin.c
index 1dbfee07a6c..190c9078fab 100644
--- a/dlls/strmbase/pin.c
+++ b/dlls/strmbase/pin.c
@@ -362,35 +362,6 @@ static inline struct strmbase_source *impl_source_from_IPin( IPin *iface )
return CONTAINING_RECORD(iface, struct strmbase_source, pin.IPin_iface);
}
-HRESULT WINAPI BaseOutputPinImpl_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
-{
- struct strmbase_source *This = impl_source_from_IPin(iface);
-
- TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppv);
-
- *ppv = NULL;
-
- if (IsEqualIID(riid, &IID_IUnknown))
- *ppv = iface;
- else if (IsEqualIID(riid, &IID_IPin))
- *ppv = iface;
- else if (IsEqualIID(riid, &IID_IMediaSeeking) ||
- IsEqualIID(riid, &IID_IQualityControl))
- {
- return IBaseFilter_QueryInterface(&This->pin.filter->IBaseFilter_iface, riid, ppv);
- }
-
- if (*ppv)
- {
- IUnknown_AddRef((IUnknown *)(*ppv));
- return S_OK;
- }
-
- FIXME("No interface for %s!\n", debugstr_guid(riid));
-
- return E_NOINTERFACE;
-}
-
HRESULT WINAPI BaseOutputPinImpl_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt)
{
HRESULT hr;
@@ -758,36 +729,6 @@ static inline BaseInputPin *impl_BaseInputPin_from_IPin( IPin *iface )
return CONTAINING_RECORD(iface, BaseInputPin, pin.IPin_iface);
}
-HRESULT WINAPI BaseInputPinImpl_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
-{
- BaseInputPin *This = impl_BaseInputPin_from_IPin(iface);
-
- TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), ppv);
-
- *ppv = NULL;
-
- if (IsEqualIID(riid, &IID_IUnknown))
- *ppv = iface;
- else if (IsEqualIID(riid, &IID_IPin))
- *ppv = iface;
- else if (IsEqualIID(riid, &IID_IMemInputPin))
- *ppv = &This->IMemInputPin_iface;
- else if (IsEqualIID(riid, &IID_IMediaSeeking))
- {
- return IBaseFilter_QueryInterface(&This->pin.filter->IBaseFilter_iface, &IID_IMediaSeeking, ppv);
- }
-
- if (*ppv)
- {
- IUnknown_AddRef((IUnknown *)(*ppv));
- return S_OK;
- }
-
- FIXME("No interface for %s!\n", debugstr_guid(riid));
-
- return E_NOINTERFACE;
-}
-
HRESULT WINAPI BaseInputPinImpl_Connect(IPin *iface, IPin *pin, const AM_MEDIA_TYPE *pmt)
{
ERR("(%p)->(%p, %p) outgoing connection on an input pin!\n", iface, pin, pmt);
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index 5ee13c8892e..85c5486f6b4 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -113,7 +113,6 @@ HRESULT WINAPI BasePinImpl_QueryInternalConnections(IPin * iface, IPin ** apPin,
HRESULT WINAPI BasePinImpl_NewSegment(IPin * iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
/* Base Output Pin */
-HRESULT WINAPI BaseOutputPinImpl_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv);
HRESULT WINAPI BaseOutputPinImpl_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
HRESULT WINAPI BaseOutputPinImpl_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin * iface);
@@ -135,7 +134,6 @@ void strmbase_source_init(struct strmbase_source *pin, const IPinVtbl *vtbl, str
const WCHAR *name, const struct strmbase_source_ops *func_table);
/* Base Input Pin */
-HRESULT WINAPI BaseInputPinImpl_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv);
HRESULT WINAPI BaseInputPinImpl_Connect(IPin * iface, IPin * pConnector, const AM_MEDIA_TYPE * pmt);
HRESULT WINAPI BaseInputPinImpl_ReceiveConnection(IPin * iface, IPin * pReceivePin, const AM_MEDIA_TYPE * pmt);
HRESULT WINAPI BaseInputPinImpl_QueryAccept(IPin * iface, const AM_MEDIA_TYPE * pmt);
--
2.23.0
More information about the wine-devel
mailing list