diff --git a/NEWS b/NEWS index 703ce8478..0f86d2431 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,7 @@ ver 0.21.25 (not yet released) - smbclient: don't send credentials to MPD clients * decoder - opus: apply pre-skip + - opus: fix memory leak * output - osx: improve sample rate selection * Windows/Android: diff --git a/src/decoder/plugins/OpusDecoderPlugin.cxx b/src/decoder/plugins/OpusDecoderPlugin.cxx index 88e8098f0..fc77b5454 100644 --- a/src/decoder/plugins/OpusDecoderPlugin.cxx +++ b/src/decoder/plugins/OpusDecoderPlugin.cxx @@ -192,8 +192,12 @@ MPDOpusDecoder::OnOggBeginning(const ogg_packet &packet) client.Ready(audio_format, eos_granulepos > 0, duration); frame_size = audio_format.GetFrameSize(); - output_buffer = new opus_int16[opus_output_buffer_frames - * audio_format.channels]; + if (output_buffer == nullptr) + /* note: if we ever support changing the channel count + in chained streams, we need to reallocate this + buffer instead of keeping it */ + output_buffer = new opus_int16[opus_output_buffer_frames + * audio_format.channels]; auto cmd = client.GetCommand(); if (cmd != DecoderCommand::NONE)