[PATCH 5/5] qedit/samplegrabber: Use strmbase sink connection methods.

Zebediah Figura z.figura12 at gmail.com
Tue Dec 10 21:33:33 CST 2019


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/qedit/samplegrabber.c | 74 ++++++++++++++++----------------------
 1 file changed, 30 insertions(+), 44 deletions(-)

diff --git a/dlls/qedit/samplegrabber.c b/dlls/qedit/samplegrabber.c
index c65ab9caa70..91b8d9dce64 100644
--- a/dlls/qedit/samplegrabber.c
+++ b/dlls/qedit/samplegrabber.c
@@ -446,49 +446,6 @@ SampleGrabber_IMemInputPin_ReceiveCanBlock(IMemInputPin *iface)
     return This->memOutput ? IMemInputPin_ReceiveCanBlock(This->memOutput) : S_OK;
 }
 
-/* IPin - input pin */
-static HRESULT WINAPI
-SampleGrabber_In_IPin_ReceiveConnection(IPin *iface, IPin *connector, const AM_MEDIA_TYPE *type)
-{
-    SG_Impl *filter = CONTAINING_RECORD(iface, SG_Impl, sink.pin.IPin_iface);
-
-    TRACE("filter %p, connector %p, type %p.\n", filter, connector, type);
-
-    if (!connector)
-        return E_POINTER;
-    if (filter->sink.pin.peer)
-        return VFW_E_ALREADY_CONNECTED;
-    if (filter->filter.state != State_Stopped)
-        return VFW_E_NOT_STOPPED;
-    if (type) {
-	TRACE("Media type: %s/%s ssize: %u format: %s (%u bytes)\n",
-	    debugstr_guid(&type->majortype), debugstr_guid(&type->subtype),
-	    type->lSampleSize,
-	    debugstr_guid(&type->formattype), type->cbFormat);
-	if (!IsEqualGUID(&type->formattype, &FORMAT_None) &&
-	    !IsEqualGUID(&type->formattype, &GUID_NULL) &&
-	    !type->pbFormat)
-	    return VFW_E_INVALIDMEDIATYPE;
-	if (!IsEqualGUID(&filter->mtype.majortype,&GUID_NULL) &&
-	    !IsEqualGUID(&filter->mtype.majortype,&type->majortype))
-	    return VFW_E_TYPE_NOT_ACCEPTED;
-	if (!IsEqualGUID(&filter->mtype.subtype,&MEDIASUBTYPE_None) &&
-	    !IsEqualGUID(&filter->mtype.subtype,&type->subtype))
-	    return VFW_E_TYPE_NOT_ACCEPTED;
-	if (!IsEqualGUID(&filter->mtype.formattype,&GUID_NULL) &&
-	    !IsEqualGUID(&filter->mtype.formattype,&FORMAT_None) &&
-	    !IsEqualGUID(&filter->mtype.formattype,&type->formattype))
-	    return VFW_E_TYPE_NOT_ACCEPTED;
-
-        FreeMediaType(&filter->mtype);
-        CopyMediaType(&filter->mtype, type);
-        CopyMediaType(&filter->sink.pin.mt, type);
-    }
-    IPin_AddRef(filter->sink.pin.peer = connector);
-
-    return S_OK;
-}
-
 static const ISampleGrabberVtbl ISampleGrabber_VTable =
 {
     SampleGrabber_ISampleGrabber_QueryInterface,
@@ -522,7 +479,7 @@ static const IPinVtbl sink_vtbl =
     BasePinImpl_AddRef,
     BasePinImpl_Release,
     BaseInputPinImpl_Connect,
-    SampleGrabber_In_IPin_ReceiveConnection,
+    BaseInputPinImpl_ReceiveConnection,
     BaseInputPinImpl_Disconnect,
     BasePinImpl_ConnectedTo,
     BasePinImpl_ConnectionMediaType,
@@ -574,11 +531,40 @@ static HRESULT sample_grabber_sink_get_media_type(struct strmbase_pin *iface,
     return VFW_S_NO_MORE_ITEMS;
 }
 
+static HRESULT sample_grabber_sink_connect(struct strmbase_sink *iface,
+        IPin *peer, const AM_MEDIA_TYPE *mt)
+{
+    SG_Impl *filter = impl_from_sink_pin(&iface->pin);
+
+    if (!IsEqualGUID(&mt->formattype, &FORMAT_None)
+            && !IsEqualGUID(&mt->formattype, &GUID_NULL) && !mt->pbFormat)
+        return VFW_E_INVALIDMEDIATYPE;
+
+    if (!IsEqualGUID(&filter->mtype.majortype, &GUID_NULL)
+            && !IsEqualGUID(&filter->mtype.majortype, &mt->majortype))
+        return VFW_E_TYPE_NOT_ACCEPTED;
+
+    if (!IsEqualGUID(&filter->mtype.subtype,&MEDIASUBTYPE_None)
+            && !IsEqualGUID(&filter->mtype.subtype, &mt->subtype))
+        return VFW_E_TYPE_NOT_ACCEPTED;
+
+    if (!IsEqualGUID(&filter->mtype.formattype, &GUID_NULL)
+            && !IsEqualGUID(&filter->mtype.formattype, &FORMAT_None)
+            && !IsEqualGUID(&filter->mtype.formattype, &mt->formattype))
+        return VFW_E_TYPE_NOT_ACCEPTED;
+
+    FreeMediaType(&filter->mtype);
+    CopyMediaType(&filter->mtype, mt);
+
+    return S_OK;
+}
+
 static const struct strmbase_sink_ops sink_ops =
 {
     .base.pin_query_interface = sample_grabber_sink_query_interface,
     .base.pin_query_accept = sample_grabber_sink_query_accept,
     .base.pin_get_media_type = sample_grabber_sink_get_media_type,
+    .sink_connect = sample_grabber_sink_connect,
 };
 
 static inline SG_Impl *impl_from_source_pin(struct strmbase_pin *iface)
-- 
2.24.0




More information about the wine-devel mailing list