12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #pragma once
- #include <queue>
- #include <mutex>
- #include <map>
- #include <functional>
- #include <opencv2/opencv.hpp>
- /**************************************************************************************
- 功能点和关键点:
- 1、保存视频帧
- 2、接收音频信号的同步消息,并执行同步
- 3、建立同步帧缓冲区
- 4、给解码模块提供同步后视频帧
- 5、删除视频帧,确定在下一帧已经收到的情况下才可以删除,因为可能要补帧
- 6、音频失步之后处理。
- 7、帧比对都以全景的时间戳和播放时间为基准
- *************************************************************************************/
- class CPacketInfo;
- class CVideoDataManager;
- class AVCodecContext;
- class AVPacket;
- class AVFrame;
- //最大的同步之后的数据包队列
- #define MAX_SYNCOACKET_QUEUE 25
- #define VIDEO_TIME_INTERVAL 40
- class CSyncProc
- {
- public:
- CSyncProc();
- ~CSyncProc();
- CSyncProc(const CSyncProc& proc);
- CSyncProc & operator=(const CSyncProc& proc);
- public:
- typedef std::function<bool()> FunUpdate;
- struct TimeParam
- {
- void * pParam;
- double dTime;
- };
- public:
- static CSyncProc& getInstance();
- void AddFun(void * p, FunUpdate fun);
- bool UpdateTimeQueue(CVideoDataManager * pMan, double dTime);
- //音频同步信号收全后,要对数据包进行对齐。
- static unsigned __stdcall SyncThread(void * param);
- void SyncProcessor();
- bool GetSync()
- {
- return /*true*/ m_bSync;
- }
- //接收到的m_vecPacket数据整理到m_qPacket。
- static unsigned __stdcall RecvDataToSyncDataThread(void * param);
- void RecvDataToSyncDataProcessor();
- void AddDataManager(CVideoDataManager * pMan);
-
- void Start();
- private:
- std::mutex m_lockTime;
- //m_maxInternal单位是s ,音频信号队列收全后,执行m_mapFun函数,对包进行对齐
- double m_maxInternal{ 5};
- std::queue<TimeParam> m_qTimeParam;
- std::map<void*, FunUpdate> m_mapFun;
- bool m_bSync{ false };
- //所有的数据管理对象
- std::mutex m_lockManager;
- std::vector<CVideoDataManager *> m_vecPacketManager;
- };
|