#ifndef CAMERAPLAYER_H #define CAMERAPLAYER_H #include #include #include "PlayM4.h" #include "HCNetSDK.h" #include "RingQueue.hpp" #include "PlayerGlobalInfo.h" #include "PlayerGLWidget.h" /** * @brief 登录设备返回的设备信息 * */ struct CameraInfo { quint32 AChannelNum; /* 模拟通道个数,貌似就是最大模拟通道个数 */ quint32 AChannelStart; /* 模拟起始通道号 */ quint32 DChannelNum; /* 数字通道个数,貌似就是最大模拟通道个数 */ quint32 DChannelStart; /* 数字起始通道号 */ }; class CameraPlayer : public QObject { Q_OBJECT public: explicit CameraPlayer(QObject *parent = nullptr); ~CameraPlayer(); /* 设置摄像机信息 */ bool initCamera(QString cameraIP, int cameraPort, QString cameraUser, QString cameraPwd); /* 设置实时预览 */ bool realPlay(int channel); /* 关闭预览 */ void stopRealPlay(); /* 开始播放预览 */ void startPlay(); /* 设置播放窗口父指针 */ void setPlayerParent(QWidget* playWnd); /* 设置播放窗口大小 */ void setPlayWndSize(int width, int height); /* 获取播放窗口指针 */ QWidget* getPlayWnd() { return m_player; } private slots: /* 更新一帧数据 */ void do_updateFrame(); private: /* 异常回调函数 */ static void exceptionCallBack(unsigned int type, int userID,int handle,void* user); /* 实时预览回调函数 */ static void realDataCallBack(LONG realHandle, DWORD dataType, BYTE *pBuffer,DWORD bufSize,void* user); /* 标准数据流的预览回调函数 */ static void realDataCallBackStandard(LONG realHandle, DWORD dataType, BYTE *pBuffer,DWORD bufSize,DWORD user); /* 解码回调函数 */ static void DecCallBack(int nPort,char * pBuf,int nSize,FRAME_INFO * pFrameInfo, void* nUser,int nReserved2); /* YV12转RGB888 */ static void YV12ToRGB888(unsigned char *pYV12Data, unsigned char *pRGB24Data, int width, int height); /* YV12转YUV */ static void YV12ToYUV420(unsigned char *pYV12Data, Image_YUV420& yuvData, int width, int height); private: int m_sdkVersion = 3; /* SDK版本,这个版本自己定义的,为了区分不同的接口函数 */ LONG m_loginID; /* 登陆返回的用户ID,后续对摄像头的操作都需要这个ID */ CameraInfo m_camInfo; /* 登陆上的设备信息 */ LONG m_realPlayHandle = -1; /* 实时预览句柄 */ LONG m_playPort = -1; /* 全局的播放库port号 */ int m_frameRate = 0; /* 帧率 */ RingQueue* m_yuvQueue = nullptr; /* 环形队列,存放YUV数据 */ QTimer m_frameTimer; /* 定时器,用于更新一帧数据 */ PlayerGLWidget* m_player = nullptr; /* 播放窗口 */ }; #endif // CAMERAPLAYER_H