Module: wine Branch: master Commit: e14c5430ccc9ae63770e47c2bd6ada227fa4ca33 URL: https://source.winehq.org/git/wine.git/?a=commit;h=e14c5430ccc9ae63770e47c2b... Author: Zebediah Figura <z.figura12(a)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(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)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);