From a4e8e0d0320f949a3e29f17f8739c1e5e6d773ac Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Sun, 22 Dec 2019 15:55:50 +0300 Subject: [PATCH] music_mad.c: reload AudioStream when playing Frankenstein streams. Thanks Vitaly Novichkov. --- src/codecs/music_mad.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/codecs/music_mad.c b/src/codecs/music_mad.c index 55c74f98..e4340a97 100644 --- a/src/codecs/music_mad.c +++ b/src/codecs/music_mad.c @@ -147,6 +147,8 @@ typedef struct { int volume; int status; SDL_AudioStream *audiostream; + unsigned short last_nchannels; + unsigned int last_samplerate; unsigned char input_buffer[MAD_INPUT_BUFFER_SIZE + MAD_BUFFER_GUARD]; } MAD_Music; @@ -300,11 +302,17 @@ static SDL_bool decode_frame(MAD_Music *music) mad_synth_frame(&music->synth, &music->frame); pcm = &music->synth.pcm; - if (!music->audiostream) { - music->audiostream = SDL_NewAudioStream(AUDIO_S16, (Uint8)pcm->channels, (int)pcm->samplerate, music_spec.format, music_spec.channels, music_spec.freq); + if (!music->audiostream || music->last_nchannels != pcm->channels || music->last_samplerate != pcm->samplerate) { + if (music->audiostream) { + SDL_FreeAudioStream(music->audiostream); + } + music->audiostream = SDL_NewAudioStream(AUDIO_S16, (Uint8)pcm->channels, (int)pcm->samplerate, + music_spec.format, music_spec.channels, music_spec.freq); if (!music->audiostream) { return SDL_FALSE; } + music->last_nchannels = pcm->channels; + music->last_samplerate = pcm->samplerate; } nchannels = pcm->channels;