123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #ifndef _CREATEDBTHREAD_H_
- #define _CREATEDBTHREAD_H_
- #include "BaseRecordThread.h"
- #include "RingQueue.hpp"
- #include "RingQueueManualMutex.hpp"
- #include "AudioData.h"
- struct AudioSrcData;
- /**
- * 这个功能线程计算出音量的线程,给音量报警线程使用
- *
- */
- class CreateDBThread : public BaseRecordThread
- {
- public:
- CreateDBThread(RecordThreadInfo_t& threadInfo);
- ~CreateDBThread() override;
- /* 设置数据 */
- bool setData(const AudioSrcData& srcData) override;
- /* 设置实时数据 */
- bool setRealTimeData(const AudioSrcData& srcData);
- /* 获取结果的环形队列 */
- RingQueueManualMutex<OneSecondData*>* getResultQueue() { return m_queueResultData; }
- /* 获取最新的结果,根据时间进行对比,最新的时间比传入的晚,就是有新的数据了 */
- bool getLatestResult(OneSecondData& resultData);
- /* 获取最新的结果,让整个环形队列相等 */
- bool getLatestResult(RingQueueManualMutex<OneSecondData*>& resultQueue);
- /* 获取最新的音量包结果,count等于负数是获取所有数据,等于正数,如果暂时没有这么多数据,则返回false */
- bool getLatestRealTimeResult(std::list<OneDBData>& listData, const int getCount);
- /* 获取一个最新音量值 */
- bool getLatestRealTimeResult(OneDBData& resultData);
- private:
- /* 执行任务函数 */
- void task() override;
- /* 初始化一些数据 */
- bool initData() override;
- /* 清理数据 */
- void clearData() override;
- /* 计算音量和反相 */
- bool CreateDBPhase(AudioSrcData* audioData);
- /* 计算实时音量值 */
- bool calculateRealTimeVolume();
- private:
- /* --------------------------- 正常音量值的数据 --------------------------- */
- /* 原始音频数据环形队列 */
- RingQueue<AudioSrcData*> m_queueAudioData;
- /* 计算相关的变量 */
- int m_oneDBLengthOfSrcData = 0; /* 计算一个DB需要的原始音频数据的长度,单位:short */
- int m_singleDataLength = 0; /* 一秒钟单声道数据长度,单位:字节 */
- OneSecondData* m_result = nullptr; /* 存储每秒钟的音量和反相数据 */
- /* 计算结果环形队列,存储每秒钟的音量和反相数据 */
- RingQueueManualMutex<OneSecondData*>* m_queueResultData = nullptr;
- /* --------------------------- 实时音量值的数据 --------------------------- */
- RingQueue<AudioSrcData*> m_queueRealTimeData; /* 存储小于1秒的音频数据,应该是33m的 */
- std::mutex m_mutexRealTimeResult; /* 实时结果的互斥锁 */
- std::list<OneDBData> m_listRealTimeResult; /* 实时音量数据 */
- int m_numMaxResultData = 0; /* 最大实时音量数据的数量 */
- };
- #endif // _CREATEDBTHREAD_H_
|