Loader.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * Copyright (c) 2018-2021, the SerenityOS developers.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibAudio/FlacLoader.h>
  7. #include <LibAudio/Loader.h>
  8. #include <LibAudio/WavLoader.h>
  9. namespace Audio {
  10. Loader::Loader(NonnullOwnPtr<LoaderPlugin> plugin)
  11. : m_plugin(move(plugin))
  12. {
  13. }
  14. Result<NonnullOwnPtr<LoaderPlugin>, LoaderError> Loader::try_create(StringView path)
  15. {
  16. NonnullOwnPtr<LoaderPlugin> plugin = adopt_own(*new WavLoaderPlugin(path));
  17. auto initstate0 = plugin->initialize();
  18. if (!initstate0.is_error())
  19. return plugin;
  20. plugin = adopt_own(*new FlacLoaderPlugin(path));
  21. auto initstate1 = plugin->initialize();
  22. if (!initstate1.is_error())
  23. return plugin;
  24. return LoaderError { "No loader plugin available" };
  25. }
  26. Result<NonnullOwnPtr<LoaderPlugin>, LoaderError> Loader::try_create(Bytes& buffer)
  27. {
  28. NonnullOwnPtr<LoaderPlugin> plugin = adopt_own(*new WavLoaderPlugin(buffer));
  29. if (auto initstate = plugin->initialize(); !initstate.is_error())
  30. return plugin;
  31. plugin = adopt_own(*new FlacLoaderPlugin(buffer));
  32. if (auto initstate = plugin->initialize(); !initstate.is_error())
  33. return plugin;
  34. return LoaderError { "No loader plugin available" };
  35. }
  36. }