VideoPlayer.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #ifndef VideoPlayer_H
  2. #define VideoPlayer_H
  3. #include <QWidget>
  4. #include <QThread>
  5. #include <QTimer>
  6. #include <QSemaphore>
  7. #include "globalInfo.h"
  8. class DecodeVedio;
  9. class VideoPlayer : public QWidget
  10. {
  11. Q_OBJECT
  12. public:
  13. explicit VideoPlayer(QWidget *parent = nullptr);
  14. ~VideoPlayer();
  15. void setPlayVedio(const QString& fileName); /* 设置播放视频 */
  16. bool play(); /* 播放视频 */
  17. void pause(); /* 暂停播放 */
  18. void stop(); /* 停止播放 */
  19. bool getPlayStatus() { return m_playStatus; } /* 获取播放状态 */
  20. qint64 getDuration(); /* 获取视频时长 */
  21. qint64 getCurrentPos(); /* 获取当前播放位置 */
  22. void setCurrentPos(quint64 pos); /* 设置当前播放位置 */
  23. void setPlayVedioSize(int width,int height); /* 设置播放视频大小 */
  24. void setPlayCallBack(std::function<Play_CallBack> playCallBack,void* context); /* 设置播放回调函数 */
  25. protected:
  26. void paintEvent(QPaintEvent *event) override;
  27. void resizeEvent(QResizeEvent *event) override;
  28. void refreshOneUIUntilHave(); /* 刷新一张图片,直到有图片为止 */
  29. /* 双击事件函数 */
  30. void mouseDoubleClickEvent(QMouseEvent *event) override;
  31. private slots:
  32. void do_refreshUI(); /* 取出画面,刷新UI */
  33. void do_refreshOneUI(); /* 通过信号刷新第一张图片 */
  34. void do_playCompleted(); /* 播放完成 */
  35. private:
  36. QString m_fileName;
  37. QTimer m_timerRefreshUI; /* 定时器,用于刷新界面 */
  38. int m_srcWidth = 0; /* 图片原本大小 */
  39. int m_srcHeight = 0;
  40. int m_nowWidth = 0; /* 现在大小 */
  41. int m_nowHeight = 0;
  42. int m_frameCount = 0; /* 帧数 */
  43. int m_interval = 0; /* 间隔 */
  44. DecodeVedio* m_decodeVedio = nullptr;
  45. QThread* m_threadDecode = nullptr; /* 解码器所在的线程 */
  46. QImage* m_image = nullptr; /* 画面 */
  47. bool m_playStatus = false; /* 是否正在播放 */
  48. bool isSetVedioFile = false; /* 是否设置了视频文件 */
  49. QSemaphore* m_semRefresh = nullptr; /* 刷新信号量 */
  50. std::function<Play_CallBack> m_funcPlayCB = nullptr; /* 播放回调函数 */
  51. void* m_context = nullptr; /* 上下文 */
  52. };
  53. #endif /* VideoPlayer_H */