12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #ifndef _ASSIGNSRCDATATHREAD_H_
- #define _ASSIGNSRCDATATHREAD_H_
- #include "BaseRecordThread.h"
- #include <cstdint>
- #include <list>
- #include <QReadWriteLock>
- struct AudioSrcData;
- class RecordThread;
- /**
- * 线程功能:
- * 1、获取小于1s的数据,将其拼接成1s大小的数据,并配上这段数据开始时间(由数据大小推算而来)
- * 2、将拼接好的数据分发给各个数据处理线程,满1秒就分发一次
- */
- class AssignSrcDataThread : public BaseRecordThread
- {
- public:
- AssignSrcDataThread(RecordThreadInfo_t& threadInfo);
- ~AssignSrcDataThread() override;
- /* 设置数据,这里不用 */
- bool setData(const AudioSrcData& srcData) override;
- /* 设置数据,输入小于1秒的数据 */
- bool setSrcData(const char* srcData, int32_t dataSize, QDateTime& endTime);
- protected:
- /* 线程任务函数 */
- void task() override;
- /* 初始化一些数据 */
- bool initData() override;
- /* 清理数据 */
- void clearData() override;
-
- private:
- /* 获取需要分派数据的线程 */
- bool getDispatchThread();
- /* 判断是否满足1秒的数据 */
- bool isFullOneSecondData() const;
- /* 处理数据,将数据分配成1秒的小数据 */
- bool processData();
- /* 发送原始数据到Rtp中,实时发送,有新的就发送 */
- void sendSrcDataToRtp();
- private:
- /* 需要分配数据的线程指针集合 */
- std::list<BaseRecordThread*> m_listDispatchThreads;
- RecordThread* m_pRecordThread = nullptr; /* 录音线程 */
- BaseRecordThread* m_rtpSenderThread = nullptr; /* RTP发送线程 */
- AudioSrcData* m_pSendSrcData = nullptr; /* 已发送的数据,用牌判断是否有新数据了 */
- QReadWriteLock* m_pRwLock = nullptr; /* 读写锁,保护数据的读写 */
- std::list<AudioSrcData*> m_listAudioSrcData; /* 数据缓存列表 */
- int32_t m_listDataSize = 0; /* 缓存中的数据是否满1秒大小 */
- AudioSrcData* m_dispatchSrcData = nullptr; /* 分发的数据,1秒大小 */
- AudioSrcData* m_pCurrentSrcData = nullptr; /* 当前处理的数据 */
- int32_t m_remainingDataSize = 0; /* 当前的AudioSrcData剩余可用数据的大小 */
- };
- #endif // _ASSIGNSRCDATATHREAD_H_
|