CalculateDBThread.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #ifndef _CALCULATEDBTHREAD_H_
  2. #define _CALCULATEDBTHREAD_H_
  3. #include "AudioData.h"
  4. #include "BaseCalculateThread.h"
  5. #include "CreateDBThread.h"
  6. #include "SendStruct.h"
  7. #include "CalculateAudio.h"
  8. #include "AlarmInfo.h"
  9. #include "CompareResult.h"
  10. /**
  11. * 这个线程类进行静音、过载和反相等报警的计算,这个线程和对比项相关,需要对比项中的参数,由对比项线程创建
  12. * 1、计算静音、过载和反相
  13. * 2、将报警结果得出的报警信息发送给写数据库线程,写入到数据库中
  14. * 3、将报警结果发送给截取报警文件的线程,截取出报警时间段的音频文件
  15. * 线程输出结果
  16. * 1、静音报警信息
  17. * 2、过载报警信息
  18. * 3、反相报警信息
  19. * 4、音量包信息
  20. */
  21. class CalculateDBThread : public BaseCalculateThread
  22. {
  23. public:
  24. CalculateDBThread(CalculateThreadInfo_t& threadInfo);
  25. ~CalculateDBThread() override;
  26. /* 获取线程通道信息 */
  27. CompareItemRoadInfo_t getRoadInfo() const { return m_roadInfo; }
  28. /* 获取结果,这个线程计算出静音、过载、反相和音量包信息 */
  29. OneRoadVolume_t getVolumeInfo();
  30. /* 获取最新的结果 */
  31. bool getlastVolumeInfo(OneRoadVolume_t& volumeInfo);
  32. /* 获取报警数据 */
  33. const AlarmInfo_t& getAlarm(EAlarmType alarmType);
  34. protected:
  35. /* 线程功能函数 */
  36. void task() override;
  37. /* 初始化数据 */
  38. bool initData() override;
  39. /* 清理数据 */
  40. void clearData() override;
  41. private:
  42. /* 计算静音过载反相 */
  43. void calcuDBPhase();
  44. /* 判断是否报警 */
  45. void processAlarm();
  46. /* 处理静音报警 */
  47. void processSilence();
  48. /* 处理过载报警 */
  49. void processOverload();
  50. /* 处理反相报警 */
  51. void processPhase();
  52. /* 生成报警文件路径 */
  53. std::string generateAlarmFilePath(const AlarmInfo_t& alarmInfo);
  54. private:
  55. /* 录音通道信息 */
  56. CompareItemRoadInfo_t m_roadInfo; /* 录音通道编号,带有对比项信息 */
  57. std::string m_roadName; /* 录音通道名称 */
  58. /* 计算结果 */
  59. std::mutex m_mutexVolumeInfo; /* 保护音量信息的互斥锁 */
  60. OneRoadVolume_t m_roadVolumeInfo; /* 一个录音通道的音量信息这个是计算结果 */
  61. /* 生成音量的线程 */
  62. CreateDBThread* m_threadCreateDBPhase = nullptr; /* 生成音量的线程 */
  63. OneSecondData m_currSecondData; /* 最新一秒的数据 */
  64. StVolumeParam m_volumeParam; /* 音量计算的参数 */
  65. int32_t m_numQueueSeconds = 0; /* 队列元素数目,单位:秒 */
  66. CaculateDBData m_caculateDBData; /* 计算音量的环形队列类 */
  67. bool m_bLastReversed = false; /* 上一次的反相状态 */
  68. bool m_bLastOverload = false; /* 上一次的过载状态 */
  69. /* 计算需要的相关参数 */
  70. int32_t m_avgCalculateDBSeconds = 0; /* 计算平均音量需要的秒数 */
  71. int m_silentStartPos = -1; /* 静音开始位置 */
  72. int m_silentEndPos = -1; /* 静音结束位置 */
  73. int m_overloadStartPos = -1; /* 过载开始位置 */
  74. int m_overloadEndPos = -1; /* 过载结束位置 */
  75. int m_phaseStartPos = -1; /* 反相开始位置 */
  76. int m_phaseEndPos = -1; /* 反相结束位置 */
  77. AlarmInfo_t m_alarmSilence; /* 静音报警信息 */
  78. AlarmInfo_t m_alarmOverload; /* 过载报警信息 */
  79. AlarmInfo_t m_alarmPhase; /* 反相报警信息 */
  80. AlarmInfo_t m_alarmLastSilence; /* 上一次静音报警信息 */
  81. AlarmInfo_t m_alarmLastOverload; /* 上一次过载报警信息 */
  82. AlarmInfo_t m_alarmLastPhase; /* 上一次反相报警信息 */
  83. AlarmInfo_t m_alarmNull; /* 空报警信息 */
  84. };
  85. #endif // _CALCULATEDBTHREAD_H_