CreateDBThread.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #ifndef _CREATEDBTHREAD_H_
  2. #define _CREATEDBTHREAD_H_
  3. #include "BaseRecordThread.h"
  4. #include "RingQueue.hpp"
  5. #include "RingQueueManualMutex.hpp"
  6. #include "AudioData.h"
  7. struct AudioSrcData;
  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. bool setRealTimeData(const AudioSrcData& srcData);
  21. /* 获取结果的环形队列 */
  22. RingQueueManualMutex<OneSecondData*>* getResultQueue() { return m_queueResultData; }
  23. /* 获取最新的结果,根据时间进行对比,最新的时间比传入的晚,就是有新的数据了 */
  24. bool getLatestResult(OneSecondData& resultData);
  25. /* 获取最新的结果,让整个环形队列相等 */
  26. bool getLatestResult(RingQueueManualMutex<OneSecondData*>& resultQueue);
  27. /* 获取最新的音量包结果,count等于负数是获取所有数据,等于正数,如果暂时没有这么多数据,则返回false */
  28. bool getLatestRealTimeResult(std::list<OneDBData>& listData, int count = -1);
  29. /* 获取一个最新音量值 */
  30. bool getLatestRealTimeResult(OneDBData& resultData);
  31. private:
  32. /* 执行任务函数 */
  33. void task() override;
  34. /* 初始化一些数据 */
  35. bool initData() override;
  36. /* 清理数据 */
  37. void clearData() override;
  38. /* 计算音量和反相 */
  39. bool CreateDBPhase(AudioSrcData* audioData);
  40. /* 计算实时音量值 */
  41. bool calculateRealTimeVolume();
  42. private:
  43. /* --------------------------- 正常音量值的数据 --------------------------- */
  44. /* 原始音频数据环形队列 */
  45. RingQueue<AudioSrcData*> m_queueAudioData;
  46. /* 计算相关的变量 */
  47. int m_oneDBLengthOfSrcData = 0; /* 计算一个DB需要的原始音频数据的长度,单位:short */
  48. int m_singleDataLength = 0; /* 一秒钟单声道数据长度,单位:字节 */
  49. OneSecondData* m_result = nullptr; /* 存储每秒钟的音量和反相数据 */
  50. /* 计算结果环形队列,存储每秒钟的音量和反相数据 */
  51. RingQueueManualMutex<OneSecondData*>* m_queueResultData = nullptr;
  52. /* --------------------------- 正常音量值的数据 --------------------------- */
  53. RingQueue<AudioSrcData*> m_queueRealTimeData; /* 存储小于1秒的音频数据,应该是33m的 */
  54. std::mutex m_mutexRealTimeResult; /* 实时结果的互斥锁 */
  55. std::list<OneDBData> m_listRealTimeResult; /* 实时音量数据 */
  56. };
  57. #endif // _CREATEDBTHREAD_H_