From: Rémi Bernon <rbernon(a)codeweavers.com> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53748 --- dlls/amstream/multimedia.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/dlls/amstream/multimedia.c b/dlls/amstream/multimedia.c index dc855901c77..90c0b0a54b5 100644 --- a/dlls/amstream/multimedia.c +++ b/dlls/amstream/multimedia.c @@ -38,6 +38,7 @@ struct multimedia_stream IMediaSeeking* media_seeking; IMediaControl* media_control; IMediaStreamFilter *filter; + IBaseFilter *source; IPin* ipin; BOOL initialized; STREAM_TYPE type; @@ -90,6 +91,8 @@ static ULONG WINAPI multimedia_stream_Release(IAMMultiMediaStream *iface) if (!ref) { + if (This->source) + IBaseFilter_Release(This->source); if (This->ipin) IPin_Release(This->ipin); IMediaStreamFilter_Release(This->filter); @@ -431,7 +434,6 @@ static HRESULT WINAPI multimedia_stream_OpenFile(IAMMultiMediaStream *iface, { struct multimedia_stream *This = impl_from_IAMMultiMediaStream(iface); HRESULT ret = S_OK; - IBaseFilter *BaseFilter = NULL; IEnumPins *EnumPins = NULL; IPin *ipin; PIN_DIRECTION pin_direction; @@ -449,11 +451,17 @@ static HRESULT WINAPI multimedia_stream_OpenFile(IAMMultiMediaStream *iface, ret = create_graph(This, NULL); } + if (This->source) + { + IBaseFilter_Release(This->source); + This->source = NULL; + } + if (SUCCEEDED(ret)) - ret = IGraphBuilder_AddSourceFilter(This->graph, filename, L"Source", &BaseFilter); + ret = IGraphBuilder_AddSourceFilter(This->graph, filename, L"Source", &This->source); if (SUCCEEDED(ret)) - ret = IBaseFilter_EnumPins(BaseFilter, &EnumPins); + ret = IBaseFilter_EnumPins(This->source, &EnumPins); if (SUCCEEDED(ret)) ret = IEnumPins_Next(EnumPins, 1, &ipin, NULL); @@ -504,8 +512,6 @@ static HRESULT WINAPI multimedia_stream_OpenFile(IAMMultiMediaStream *iface, if (EnumPins) IEnumPins_Release(EnumPins); - if (BaseFilter) - IBaseFilter_Release(BaseFilter); return ret; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1856