Module: wine Branch: master Commit: 8f4bb2e9f9151ebbcea4c1be6c86a29586156de5 URL: https://gitlab.winehq.org/wine/wine/-/commit/8f4bb2e9f9151ebbcea4c1be6c86a29...
Author: Elizabeth Figura zfigura@codeweavers.com Date: Sat Jun 15 18:51:07 2024 -0500
winegstreamer: Implement MPEG-1 audio to IMFMediaType conversion.
---
dlls/winegstreamer/mfplat.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/dlls/winegstreamer/mfplat.c b/dlls/winegstreamer/mfplat.c index b3bb4573847..d84939ce13d 100644 --- a/dlls/winegstreamer/mfplat.c +++ b/dlls/winegstreamer/mfplat.c @@ -586,6 +586,28 @@ static IMFMediaType *mf_media_type_from_wg_format_video(const struct wg_format * return NULL; }
+static IMFMediaType *mf_media_type_from_wg_format_audio_mpeg1(const struct wg_format *format) +{ + IMFMediaType *type; + + if (FAILED(MFCreateMediaType(&type))) + return NULL; + + if (format->u.audio.layer != 3) + FIXME("Unhandled layer %#x.\n", format->u.audio.layer); + + IMFMediaType_SetGUID(type, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio); + IMFMediaType_SetGUID(type, &MF_MT_SUBTYPE, &MFAudioFormat_MP3); + IMFMediaType_SetGUID(type, &MF_MT_AM_FORMAT_TYPE, &FORMAT_WaveFormatEx); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_NUM_CHANNELS, format->u.audio.channels); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_CHANNEL_MASK, format->u.audio.channel_mask); + IMFMediaType_SetUINT32(type, &MF_MT_AUDIO_PREFER_WAVEFORMATEX, TRUE); + IMFMediaType_SetUINT32(type, &MF_MT_FIXED_SIZE_SAMPLES, TRUE); + IMFMediaType_SetUINT32(type, &MF_MT_ALL_SAMPLES_INDEPENDENT, TRUE); + + return type; +} + static IMFMediaType *mf_media_type_from_wg_format_audio_mpeg4(const struct wg_format *format) { IMFMediaType *type; @@ -697,7 +719,6 @@ IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format) { switch (format->major_type) { - case WG_MAJOR_TYPE_AUDIO_MPEG1: case WG_MAJOR_TYPE_VIDEO_CINEPAK: case WG_MAJOR_TYPE_VIDEO_INDEO: case WG_MAJOR_TYPE_VIDEO_MPEG1: @@ -715,6 +736,9 @@ IMFMediaType *mf_media_type_from_wg_format(const struct wg_format *format) case WG_MAJOR_TYPE_VIDEO_H264: return mf_media_type_from_wg_format_h264(format);
+ case WG_MAJOR_TYPE_AUDIO_MPEG1: + return mf_media_type_from_wg_format_audio_mpeg1(format); + case WG_MAJOR_TYPE_AUDIO_MPEG4: return mf_media_type_from_wg_format_audio_mpeg4(format);