AudioCodecPluginQt.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "AudioCodecPluginQt.h"
  7. #include "AudioThread.h"
  8. #include <LibMedia/Audio/Loader.h>
  9. namespace Ladybird {
  10. ErrorOr<NonnullOwnPtr<AudioCodecPluginQt>> AudioCodecPluginQt::create(NonnullRefPtr<Audio::Loader> loader)
  11. {
  12. auto audio_thread = TRY(AudioThread::create(move(loader)));
  13. audio_thread->start();
  14. return adopt_nonnull_own_or_enomem(new (nothrow) AudioCodecPluginQt(move(audio_thread)));
  15. }
  16. AudioCodecPluginQt::AudioCodecPluginQt(NonnullOwnPtr<AudioThread> audio_thread)
  17. : m_audio_thread(move(audio_thread))
  18. {
  19. connect(m_audio_thread, &AudioThread::playback_position_updated, this, [this](auto position) {
  20. if (on_playback_position_updated)
  21. on_playback_position_updated(position);
  22. });
  23. }
  24. AudioCodecPluginQt::~AudioCodecPluginQt()
  25. {
  26. m_audio_thread->stop().release_value_but_fixme_should_propagate_errors();
  27. }
  28. void AudioCodecPluginQt::resume_playback()
  29. {
  30. m_audio_thread->queue_task({ AudioTask::Type::Play }).release_value_but_fixme_should_propagate_errors();
  31. }
  32. void AudioCodecPluginQt::pause_playback()
  33. {
  34. m_audio_thread->queue_task({ AudioTask::Type::Pause }).release_value_but_fixme_should_propagate_errors();
  35. }
  36. void AudioCodecPluginQt::set_volume(double volume)
  37. {
  38. AudioTask task { AudioTask::Type::Volume };
  39. task.data = volume;
  40. m_audio_thread->queue_task(move(task)).release_value_but_fixme_should_propagate_errors();
  41. }
  42. void AudioCodecPluginQt::seek(double position)
  43. {
  44. AudioTask task { AudioTask::Type::Seek };
  45. task.data = position;
  46. m_audio_thread->queue_task(move(task)).release_value_but_fixme_should_propagate_errors();
  47. }
  48. AK::Duration AudioCodecPluginQt::duration()
  49. {
  50. return m_audio_thread->duration();
  51. }
  52. }