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