#ifndef VideoPlayer_H #define VideoPlayer_H #include #include #include #include #include "globalInfo.h" class DecodeVedio; class VideoPlayer : public QWidget { Q_OBJECT public: explicit VideoPlayer(QWidget *parent = nullptr); ~VideoPlayer(); void setPlayVedio(const QString& fileName); /* 设置播放视频 */ bool play(); /* 播放视频 */ void pause(); /* 暂停播放 */ void stop(); /* 停止播放 */ bool getPlayStatus() { return m_playStatus; } /* 获取播放状态 */ qint64 getDuration(); /* 获取视频时长 */ qint64 getCurrentPos(); /* 获取当前播放位置 */ void setCurrentPos(quint64 pos); /* 设置当前播放位置 */ void setPlayVedioSize(int width,int height); /* 设置播放视频大小 */ void setPlayCallBack(std::function playCallBack,void* context); /* 设置播放回调函数 */ protected: void paintEvent(QPaintEvent *event) override; void resizeEvent(QResizeEvent *event) override; void refreshOneUIUntilHave(); /* 刷新一张图片,直到有图片为止 */ /* 双击事件函数 */ void mouseDoubleClickEvent(QMouseEvent *event) override; private slots: void do_refreshUI(); /* 取出画面,刷新UI */ void do_refreshOneUI(); /* 通过信号刷新第一张图片 */ void do_playCompleted(); /* 播放完成 */ private: QString m_fileName; QTimer m_timerRefreshUI; /* 定时器,用于刷新界面 */ int m_srcWidth = 0; /* 图片原本大小 */ int m_srcHeight = 0; int m_nowWidth = 0; /* 现在大小 */ int m_nowHeight = 0; int m_frameCount = 0; /* 帧数 */ int m_interval = 0; /* 间隔 */ DecodeVedio* m_decodeVedio = nullptr; QThread* m_threadDecode = nullptr; /* 解码器所在的线程 */ QImage* m_image = nullptr; /* 画面 */ bool m_playStatus = false; /* 是否正在播放 */ bool isSetVedioFile = false; /* 是否设置了视频文件 */ QSemaphore* m_semRefresh = nullptr; /* 刷新信号量 */ std::function m_funcPlayCB = nullptr; /* 播放回调函数 */ void* m_context = nullptr; /* 上下文 */ }; #endif /* VideoPlayer_H */