From 754b129f4a4428ed9a3bb378c2a23f9e6e731ff6 Mon Sep 17 00:00:00 2001 From: Lucas CHOLLET Date: Thu, 13 Oct 2022 15:55:21 +0200 Subject: [PATCH] LibAudio: Allow the MP3 plugin to be constructed from a byte buffer --- Userland/Libraries/LibAudio/Loader.cpp | 3 +++ Userland/Libraries/LibAudio/MP3Loader.cpp | 10 ++++++++-- Userland/Libraries/LibAudio/MP3Loader.h | 3 +++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibAudio/Loader.cpp b/Userland/Libraries/LibAudio/Loader.cpp index 6fcaefea1b..f98212f0ab 100644 --- a/Userland/Libraries/LibAudio/Loader.cpp +++ b/Userland/Libraries/LibAudio/Loader.cpp @@ -42,6 +42,9 @@ Result, LoaderError> Loader::try_create(Bytes& buffe if (auto initstate = plugin->initialize(); !initstate.is_error()) return plugin; plugin = adopt_own(*new FlacLoaderPlugin(buffer)); + if (auto initstate = plugin->initialize(); !initstate.is_error()) + return plugin; + plugin = adopt_own(*new MP3LoaderPlugin(buffer)); if (auto initstate = plugin->initialize(); !initstate.is_error()) return plugin; return LoaderError { "No loader plugin available" }; diff --git a/Userland/Libraries/LibAudio/MP3Loader.cpp b/Userland/Libraries/LibAudio/MP3Loader.cpp index e3a37cdad3..e44a5a4f74 100644 --- a/Userland/Libraries/LibAudio/MP3Loader.cpp +++ b/Userland/Libraries/LibAudio/MP3Loader.cpp @@ -15,13 +15,19 @@ DSP::MDCT<12> MP3LoaderPlugin::s_mdct_12; DSP::MDCT<36> MP3LoaderPlugin::s_mdct_36; MP3LoaderPlugin::MP3LoaderPlugin(StringView path) - : m_path(path) + : LoaderPlugin(path) +{ +} + +MP3LoaderPlugin::MP3LoaderPlugin(Bytes buffer) + : m_backing_memory(buffer) { } MaybeLoaderError MP3LoaderPlugin::initialize() { - m_stream = LOADER_TRY(Core::Stream::File::open(m_path, Core::Stream::OpenMode::Read)); + LOADER_TRY(LoaderPlugin::initialize()); + m_bitstream = LOADER_TRY(Core::Stream::BigEndianInputBitStream::construct(*m_stream)); TRY(synchronize()); diff --git a/Userland/Libraries/LibAudio/MP3Loader.h b/Userland/Libraries/LibAudio/MP3Loader.h index e6206646d4..7e83c0e929 100644 --- a/Userland/Libraries/LibAudio/MP3Loader.h +++ b/Userland/Libraries/LibAudio/MP3Loader.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -23,6 +24,7 @@ struct ScaleFactorBand; class MP3LoaderPlugin : public LoaderPlugin { public: explicit MP3LoaderPlugin(StringView path); + explicit MP3LoaderPlugin(Bytes buffer); virtual ~MP3LoaderPlugin() = default; virtual MaybeLoaderError initialize() override; @@ -72,6 +74,7 @@ private: u32 m_current_frame_read; StringView m_path; OwnPtr m_stream; + Optional m_backing_memory; OwnPtr m_bitstream; DuplexMemoryStream m_bit_reservoir; };