From: Rémi Bernon rbernon@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; }