summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibAudio/WavLoader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibAudio/WavLoader.cpp')
-rw-r--r--Userland/Libraries/LibAudio/WavLoader.cpp30
1 files changed, 22 insertions, 8 deletions
diff --git a/Userland/Libraries/LibAudio/WavLoader.cpp b/Userland/Libraries/LibAudio/WavLoader.cpp
index 62d0d06753..4018fe9122 100644
--- a/Userland/Libraries/LibAudio/WavLoader.cpp
+++ b/Userland/Libraries/LibAudio/WavLoader.cpp
@@ -18,22 +18,36 @@ namespace Audio {
static constexpr size_t const maximum_wav_size = 1 * GiB; // FIXME: is there a more appropriate size limit?
-WavLoaderPlugin::WavLoaderPlugin(StringView path)
- : LoaderPlugin(path)
+WavLoaderPlugin::WavLoaderPlugin(OwnPtr<Core::Stream::SeekableStream> stream)
+ : LoaderPlugin(move(stream))
{
}
-MaybeLoaderError WavLoaderPlugin::initialize()
+Result<NonnullOwnPtr<WavLoaderPlugin>, LoaderError> WavLoaderPlugin::try_create(StringView path)
{
- LOADER_TRY(LoaderPlugin::initialize());
+ auto stream = LOADER_TRY(Core::Stream::BufferedFile::create(LOADER_TRY(Core::Stream::File::open(path, Core::Stream::OpenMode::Read))));
+ auto loader = make<WavLoaderPlugin>(move(stream));
- TRY(parse_header());
- return {};
+ LOADER_TRY(loader->initialize());
+
+ return loader;
}
-WavLoaderPlugin::WavLoaderPlugin(Bytes buffer)
- : LoaderPlugin(buffer)
+Result<NonnullOwnPtr<WavLoaderPlugin>, LoaderError> WavLoaderPlugin::try_create(Bytes buffer)
{
+ auto stream = LOADER_TRY(Core::Stream::MemoryStream::construct(buffer));
+ auto loader = make<WavLoaderPlugin>(move(stream));
+
+ LOADER_TRY(loader->initialize());
+
+ return loader;
+}
+
+MaybeLoaderError WavLoaderPlugin::initialize()
+{
+ LOADER_TRY(parse_header());
+
+ return {};
}
template<typename SampleReader>