LibAudio: Extract MP3 synchronize to static helper function

This comes in handy when we want to sniff an MP3 file with a stream
outside of the loader.
This commit is contained in:
kleines Filmröllchen 2023-04-01 17:21:49 +02:00 committed by Sam Atkins
parent aec3d9d84e
commit dfd48ab643
Notes: sideshowbarker 2024-07-17 05:41:34 +09:00
2 changed files with 11 additions and 5 deletions

View file

@ -188,21 +188,26 @@ ErrorOr<MP3::Header, LoaderError> MP3LoaderPlugin::read_header()
return header;
}
MaybeLoaderError MP3LoaderPlugin::synchronize()
MaybeLoaderError MP3LoaderPlugin::synchronize(BigEndianInputBitStream& stream, size_t sample_index)
{
size_t one_counter = 0;
while (one_counter < 12 && !m_bitstream->is_eof()) {
bool const bit = LOADER_TRY(m_bitstream->read_bit());
while (one_counter < 12 && !stream.is_eof()) {
bool const bit = LOADER_TRY(stream.read_bit());
one_counter = bit ? one_counter + 1 : 0;
if (!bit) {
m_bitstream->align_to_byte_boundary();
stream.align_to_byte_boundary();
}
}
if (one_counter != 12)
return LoaderError { LoaderError::Category::Format, m_loaded_samples, "Failed to synchronize." };
return LoaderError { LoaderError::Category::Format, sample_index, "Failed to synchronize." };
return {};
}
MaybeLoaderError MP3LoaderPlugin::synchronize()
{
return MP3LoaderPlugin::synchronize(*m_bitstream, m_loaded_samples);
}
ErrorOr<MP3::MP3Frame, LoaderError> MP3LoaderPlugin::read_next_frame()
{
// Note: This will spin until we find a correct frame, or we reach eof.

View file

@ -41,6 +41,7 @@ public:
private:
MaybeLoaderError initialize();
static MaybeLoaderError synchronize(BigEndianInputBitStream& stream, size_t sample_index);
MaybeLoaderError synchronize();
MaybeLoaderError build_seek_table();
ErrorOr<MP3::Header, LoaderError> read_header();