[PATCH 4/5] strmbase: Simplify CompareMediaTypes().

Zebediah Figura z.figura12 at gmail.com
Wed Feb 5 19:50:06 CST 2020


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/strmbase/pin.c | 28 ++++++++++++++++++++--------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/dlls/strmbase/pin.c b/dlls/strmbase/pin.c
index 58778e57897..90064c25d4d 100644
--- a/dlls/strmbase/pin.c
+++ b/dlls/strmbase/pin.c
@@ -247,12 +247,6 @@ static HRESULT SendFurther(struct strmbase_sink *sink, SendPinFunc func, void *a
     return hr;
 }
 
-static BOOL CompareMediaTypes(const AM_MEDIA_TYPE * pmt1, const AM_MEDIA_TYPE * pmt2, BOOL bWildcards)
-{
-    return (((bWildcards && (IsEqualGUID(&pmt1->majortype, &GUID_NULL) || IsEqualGUID(&pmt2->majortype, &GUID_NULL))) || IsEqualGUID(&pmt1->majortype, &pmt2->majortype)) &&
-            ((bWildcards && (IsEqualGUID(&pmt1->subtype, &GUID_NULL)   || IsEqualGUID(&pmt2->subtype, &GUID_NULL)))   || IsEqualGUID(&pmt1->subtype, &pmt2->subtype)));
-}
-
 HRESULT strmbase_pin_get_media_type(struct strmbase_pin *iface, unsigned int index, AM_MEDIA_TYPE *mt)
 {
     return VFW_S_NO_MORE_ITEMS;
@@ -428,6 +422,24 @@ static inline struct strmbase_source *impl_source_from_IPin( IPin *iface )
     return CONTAINING_RECORD(iface, struct strmbase_source, pin.IPin_iface);
 }
 
+static BOOL compare_media_types(const AM_MEDIA_TYPE *a, const AM_MEDIA_TYPE *b)
+{
+    if (!a)
+        return TRUE;
+
+    if (!IsEqualGUID(&a->majortype, &b->majortype)
+            && !IsEqualGUID(&a->majortype, &GUID_NULL)
+            && !IsEqualGUID(&b->majortype, &GUID_NULL))
+        return FALSE;
+
+    if (!IsEqualGUID(&a->subtype, &b->subtype)
+            && !IsEqualGUID(&a->subtype, &GUID_NULL)
+            && !IsEqualGUID(&b->subtype, &GUID_NULL))
+        return FALSE;
+
+    return TRUE;
+}
+
 static HRESULT WINAPI source_Connect(IPin *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
 {
     struct strmbase_source *pin = impl_source_from_IPin(iface);
@@ -468,7 +480,7 @@ static HRESULT WINAPI source_Connect(IPin *iface, IPin *peer, const AM_MEDIA_TYP
     for (i = 0; pin->pFuncsTable->base.pin_get_media_type(&pin->pin, i, &candidate) == S_OK; ++i)
     {
         strmbase_dump_media_type(&candidate);
-        if ((!mt || CompareMediaTypes(mt, &candidate, TRUE))
+        if (compare_media_types(mt, &candidate)
                 && pin->pFuncsTable->pfnAttemptConnection(pin, peer, &candidate) == S_OK)
         {
             LeaveCriticalSection(&pin->pin.filter->csFilter);
@@ -482,7 +494,7 @@ static HRESULT WINAPI source_Connect(IPin *iface, IPin *peer, const AM_MEDIA_TYP
     {
         while (IEnumMediaTypes_Next(enummt, 1, &candidate_ptr, &count) == S_OK)
         {
-            if ((!mt || CompareMediaTypes(mt, candidate_ptr, TRUE))
+            if (compare_media_types(mt, candidate_ptr)
                     && pin->pFuncsTable->pfnAttemptConnection(pin, peer, candidate_ptr) == S_OK)
             {
                 LeaveCriticalSection(&pin->pin.filter->csFilter);
-- 
2.25.0




More information about the wine-devel mailing list