BaseRecordThread.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #ifndef _BASERECORDTHREAD_H_
  2. #define _BASERECORDTHREAD_H_
  3. #include "GlobalVariable.h"
  4. #include "spdlog/spdlog.h"
  5. class QDateTime;
  6. struct AudioSrcData;
  7. class BaseRecordThread
  8. {
  9. public:
  10. BaseRecordThread(RecordThreadInfo_t& threadInfo);
  11. virtual ~BaseRecordThread();
  12. /* 线程任务函数,子类需要实现 */
  13. virtual void thread_task();
  14. /* 停止线程 */
  15. virtual void thread_stop();
  16. /* 阻塞停止线程 */
  17. virtual void thread_stop_block();
  18. /* 获取录音通道信息 */
  19. const RecordThreadInfo_t& getThreadInfo();
  20. /* 设置数据 */
  21. virtual bool setData(const AudioSrcData& srcData) = 0;
  22. protected:
  23. /* 任务函数 */
  24. virtual void task() = 0;
  25. /* 初始化数据 */
  26. virtual bool initData() = 0;
  27. /* 清除数据*/
  28. virtual void clearData() = 0;
  29. /* 根据当前时间和数据大小向前推算时间 */
  30. QDateTime previTime(QDateTime& currentTime, int64_t dataSize);
  31. /*根据当前时间和数据大小向后推算时间 */
  32. QDateTime nextTime(QDateTime& currentTime, int64_t dataSize);
  33. /* 计算出到下一个整点秒需要去掉多少个字节 */
  34. int32_t calculateOffsetToNextSecond(QDateTime& currentTime);
  35. protected:
  36. std::shared_ptr<spdlog::logger> m_logger = nullptr; /* 日志记录器 */
  37. RecordThreadInfo_t m_threadInfo; /* 线程信息 */
  38. std::atomic_bool m_isRunning = false; /* 线程运行标志 */
  39. std::atomic_bool m_isStoped = true; /* 线程停止标志 */
  40. std::string m_logBase; /* 日志基础信息 */
  41. int32_t m_oneSecondSize = 0; /* 每秒钟的音频数据大小 */
  42. /* 音频相关的默认参数 */
  43. int32_t m_sampleRate = 44100; /* 采样率 */
  44. uint16_t m_numChannels = 2; /* 声道数 */
  45. uint16_t m_bitsPerSample = 16; /* 每个采样点的位数 */
  46. };
  47. #endif // _BASERECORDTHREAD_H_