Zebediah Figura : strmbase: Access our own media types directly in source_Connect().

Alexandre Julliard julliard at winehq.org
Thu Feb 6 15:44:16 CST 2020


Module: wine
Branch: master
Commit: e14c5430ccc9ae63770e47c2bd6ada227fa4ca33
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=e14c5430ccc9ae63770e47c2bd6ada227fa4ca33

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Wed Feb  5 19:50:05 2020 -0600

strmbase: Access our own media types directly in source_Connect().

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/strmbase/pin.c | 34 +++++++++++++++-------------------
 1 file changed, 15 insertions(+), 19 deletions(-)

diff --git a/dlls/strmbase/pin.c b/dlls/strmbase/pin.c
index 44831d13f4..58778e5789 100644
--- a/dlls/strmbase/pin.c
+++ b/dlls/strmbase/pin.c
@@ -431,8 +431,9 @@ static inline struct strmbase_source *impl_source_from_IPin( IPin *iface )
 static HRESULT WINAPI source_Connect(IPin *iface, IPin *peer, const AM_MEDIA_TYPE *mt)
 {
     struct strmbase_source *pin = impl_source_from_IPin(iface);
-    AM_MEDIA_TYPE *candidate;
+    AM_MEDIA_TYPE candidate, *candidate_ptr;
     IEnumMediaTypes *enummt;
+    unsigned int i;
     ULONG count;
     HRESULT hr;
 
@@ -464,37 +465,32 @@ static HRESULT WINAPI source_Connect(IPin *iface, IPin *peer, const AM_MEDIA_TYP
         return hr;
     }
 
-    if (SUCCEEDED(IPin_EnumMediaTypes(iface, &enummt)))
+    for (i = 0; pin->pFuncsTable->base.pin_get_media_type(&pin->pin, i, &candidate) == S_OK; ++i)
     {
-        while (IEnumMediaTypes_Next(enummt, 1, &candidate, NULL) == S_OK)
+        strmbase_dump_media_type(&candidate);
+        if ((!mt || CompareMediaTypes(mt, &candidate, TRUE))
+                && pin->pFuncsTable->pfnAttemptConnection(pin, peer, &candidate) == S_OK)
         {
-            if ((!mt || CompareMediaTypes(mt, candidate, TRUE))
-                    && pin->pFuncsTable->pfnAttemptConnection(pin, peer, candidate) == S_OK)
-            {
-                LeaveCriticalSection(&pin->pin.filter->csFilter);
-                DeleteMediaType(candidate);
-                IEnumMediaTypes_Release(enummt);
-                return S_OK;
-            }
-            DeleteMediaType(candidate);
+            LeaveCriticalSection(&pin->pin.filter->csFilter);
+            FreeMediaType(&candidate);
+            return S_OK;
         }
-
-        IEnumMediaTypes_Release(enummt);
+        FreeMediaType(&candidate);
     }
 
     if (SUCCEEDED(IPin_EnumMediaTypes(peer, &enummt)))
     {
-        while (IEnumMediaTypes_Next(enummt, 1, &candidate, &count) == S_OK)
+        while (IEnumMediaTypes_Next(enummt, 1, &candidate_ptr, &count) == S_OK)
         {
-            if ((!mt || CompareMediaTypes(mt, candidate, TRUE))
-                    && pin->pFuncsTable->pfnAttemptConnection(pin, peer, candidate) == S_OK)
+            if ((!mt || CompareMediaTypes(mt, candidate_ptr, TRUE))
+                    && pin->pFuncsTable->pfnAttemptConnection(pin, peer, candidate_ptr) == S_OK)
             {
                 LeaveCriticalSection(&pin->pin.filter->csFilter);
-                DeleteMediaType(candidate);
+                DeleteMediaType(candidate_ptr);
                 IEnumMediaTypes_Release(enummt);
                 return S_OK;
             }
-            DeleteMediaType(candidate);
+            DeleteMediaType(candidate_ptr);
         }
 
         IEnumMediaTypes_Release(enummt);




More information about the wine-cvs mailing list