CreateDBThread.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #ifndef _CREATEDBTHREAD_H_
  2. #define _CREATEDBTHREAD_H_
  3. #include "BaseRecordThread.h"
  4. #include "RingQueue.hpp"
  5. #include "RingQueueManualMutex.hpp"
  6. struct AudioSrcData;
  7. class OneSecondData;
  8. /**
  9. * 这个功能线程计算出音量的线程,给音量报警线程使用
  10. *
  11. */
  12. class CreateDBThread : public BaseRecordThread
  13. {
  14. public:
  15. CreateDBThread(RecordThreadInfo_t& threadInfo);
  16. ~CreateDBThread() override;
  17. /* 设置数据 */
  18. bool setData(const AudioSrcData& srcData) override;
  19. /* 获取结果的环形队列 */
  20. RingQueueManualMutex<OneSecondData*>* getResultQueue() { return m_queueResultData; }
  21. /* 获取最新的结果,根据时间进行对比,最新的时间比传入的晚,就是有新的数据了 */
  22. bool getLatestResult(OneSecondData& resultData);
  23. /* 获取最新的结果,让整个环形队列相等 */
  24. bool getLatestResult(RingQueueManualMutex<OneSecondData*>& resultQueue);
  25. private:
  26. /* 执行任务函数 */
  27. void task() override;
  28. /* 初始化一些数据 */
  29. bool initData() override;
  30. /* 清理数据 */
  31. void clearData() override;
  32. /* 计算音量和反相 */
  33. bool CreateDBPhase(AudioSrcData* audioData);
  34. private:
  35. /* 原始音频数据环形队列 */
  36. RingQueue<AudioSrcData*> m_queueAudioData;
  37. // AudioSrcData* m_remainData = nullptr; /* 不满一个队列元素的剩余数据,使用AudioSrcData来存储,方便管理 */
  38. /* 计算相关的变量 */
  39. int m_oneDBLengthOfSrcData = 0; /* 计算一个DB需要的原始音频数据的长度,单位:short */
  40. int m_singleDataLength = 0; /* 一秒钟单声道数据长度,单位:字节 */
  41. OneSecondData* m_result = nullptr; /* 存储每秒钟的音量和反相数据 */
  42. // int m_queueAudioDataCapacity = 0; /* 音频数据环形队列的容量,单位:秒 */
  43. /* 存储结果 */
  44. RingQueueManualMutex<OneSecondData*>* m_queueResultData = nullptr; /* 计算结果环形队列,存储每秒钟的音量和反相数据 */
  45. };
  46. #endif // _CREATEDBTHREAD_H_