12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #ifndef _CREATEDBTHREAD_H_
- #define _CREATEDBTHREAD_H_
- #include "BaseRecordThread.h"
- #include "RingQueue.hpp"
- #include "RingQueueManualMutex.hpp"
- class AudioSrcData;
- class OneSecondData;
- /**
- * @brief 这个功能线程计算出音量值和反相,给其他线程使用
- *
- */
- class CreateDBThread : public BaseRecordThread
- {
- public:
- CreateDBThread(RecordThreadInfo_t& threadInfo);
- ~CreateDBThread() override;
- /* 计算音量和反相的线程函数 */
- void threadTask() override;
- /* 设置数据 */
- bool setData(const AudioSrcData& srcData) override;
- /* 获取结果的环形队列 */
- RingQueueManualMutex<OneSecondData*>* getResultQueue() { return m_queueResultData; }
- /* 获取最新的结果,根据时间进行对比,最新的时间比传入的晚,就是有新的数据了 */
- bool getLatestResult(OneSecondData& resultData);
- /* 获取最新的结果,让整个环形队列相等 */
- bool getLatestResult(RingQueueManualMutex<OneSecondData*>& resultQueue);
- private:
- /* 初始化一些数据 */
- bool initData() override;
- /* 清理数据 */
- void clearData() override;
- /* 计算音量和反相 */
- bool CreateDBPhase(AudioSrcData* audioData, OneSecondData* resultData);
- private:
- /* 原始音频数据环形队列 */
- RingQueue<AudioSrcData*> m_queueAudioData;
- // AudioSrcData* m_remainData = nullptr; /* 不满一个队列元素的剩余数据,使用AudioSrcData来存储,方便管理 */
- /* 计算相关的变量 */
- int m_oneDBLengthOfSrcData = 0; /* 计算一个DB需要的原始音频数据的长度,双通道的长度,单位:short */
- int m_singleDataLength = 0; /* 一秒钟单声道数据长度,单位:字节 */
- OneSecondData* m_result = nullptr; /* 存储每秒钟的音量和反相数据 */
- int m_queueAudioDataCapacity = 0; /* 音频数据环形队列的容量,单位:秒 */
- /* 存储结果 */
- RingQueueManualMutex<OneSecondData*>* m_queueResultData = nullptr; /* 计算结果环形队列,存储每秒钟的音量和反相数据 */
- };
- #endif // _CREATEDBTHREAD_H_
|