Module: wine Branch: master Commit: 0dfeadd7669b908e12fe4f7cf9ee4eaa5eff55a4 URL: https://gitlab.winehq.org/wine/wine/-/commit/0dfeadd7669b908e12fe4f7cf9ee4ea...
Author: Rémi Bernon rbernon@codeweavers.com Date: Mon Sep 5 22:57:08 2022 +0200
winegstreamer: Use IWMSyncReader2_GetOutputFormat in the async reader.
---
dlls/winegstreamer/gst_private.h | 2 - dlls/winegstreamer/wm_asyncreader.c | 2 +- dlls/winegstreamer/wm_reader.c | 97 +++++++++++++++++-------------------- 3 files changed, 46 insertions(+), 55 deletions(-)
diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h index e572ab156eb..692777e8652 100644 --- a/dlls/winegstreamer/gst_private.h +++ b/dlls/winegstreamer/gst_private.h @@ -189,8 +189,6 @@ struct wm_reader HRESULT WINAPI winegstreamer_create_wm_sync_reader(IUnknown *outer, void **out); struct wm_reader *wm_reader_from_sync_reader_inner(IUnknown *inner);
-HRESULT wm_reader_get_output_format(struct wm_reader *reader, DWORD output, - DWORD index, IWMOutputMediaProps **props); HRESULT wm_reader_get_output_format_count(struct wm_reader *reader, DWORD output, DWORD *count); HRESULT wm_reader_get_stream_sample(struct wm_reader *reader, IWMReaderCallbackAdvanced *callback_advanced, WORD stream_number, INSSBuffer **ret_sample, QWORD *pts, QWORD *duration, DWORD *flags, WORD *ret_stream_number); diff --git a/dlls/winegstreamer/wm_asyncreader.c b/dlls/winegstreamer/wm_asyncreader.c index 0ae1a8c5401..5b7539e37da 100644 --- a/dlls/winegstreamer/wm_asyncreader.c +++ b/dlls/winegstreamer/wm_asyncreader.c @@ -536,7 +536,7 @@ static HRESULT WINAPI WMReader_GetOutputFormat(IWMReader *iface, DWORD output,
TRACE("reader %p, output %lu, index %lu, props %p.\n", reader, output, index, props);
- return wm_reader_get_output_format(reader->wm_reader, output, index, props); + return IWMSyncReader2_GetOutputFormat(reader->reader, output, index, props); }
static HRESULT WINAPI WMReader_Start(IWMReader *iface, diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c index 78e72cfdf82..03685687244 100644 --- a/dlls/winegstreamer/wm_reader.c +++ b/dlls/winegstreamer/wm_reader.c @@ -1538,57 +1538,6 @@ HRESULT wm_reader_get_output_format_count(struct wm_reader *reader, DWORD output return S_OK; }
-HRESULT wm_reader_get_output_format(struct wm_reader *reader, DWORD output, - DWORD index, IWMOutputMediaProps **props) -{ - struct wm_stream *stream; - struct wg_format format; - - EnterCriticalSection(&reader->cs); - - if (!(stream = get_stream_by_output_number(reader, output))) - { - LeaveCriticalSection(&reader->cs); - return E_INVALIDARG; - } - - wg_parser_stream_get_preferred_format(stream->wg_stream, &format); - - switch (format.major_type) - { - case WG_MAJOR_TYPE_VIDEO: - if (index >= ARRAY_SIZE(video_formats)) - { - LeaveCriticalSection(&reader->cs); - return NS_E_INVALID_OUTPUT_FORMAT; - } - format.u.video.format = video_formats[index]; - break; - - case WG_MAJOR_TYPE_AUDIO: - if (index) - { - LeaveCriticalSection(&reader->cs); - return NS_E_INVALID_OUTPUT_FORMAT; - } - format.u.audio.format = WG_AUDIO_FORMAT_S16LE; - break; - - case WG_MAJOR_TYPE_MPEG1_AUDIO: - case WG_MAJOR_TYPE_WMA: - case WG_MAJOR_TYPE_H264: - FIXME("Format %u not implemented!\n", format.major_type); - break; - case WG_MAJOR_TYPE_UNKNOWN: - break; - } - - LeaveCriticalSection(&reader->cs); - - *props = output_props_create(&format); - return *props ? S_OK : E_OUTOFMEMORY; -} - static const char *get_major_type_string(enum wg_major_type type) { switch (type) @@ -2086,10 +2035,54 @@ static HRESULT WINAPI reader_GetOutputFormat(IWMSyncReader2 *iface, DWORD output, DWORD index, IWMOutputMediaProps **props) { struct wm_reader *reader = impl_from_IWMSyncReader2(iface); + struct wm_stream *stream; + struct wg_format format;
TRACE("reader %p, output %lu, index %lu, props %p.\n", reader, output, index, props);
- return wm_reader_get_output_format(reader, output, index, props); + EnterCriticalSection(&reader->cs); + + if (!(stream = get_stream_by_output_number(reader, output))) + { + LeaveCriticalSection(&reader->cs); + return E_INVALIDARG; + } + + wg_parser_stream_get_preferred_format(stream->wg_stream, &format); + + switch (format.major_type) + { + case WG_MAJOR_TYPE_VIDEO: + if (index >= ARRAY_SIZE(video_formats)) + { + LeaveCriticalSection(&reader->cs); + return NS_E_INVALID_OUTPUT_FORMAT; + } + format.u.video.format = video_formats[index]; + break; + + case WG_MAJOR_TYPE_AUDIO: + if (index) + { + LeaveCriticalSection(&reader->cs); + return NS_E_INVALID_OUTPUT_FORMAT; + } + format.u.audio.format = WG_AUDIO_FORMAT_S16LE; + break; + + case WG_MAJOR_TYPE_MPEG1_AUDIO: + case WG_MAJOR_TYPE_WMA: + case WG_MAJOR_TYPE_H264: + FIXME("Format %u not implemented!\n", format.major_type); + break; + case WG_MAJOR_TYPE_UNKNOWN: + break; + } + + LeaveCriticalSection(&reader->cs); + + *props = output_props_create(&format); + return *props ? S_OK : E_OUTOFMEMORY; }
static HRESULT WINAPI reader_GetOutputFormatCount(IWMSyncReader2 *iface, DWORD output, DWORD *count)