Loader.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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/MP3Loader.h>
  9. #include <LibAudio/WavLoader.h>
  10. namespace Audio {
  11. Loader::Loader(NonnullOwnPtr<LoaderPlugin> plugin)
  12. : m_plugin(move(plugin))
  13. {
  14. }
  15. Result<NonnullOwnPtr<LoaderPlugin>, LoaderError> Loader::try_create(StringView path)
  16. {
  17. NonnullOwnPtr<LoaderPlugin> plugin = adopt_own(*new WavLoaderPlugin(path));
  18. auto initstate0 = plugin->initialize();
  19. if (!initstate0.is_error())
  20. return plugin;
  21. plugin = adopt_own(*new FlacLoaderPlugin(path));
  22. auto initstate1 = plugin->initialize();
  23. if (!initstate1.is_error())
  24. return plugin;
  25. plugin = adopt_own(*new MP3LoaderPlugin(path));
  26. auto initstate2 = plugin->initialize();
  27. if (!initstate2.is_error())
  28. return plugin;
  29. return LoaderError { "No loader plugin available" };
  30. }
  31. Result<NonnullOwnPtr<LoaderPlugin>, LoaderError> Loader::try_create(Bytes& buffer)
  32. {
  33. NonnullOwnPtr<LoaderPlugin> plugin = adopt_own(*new WavLoaderPlugin(buffer));
  34. if (auto initstate = plugin->initialize(); !initstate.is_error())
  35. return plugin;
  36. plugin = adopt_own(*new FlacLoaderPlugin(buffer));
  37. if (auto initstate = plugin->initialize(); !initstate.is_error())
  38. return plugin;
  39. plugin = adopt_own(*new MP3LoaderPlugin(buffer));
  40. if (auto initstate = plugin->initialize(); !initstate.is_error())
  41. return plugin;
  42. return LoaderError { "No loader plugin available" };
  43. }
  44. }