Module: wine Branch: master Commit: 1b527e8c7f6e24f8c79fc620726b41fc2a15182b URL: https://gitlab.winehq.org/wine/wine/-/commit/1b527e8c7f6e24f8c79fc620726b41f...
Author: Rémi Bernon rbernon@codeweavers.com Date: Fri Sep 16 07:59:22 2022 +0200
winegstreamer: Use IWMSyncReader2_Open in the async reader.
---
dlls/winegstreamer/gst_private.h | 1 - dlls/winegstreamer/wm_asyncreader.c | 2 +- dlls/winegstreamer/wm_reader.c | 74 +++++++++++++++++-------------------- 3 files changed, 35 insertions(+), 42 deletions(-)
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index 04a2f99f154..a16c72c807b 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_file(struct wm_reader *reader, const WCHAR *filename); 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); diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 8ec782f3056..825a042b534 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -463,7 +463,7 @@ static HRESULT WINAPI WMReader_Open(IWMReader *iface, const WCHAR *url,
EnterCriticalSection(&reader->cs);
- if (SUCCEEDED(hr = wm_reader_open_file(reader->wm_reader, url)) + if (SUCCEEDED(hr = IWMSyncReader2_Open(reader->reader, url)) && 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 d42726c04d1..21efac4df66 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1510,45 +1510,6 @@ HRESULT wm_reader_open_stream(struct wm_reader *reader, IStream *stream) return hr; }
-HRESULT wm_reader_open_file(struct wm_reader *reader, const WCHAR *filename) -{ - LARGE_INTEGER size; - HANDLE file; - HRESULT hr; - - if ((file = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ, NULL, - OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) - { - ERR("Failed to open %s, error %lu.\n", debugstr_w(filename), GetLastError()); - return HRESULT_FROM_WIN32(GetLastError()); - } - - if (!GetFileSizeEx(file, &size)) - { - ERR("Failed to get the size of %s, error %lu.\n", debugstr_w(filename), GetLastError()); - CloseHandle(file); - return HRESULT_FROM_WIN32(GetLastError()); - } - - EnterCriticalSection(&reader->cs); - - if (reader->wg_parser) - { - LeaveCriticalSection(&reader->cs); - WARN("Stream is already open; returning E_UNEXPECTED.\n"); - CloseHandle(file); - return E_UNEXPECTED; - } - - reader->file = file; - - if (FAILED(hr = init_stream(reader, size.QuadPart))) - reader->file = 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) @@ -2370,10 +2331,43 @@ static HRESULT WINAPI reader_GetStreamSelected(IWMSyncReader2 *iface, static HRESULT WINAPI reader_Open(IWMSyncReader2 *iface, const WCHAR *filename) { struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + LARGE_INTEGER size; + HANDLE file; + HRESULT hr;
TRACE("reader %p, filename %s.\n", reader, debugstr_w(filename));
- return wm_reader_open_file(reader, filename); + if ((file = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) + { + ERR("Failed to open %s, error %lu.\n", debugstr_w(filename), GetLastError()); + return HRESULT_FROM_WIN32(GetLastError()); + } + + if (!GetFileSizeEx(file, &size)) + { + ERR("Failed to get the size of %s, error %lu.\n", debugstr_w(filename), GetLastError()); + CloseHandle(file); + return HRESULT_FROM_WIN32(GetLastError()); + } + + EnterCriticalSection(&reader->cs); + + if (reader->wg_parser) + { + LeaveCriticalSection(&reader->cs); + WARN("Stream is already open; returning E_UNEXPECTED.\n"); + CloseHandle(file); + return E_UNEXPECTED; + } + + reader->file = file; + + if (FAILED(hr = init_stream(reader, size.QuadPart))) + reader->file = NULL; + + LeaveCriticalSection(&reader->cs); + return hr; }
static HRESULT WINAPI reader_OpenStream(IWMSyncReader2 *iface, IStream *stream)