PulseAudioStream.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright 2008 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #if defined(HAVE_PULSEAUDIO) && HAVE_PULSEAUDIO
  5. #include <pulse/pulseaudio.h>
  6. #endif
  7. #include "AudioCommon/SoundStream.h"
  8. #include "Common/CommonTypes.h"
  9. #include "Common/Flag.h"
  10. #include "Common/Thread.h"
  11. class PulseAudio final : public SoundStream
  12. {
  13. #if defined(HAVE_PULSEAUDIO) && HAVE_PULSEAUDIO
  14. public:
  15. PulseAudio();
  16. ~PulseAudio() override;
  17. bool Init() override;
  18. bool SetRunning(bool running) override { return true; }
  19. static bool IsValid() { return true; }
  20. void StateCallback(pa_context* c);
  21. void WriteCallback(pa_stream* s, size_t length);
  22. void UnderflowCallback(pa_stream* s);
  23. private:
  24. void SoundLoop();
  25. bool PulseInit();
  26. void PulseShutdown();
  27. // wrapper callback functions, last parameter _must_ be PulseAudio*
  28. static void StateCallback(pa_context* c, void* userdata);
  29. static void WriteCallback(pa_stream* s, size_t length, void* userdata);
  30. static void UnderflowCallback(pa_stream* s, void* userdata);
  31. std::thread m_thread;
  32. Common::Flag m_run_thread;
  33. bool m_stereo; // stereo, else surround
  34. int m_bytespersample;
  35. int m_channels;
  36. int m_pa_error;
  37. int m_pa_connected;
  38. pa_mainloop* m_pa_ml;
  39. pa_mainloop_api* m_pa_mlapi;
  40. pa_context* m_pa_ctx;
  41. pa_stream* m_pa_s;
  42. pa_buffer_attr m_pa_ba;
  43. #endif
  44. };