wasapi_loopback_capturer.h 962 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #ifndef WASAPI_LOOPBACK_CAPTURER_H
  2. #define WASAPI_LOOPBACK_CAPTURER_H
  3. #include <QObject>
  4. #include <atomic>
  5. #include <condition_variable>
  6. #include <mutex>
  7. #include <thread>
  8. #include <vector>
  9. #include "iaudiocapturer.h"
  10. class WASAPILoopbackCapturer : public QObject, public IAudioCapturer
  11. {
  12. Q_OBJECT
  13. public:
  14. explicit WASAPILoopbackCapturer(QObject* parent = nullptr);
  15. ~WASAPILoopbackCapturer() override;
  16. bool Init(Type deviceType) override;
  17. bool Start() override;
  18. void Stop() override;
  19. const AudioFormat& GetFormat() const override;
  20. int readAudioData(char* buf, int maxLen) override;
  21. private:
  22. void captureThreadFunc();
  23. std::atomic<bool> m_running{false};
  24. std::thread m_captureThread;
  25. std::vector<char> m_buffer;
  26. std::mutex m_mutex;
  27. std::condition_variable m_cv;
  28. AudioFormat m_audioFormat;
  29. Type m_deviceType;
  30. class WASAPILoopbackCapturerPrivate* d;
  31. };
  32. #endif // WASAPI_LOOPBACK_CAPTURER_H