Ver código fonte

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.
kleines Filmröllchen 2 anos atrás
pai
commit
dfd48ab643

+ 10 - 5
Userland/Libraries/LibAudio/MP3Loader.cpp

@@ -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.

+ 1 - 0
Userland/Libraries/LibAudio/MP3Loader.h

@@ -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();