From 16d5d29049c08e21f57f7928ceedf40586a2d294 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Sat, 3 Dec 2022 11:10:06 +1100 Subject: Use std::span (backported) and std::byte to make our buffers safer --- src/codecs/mad.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'src/codecs/mad.cpp') diff --git a/src/codecs/mad.cpp b/src/codecs/mad.cpp index 4afc9a77..a8c2fb11 100644 --- a/src/codecs/mad.cpp +++ b/src/codecs/mad.cpp @@ -51,8 +51,10 @@ auto MadMp3Decoder::ResetForNewStream() -> void { has_decoded_header_ = false; } -auto MadMp3Decoder::SetInput(uint8_t* buffer, std::size_t length) -> void { - mad_stream_buffer(&stream_, buffer, length); +auto MadMp3Decoder::SetInput(cpp::span input) -> void { + mad_stream_buffer(&stream_, + reinterpret_cast(input.data()), + input.size()); } auto MadMp3Decoder::GetInputPosition() -> std::size_t { @@ -101,8 +103,7 @@ auto MadMp3Decoder::ProcessNextFrame() -> cpp::result { return false; } -auto MadMp3Decoder::WriteOutputSamples(uint8_t* output, - std::size_t output_length) +auto MadMp3Decoder::WriteOutputSamples(cpp::span output) -> std::pair { size_t output_byte = 0; // First ensure that we actually have some samples to send off. @@ -111,16 +112,16 @@ auto MadMp3Decoder::WriteOutputSamples(uint8_t* output, } while (current_sample_ < synth_.pcm.length) { - if (output_byte + (3 * synth_.pcm.channels) >= output_length) { + if (output_byte + (3 * synth_.pcm.channels) >= output.size()) { return std::make_pair(output_byte, false); } for (int channel = 0; channel < synth_.pcm.channels; channel++) { uint32_t sample_24 = scaleTo24Bits(synth_.pcm.samples[channel][current_sample_]); - output[output_byte++] = (sample_24 >> 0) & 0xff; - output[output_byte++] = (sample_24 >> 8) & 0xff; - output[output_byte++] = (sample_24 >> 16) & 0xff; + output[output_byte++] = static_cast(sample_24 >> 0); + output[output_byte++] = static_cast(sample_24 >> 8); + output[output_byte++] = static_cast(sample_24 >> 16); } current_sample_++; } -- cgit v1.2.3