From b8aa25fe4edf27315566b95fa513f74fc33248b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Fri, 16 Sep 2022 07:59:41 +0200 Subject: [PATCH] winegstreamer: Use IWMSyncReader2_OpenStream in the async reader. --- dlls/winegstreamer/gst_private.h | 1 - dlls/winegstreamer/wm_asyncreader.c | 2 +- dlls/winegstreamer/wm_reader.c | 58 +++++++++++++---------------- 3 files changed, 27 insertions(+), 34 deletions(-) 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)