diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index a16c72c807b..6430e853777 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -199,7 +199,6 @@ HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackA INSSBuffer **ret_sample, QWORD *pts, QWORD *duration, DWORD *flags, WORD *ret_stream_number); HRESULT wm_reader_get_stream_selection(struct wm_reader *reader, WORD stream_number, WMT_STREAM_SELECTION *selection); -HRESULT wm_reader_open_stream(struct wm_reader *reader, IStream *stream); void wm_reader_seek(struct wm_reader *reader, QWORD start, LONGLONG duration); HRESULT wm_reader_set_allocate_for_output(struct wm_reader *reader, DWORD output, BOOL allocate); HRESULT wm_reader_set_allocate_for_stream(struct wm_reader *reader, WORD stream_number, BOOL allocate); diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 825a042b534..4546a9c3309 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -933,7 +933,7 @@ static HRESULT WINAPI WMReaderAdvanced2_OpenStream(IWMReaderAdvanced6 *iface, EnterCriticalSection(&reader->cs); - if (SUCCEEDED(hr = wm_reader_open_stream(reader->wm_reader, stream)) + if (SUCCEEDED(hr = IWMSyncReader2_OpenStream(reader->reader, stream)) && FAILED(hr = async_reader_open(reader, callback, context))) IWMSyncReader2_Close(reader->reader); diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 21efac4df66..d3e71efeac6 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1479,37 +1479,6 @@ out_destroy_parser: return hr; } -HRESULT wm_reader_open_stream(struct wm_reader *reader, IStream *stream) -{ - STATSTG stat; - HRESULT hr; - - if (FAILED(hr = IStream_Stat(stream, &stat, STATFLAG_NONAME))) - { - ERR("Failed to stat stream, hr %#lx.\n", hr); - return hr; - } - - EnterCriticalSection(&reader->cs); - - if (reader->wg_parser) - { - LeaveCriticalSection(&reader->cs); - WARN("Stream is already open; returning E_UNEXPECTED.\n"); - return E_UNEXPECTED; - } - - IStream_AddRef(reader->source_stream = stream); - if (FAILED(hr = init_stream(reader, stat.cbSize.QuadPart))) - { - IStream_Release(stream); - reader->source_stream = NULL; - } - - LeaveCriticalSection(&reader->cs); - return hr; -} - static struct wm_stream *wm_reader_get_stream_by_stream_number(struct wm_reader *reader, WORD stream_number) { if (stream_number && stream_number <= reader->stream_count) @@ -2373,10 +2342,35 @@ static HRESULT WINAPI reader_Open(IWMSyncReader2 *iface, const WCHAR *filename) static HRESULT WINAPI reader_OpenStream(IWMSyncReader2 *iface, IStream *stream) { struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + STATSTG stat; + HRESULT hr; TRACE("reader %p, stream %p.\n", reader, stream); - return wm_reader_open_stream(reader, stream); + if (FAILED(hr = IStream_Stat(stream, &stat, STATFLAG_NONAME))) + { + ERR("Failed to stat stream, hr %#lx.\n", hr); + return hr; + } + + EnterCriticalSection(&reader->cs); + + if (reader->wg_parser) + { + LeaveCriticalSection(&reader->cs); + WARN("Stream is already open; returning E_UNEXPECTED.\n"); + return E_UNEXPECTED; + } + + IStream_AddRef(reader->source_stream = stream); + if (FAILED(hr = init_stream(reader, stat.cbSize.QuadPart))) + { + IStream_Release(stream); + reader->source_stream = NULL; + } + + LeaveCriticalSection(&reader->cs); + return hr; } static HRESULT WINAPI reader_SetOutputProps(IWMSyncReader2 *iface, DWORD output, IWMOutputMediaProps *props)