diff options
author | Tim Schumacher <timschumi@gmx.de> | 2022-12-05 00:41:23 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-12-05 17:49:47 +0100 |
commit | c57be0f47496d2bb23da25224833f9080f9cbcc4 (patch) | |
tree | d30a8762aece6a79167c1fcf7e6ef2a1223e4038 /Userland/Libraries/LibAudio/MP3Loader.cpp | |
parent | 3cf93d0dd2377b3ce85362db05e47a373006a56e (diff) | |
download | serenity-c57be0f47496d2bb23da25224833f9080f9cbcc4.zip |
LibAudio: Switch LoaderPlugin to a more traditional constructor pattern
This now prepares all the needed (fallible) components before actually
constructing a LoaderPlugin object, so we are no longer filling them in
at an arbitrary later point in time.
Diffstat (limited to 'Userland/Libraries/LibAudio/MP3Loader.cpp')
-rw-r--r-- | Userland/Libraries/LibAudio/MP3Loader.cpp | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/Userland/Libraries/LibAudio/MP3Loader.cpp b/Userland/Libraries/LibAudio/MP3Loader.cpp index 61340c00a7..3cbb014f27 100644 --- a/Userland/Libraries/LibAudio/MP3Loader.cpp +++ b/Userland/Libraries/LibAudio/MP3Loader.cpp @@ -14,20 +14,33 @@ namespace Audio { DSP::MDCT<12> MP3LoaderPlugin::s_mdct_12; DSP::MDCT<36> MP3LoaderPlugin::s_mdct_36; -MP3LoaderPlugin::MP3LoaderPlugin(StringView path) - : LoaderPlugin(path) +MP3LoaderPlugin::MP3LoaderPlugin(OwnPtr<Core::Stream::SeekableStream> stream) + : LoaderPlugin(move(stream)) { } -MP3LoaderPlugin::MP3LoaderPlugin(Bytes buffer) - : LoaderPlugin(buffer) +Result<NonnullOwnPtr<MP3LoaderPlugin>, LoaderError> MP3LoaderPlugin::try_create(StringView path) { + auto stream = LOADER_TRY(Core::Stream::BufferedFile::create(LOADER_TRY(Core::Stream::File::open(path, Core::Stream::OpenMode::Read)))); + auto loader = make<MP3LoaderPlugin>(move(stream)); + + LOADER_TRY(loader->initialize()); + + return loader; } -MaybeLoaderError MP3LoaderPlugin::initialize() +Result<NonnullOwnPtr<MP3LoaderPlugin>, LoaderError> MP3LoaderPlugin::try_create(Bytes buffer) { - LOADER_TRY(LoaderPlugin::initialize()); + auto stream = LOADER_TRY(Core::Stream::MemoryStream::construct(buffer)); + auto loader = make<MP3LoaderPlugin>(move(stream)); + + LOADER_TRY(loader->initialize()); + return loader; +} + +MaybeLoaderError MP3LoaderPlugin::initialize() +{ m_bitstream = LOADER_TRY(Core::Stream::BigEndianInputBitStream::construct(*m_stream)); TRY(synchronize()); |