diff options
| author | jacqueline <me@jacqueline.id.au> | 2022-12-03 11:10:06 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2022-12-03 11:10:06 +1100 |
| commit | 16d5d29049c08e21f57f7928ceedf40586a2d294 (patch) | |
| tree | a4647f951f90b036c58c879ae186fa7e452ed950 /src/codecs/mad.cpp | |
| parent | 00d4883d3a683eaf9cfaefacdd81434e0974ad13 (diff) | |
| download | tangara-fw-16d5d29049c08e21f57f7928ceedf40586a2d294.tar.gz | |
Use std::span (backported) and std::byte to make our buffers safer
Diffstat (limited to 'src/codecs/mad.cpp')
| -rw-r--r-- | src/codecs/mad.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
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<std::byte> input) -> void { + mad_stream_buffer(&stream_, + reinterpret_cast<const unsigned char*>(input.data()), + input.size()); } auto MadMp3Decoder::GetInputPosition() -> std::size_t { @@ -101,8 +103,7 @@ auto MadMp3Decoder::ProcessNextFrame() -> cpp::result<bool, ProcessingError> { return false; } -auto MadMp3Decoder::WriteOutputSamples(uint8_t* output, - std::size_t output_length) +auto MadMp3Decoder::WriteOutputSamples(cpp::span<std::byte> output) -> std::pair<std::size_t, bool> { 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<std::byte>(sample_24 >> 0); + output[output_byte++] = static_cast<std::byte>(sample_24 >> 8); + output[output_byte++] = static_cast<std::byte>(sample_24 >> 16); } current_sample_++; } |
