From 1c65ee6edfcb3330f6c2abaf55de358725fabbab Mon Sep 17 00:00:00 2001 From: Karol Kosek Date: Tue, 3 Aug 2021 18:01:22 +0200 Subject: LibAudio: Implement decoding verbatim blocks in FLAC They're mostly used in literal random data, so it isn't like there is a high demand for it, but it's cool to have more complete implementation anyway. :^) --- Userland/Libraries/LibAudio/FlacLoader.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'Userland/Libraries/LibAudio/FlacLoader.cpp') diff --git a/Userland/Libraries/LibAudio/FlacLoader.cpp b/Userland/Libraries/LibAudio/FlacLoader.cpp index 1ac3f62cf7..134bd6755d 100644 --- a/Userland/Libraries/LibAudio/FlacLoader.cpp +++ b/Userland/Libraries/LibAudio/FlacLoader.cpp @@ -621,10 +621,17 @@ Vector FlacLoaderPlugin::parse_subframe(FlacSubframeHeader& subframe_header return resampler.resample(samples); } -// Decode a subframe that isn't actually encoded -Vector FlacLoaderPlugin::decode_verbatim([[maybe_unused]] FlacSubframeHeader& subframe, [[maybe_unused]] InputBitStream& bit_input) +// Decode a subframe that isn't actually encoded, usually seen in random data +Vector FlacLoaderPlugin::decode_verbatim(FlacSubframeHeader& subframe, InputBitStream& bit_input) { - TODO(); + Vector decoded; + decoded.ensure_capacity(m_current_frame->sample_count); + + for (size_t i = 0; i < m_current_frame->sample_count; ++i) { + decoded.unchecked_append(sign_extend(bit_input.read_bits_big_endian(subframe.bits_per_sample - subframe.wasted_bits_per_sample), subframe.bits_per_sample - subframe.wasted_bits_per_sample)); + } + + return decoded; } // Decode a subframe encoded with a custom linear predictor coding, i.e. the subframe provides the polynomial order and coefficients -- cgit v1.2.3