audiodevicepulse.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #pragma once
  2. #include <pulse/pulseaudio.h>
  3. enum InitStatus {
  4. OK = 0,
  5. PLAYOUT_ERROR = 1,
  6. RECORDING_ERROR = 2,
  7. OTHER_ERROR = 3,
  8. NUM_STATUSES = 4
  9. };
  10. class AudioDevicePulse {
  11. public:
  12. AudioDevicePulse();
  13. virtual ~AudioDevicePulse();
  14. // Main initializaton and termination
  15. InitStatus Init();
  16. int32_t Terminate();
  17. bool Initialized() const;
  18. private:
  19. int32_t InitPulseAudio();
  20. int32_t TerminatePulseAudio();
  21. int32_t CheckPulseAudioVersion();
  22. int32_t InitSamplingFrequency();
  23. void PaLock();
  24. void PaUnLock();
  25. void WaitForOperationCompletion(pa_operation* paOperation) const;
  26. static void PaServerInfoCallback(pa_context* c, const pa_server_info* i, void* pthis);
  27. static void PaContextStateCallback(pa_context* c, void* pthis);
  28. void PaServerInfoCallbackHandler(const pa_server_info* i);
  29. void PaContextStateCallbackHandler(pa_context* c);
  30. private:
  31. bool m_initialized;
  32. pa_threaded_mainloop* m_paMainloop;
  33. pa_mainloop_api* m_paMainloopApi;
  34. pa_context* m_paContext;
  35. bool m_paStateChanged;
  36. char m_paServerVersion[32];
  37. int m_sample_rate_hz;
  38. };