diff options
Diffstat (limited to 'Userland/Libraries/LibAudio/WavLoader.cpp')
-rw-r--r-- | Userland/Libraries/LibAudio/WavLoader.cpp | 30 |
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> |