From: Rémi Bernon <rbernon(a)codeweavers.com> --- dlls/winegstreamer/media_source.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c index 1fc77cc9430..9cf0726bf52 100644 --- a/dlls/winegstreamer/media_source.c +++ b/dlls/winegstreamer/media_source.c @@ -391,34 +391,33 @@ static HRESULT stream_descriptor_set_tag(IMFStreamDescriptor *descriptor, wg_par return hr; } -static HRESULT stream_descriptor_create(UINT32 id, struct wg_format *format, IMFStreamDescriptor **out) +static HRESULT stream_descriptor_create(UINT32 id, wg_parser_stream_t wg_stream, IMFStreamDescriptor **out) { IMFStreamDescriptor *descriptor; IMFMediaTypeHandler *handler; - IMFMediaType *types[6]; - DWORD count = 0; + IMFMediaType *media_type; + struct wg_format format; HRESULT hr; - if (!(types[0] = mf_media_type_from_wg_format(format))) + wg_parser_stream_get_preferred_format(wg_stream, &format); + if (!(media_type = mf_media_type_from_wg_format(&format))) return MF_E_INVALIDMEDIATYPE; - count = 1; - assert(count <= ARRAY_SIZE(types)); - - if (FAILED(hr = MFCreateStreamDescriptor(id, count, types, &descriptor))) - goto done; + if (FAILED(hr = MFCreateStreamDescriptor(id, 1, &media_type, &descriptor))) + { + IMFMediaType_Release(media_type); + return hr; + } if (FAILED(hr = IMFStreamDescriptor_GetMediaTypeHandler(descriptor, &handler))) IMFStreamDescriptor_Release(descriptor); else { - hr = IMFMediaTypeHandler_SetCurrentMediaType(handler, types[0]); + hr = IMFMediaTypeHandler_SetCurrentMediaType(handler, media_type); IMFMediaTypeHandler_Release(handler); } -done: - while (count--) - IMFMediaType_Release(types[count]); - *out = SUCCEEDED(hr) ? descriptor : NULL; + IMFMediaType_Release(media_type); + *out = descriptor; return hr; } @@ -1582,10 +1581,8 @@ static HRESULT media_source_create(struct object_context *context, IMFMediaSourc wg_parser_stream_t wg_stream = wg_parser_get_stream(object->wg_parser, i); IMFStreamDescriptor *descriptor; struct media_stream *stream; - struct wg_format format; - wg_parser_stream_get_preferred_format(wg_stream, &format); - if (FAILED(hr = stream_descriptor_create(i, &format, &descriptor))) + if (FAILED(hr = stream_descriptor_create(i, wg_stream, &descriptor))) goto fail; if (FAILED(hr = media_stream_create(&object->IMFMediaSource_iface, descriptor, wg_stream, &stream))) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/5627