summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibAudio/MP3Loader.cpp
diff options
context:
space:
mode:
authorTim Schumacher <timschumi@gmx.de>2022-12-05 00:41:23 +0100
committerAndreas Kling <kling@serenityos.org>2022-12-05 17:49:47 +0100
commitc57be0f47496d2bb23da25224833f9080f9cbcc4 (patch)
treed30a8762aece6a79167c1fcf7e6ef2a1223e4038 /Userland/Libraries/LibAudio/MP3Loader.cpp
parent3cf93d0dd2377b3ce85362db05e47a373006a56e (diff)
downloadserenity-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.cpp25
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());