1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #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, int count = -1);
- /* 获取一个最新音量值 */
- 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; /* 实时音量数据 */
- };
- #endif // _CREATEDBTHREAD_H_
|