Commit 865bbff0 authored by Derek Lesho's avatar Derek Lesho Committed by Alexandre Julliard

winegstreamer: Ensure that the source reports both PCM and floating point audio formats.

The patch is originally by Derek Lesho, with some changes by Giovanni Mascellani and Nikolay Sivov. Signed-off-by: 's avatarGiovanni Mascellani <gmascellani@codeweavers.com> Signed-off-by: 's avatarNikolay Sivov <nsivov@codeweavers.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent cdd24b1d
......@@ -752,9 +752,6 @@ static void test_source_reader(void)
if (SUCCEEDED(hr))
IMFMediaType_Release(mediatype);
hr = IMFSourceReader_GetNativeMediaType(reader, MF_SOURCE_READER_FIRST_AUDIO_STREAM, 1, &mediatype);
ok(hr == MF_E_NO_MORE_TYPES, "Unexpected hr %#x.\n", hr);
/* Current media type. */
hr = IMFSourceReader_GetCurrentMediaType(reader, MF_SOURCE_READER_FIRST_VIDEO_STREAM, &mediatype);
ok(hr == MF_E_INVALIDSTREAMNUMBER, "Unexpected hr %#x.\n", hr);
......
......@@ -806,6 +806,31 @@ static HRESULT media_stream_init_desc(struct media_stream *stream)
goto done;
}
}
else if (format.major_type == WG_MAJOR_TYPE_AUDIO)
{
/* Expose at least one PCM and one floating point type for the
consumer to pick from. */
static const enum wg_audio_format audio_types[] =
{
WG_AUDIO_FORMAT_S16LE,
WG_AUDIO_FORMAT_F32LE,
};
stream_types = malloc( sizeof(IMFMediaType *) * (ARRAY_SIZE(audio_types) + 1) );
stream_types[0] = mf_media_type_from_wg_format(&format);
type_count = 1;
for (i = 0; i < ARRAY_SIZE(audio_types); i++)
{
struct wg_format new_format;
if (format.u.audio.format == audio_types[i])
continue;
new_format = format;
new_format.u.audio.format = audio_types[i];
stream_types[type_count++] = mf_media_type_from_wg_format(&new_format);
}
}
else
{
stream_type = mf_media_type_from_wg_format(&format);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment