Planet Coaster requests an output format with 44100 rate for user provided music, which may not match what the files are decoded to.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/winegstreamer/media_source.c | 21 +++++++++++++++------ dlls/winegstreamer/wg_parser.c | 10 ++++++++-- 2 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c index 6ecd345cb73..6a96ddae0bd 100644 --- a/dlls/winegstreamer/media_source.c +++ b/dlls/winegstreamer/media_source.c @@ -922,22 +922,31 @@ static HRESULT media_stream_init_desc(struct media_stream *stream) { /* Expose at least one PCM and one floating point type for the consumer to pick from. */ - static const enum wg_audio_format audio_types[] = + static const struct { - WG_AUDIO_FORMAT_S16LE, - WG_AUDIO_FORMAT_F32LE, + enum wg_audio_format format; + UINT32 rate; + } + audio_formats[] = + { + {WG_AUDIO_FORMAT_S16LE, 48000}, + {WG_AUDIO_FORMAT_S16LE, 44100}, + {WG_AUDIO_FORMAT_F32LE, 48000}, + {WG_AUDIO_FORMAT_F32LE, 44100}, };
stream_types[0] = mf_media_type_from_wg_format(&format); type_count = 1;
- for (i = 0; i < ARRAY_SIZE(audio_types); i++) + for (i = 0; i < ARRAY_SIZE(audio_formats); i++) { struct wg_format new_format; - if (format.u.audio.format == audio_types[i]) + if (format.u.audio.format == audio_formats[i].format && + format.u.audio.rate == audio_formats[i].rate) continue; new_format = format; - new_format.u.audio.format = audio_types[i]; + new_format.u.audio.format = audio_formats[i].format; + new_format.u.audio.rate = audio_formats[i].rate; stream_types[type_count++] = mf_media_type_from_wg_format(&new_format); } } diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c index 3b341dad9eb..b3fe25d70b1 100644 --- a/dlls/winegstreamer/wg_parser.c +++ b/dlls/winegstreamer/wg_parser.c @@ -1198,7 +1198,7 @@ static void pad_added_cb(GstElement *element, GstPad *pad, gpointer user) } else if (!strcmp(name, "audio/x-raw")) { - GstElement *convert; + GstElement *convert, *resample;
/* Currently our dsound can't handle 64-bit formats or all * surround-sound configurations. Native dsound can't always handle @@ -1207,11 +1207,17 @@ static void pad_added_cb(GstElement *element, GstPad *pad, gpointer user) if (!(convert = create_element("audioconvert", "base"))) goto out;
+ if (!(resample = create_element("audioresample", "base"))) + goto out; + gst_bin_add(GST_BIN(parser->container), convert); gst_element_sync_state_with_parent(convert); + gst_bin_add(GST_BIN(parser->container), resample); + gst_element_sync_state_with_parent(resample); + gst_element_link(convert, resample);
stream->post_sink = gst_element_get_static_pad(convert, "sink"); - stream->post_src = gst_element_get_static_pad(convert, "src"); + stream->post_src = gst_element_get_static_pad(resample, "src"); }
if (stream->post_sink)