Commit 4a04f734 authored by Max Kellermann's avatar Max Kellermann

decoder/opus: add constexpr output_buffer_frames

parent 134cb6a0
...@@ -40,6 +40,12 @@ ...@@ -40,6 +40,12 @@
static constexpr opus_int32 opus_sample_rate = 48000; static constexpr opus_int32 opus_sample_rate = 48000;
/**
* Allocate an output buffer for 16 bit PCM samples big enough to hold
* a quarter second, larger than 120ms required by libopus.
*/
static constexpr unsigned opus_output_buffer_frames = opus_sample_rate / 4;
gcc_pure gcc_pure
static bool static bool
IsOpusHead(const ogg_packet &packet) IsOpusHead(const ogg_packet &packet)
...@@ -70,7 +76,6 @@ class MPDOpusDecoder { ...@@ -70,7 +76,6 @@ class MPDOpusDecoder {
OpusDecoder *opus_decoder; OpusDecoder *opus_decoder;
opus_int16 *output_buffer; opus_int16 *output_buffer;
unsigned output_size;
bool os_initialized; bool os_initialized;
bool found_opus; bool found_opus;
...@@ -86,7 +91,7 @@ public: ...@@ -86,7 +91,7 @@ public:
InputStream &_input_stream) InputStream &_input_stream)
:decoder(_decoder), input_stream(_input_stream), :decoder(_decoder), input_stream(_input_stream),
opus_decoder(nullptr), opus_decoder(nullptr),
output_buffer(nullptr), output_size(0), output_buffer(nullptr),
os_initialized(false), found_opus(false) {} os_initialized(false), found_opus(false) {}
~MPDOpusDecoder(); ~MPDOpusDecoder();
...@@ -264,11 +269,8 @@ MPDOpusDecoder::HandleBOS(const ogg_packet &packet) ...@@ -264,11 +269,8 @@ MPDOpusDecoder::HandleBOS(const ogg_packet &packet)
eos_granulepos > 0, duration); eos_granulepos > 0, duration);
frame_size = audio_format.GetFrameSize(); frame_size = audio_format.GetFrameSize();
/* allocate an output buffer for 16 bit PCM samples big enough output_buffer = new opus_int16[opus_output_buffer_frames
to hold a quarter second, larger than 120ms required by * audio_format.channels];
libopus */
output_size = audio_format.sample_rate / 4;
output_buffer = new opus_int16[output_size * audio_format.channels];
return decoder_get_command(decoder); return decoder_get_command(decoder);
} }
...@@ -304,7 +306,7 @@ MPDOpusDecoder::HandleAudio(const ogg_packet &packet) ...@@ -304,7 +306,7 @@ MPDOpusDecoder::HandleAudio(const ogg_packet &packet)
int nframes = opus_decode(opus_decoder, int nframes = opus_decode(opus_decoder,
(const unsigned char*)packet.packet, (const unsigned char*)packet.packet,
packet.bytes, packet.bytes,
output_buffer, output_size, output_buffer, opus_output_buffer_frames,
0); 0);
if (nframes < 0) { if (nframes < 0) {
LogError(opus_domain, opus_strerror(nframes)); LogError(opus_domain, opus_strerror(nframes));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment