On 5/7/21 7:02 PM, Giovanni Mascellani wrote:
+ 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. */ + stream_types = malloc( sizeof(IMFMediaType *) * 2 ); + + stream_types[0] = mf_media_type_from_wg_format(&format); + if (stream_types[0]) + { + stream_types[1] = mf_media_type_from_wg_format(&format); + if (stream_types[1]) + { + GUID base_subtype; + IMFMediaType_GetGUID(stream_types[1], &MF_MT_SUBTYPE, &base_subtype); + if (IsEqualGUID(&base_subtype, &MFAudioFormat_Float)) + { + IMFMediaType_SetGUID(stream_types[1], &MF_MT_SUBTYPE, &MFAudioFormat_PCM); + IMFMediaType_SetUINT32(stream_types[1], &MF_MT_AUDIO_BITS_PER_SAMPLE, 16); + } + else + { + IMFMediaType_SetGUID(stream_types[1], &MF_MT_SUBTYPE, &MFAudioFormat_Float); + IMFMediaType_SetUINT32(stream_types[1], &MF_MT_AUDIO_BITS_PER_SAMPLE, 32); + } + type_count = 2; + } + } + } I was thinking this could be done similar to video section, you can have a list of WG types to add, and let mf_media_type_from_wg_format() do the job.
{ S16LE, F32LE, } types; for () { if (types[i] == base_type.audio.format) continue; format.audio.format = types[i]; stream_types[type_count++] = mf_media_type_from_wg_format(&format); } That seems shorter and reuses as much as possible from conversion helpers.
hr = IMFSourceReader_GetNativeMediaType(reader, MF_SOURCE_READER_FIRST_AUDIO_STREAM, 1, &mediatype); +todo_wine ok(hr == MF_E_NO_MORE_TYPES, "Unexpected hr %#x.\n", hr);
If we're going to add more formats this will never succeed, so either use larger index that will never work in practice, like 100, or remove the test.