mainwindowa.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. #ifndef AVPLAYER2_MAINWINDOWA_H
  2. #define AVPLAYER2_MAINWINDOWA_H
  3. #pragma once
  4. #include <QActionGroup>
  5. #include <QElapsedTimer>
  6. #include <QFileDialog>
  7. #include <QMainWindow>
  8. #include <QMessageBox>
  9. #include <QMimeData>
  10. #include <QMouseEvent>
  11. #include <QMutex>
  12. #include <QSettings>
  13. #include <QSizePolicy>
  14. #include <QThread>
  15. #include <QTimer>
  16. #include "app_settings.h"
  17. #include "audio_effect_gl.h"
  18. #include "network_url_dlg.h"
  19. #include "play_control_window.h"
  20. #include "playercontroller.h"
  21. #include "playlist_window.h"
  22. // #include "read_thread.h"
  23. // #include "start_play_thread.h"
  24. // #include "stopplay_waiting_thread.h"
  25. // #include "subtitle_decode_thread.h"
  26. // #include "video_decode_thread.h"
  27. // #include "audio_decode_thread.h"
  28. // #include "audio_play_thread.h"
  29. // #include "video_play_thread.h"
  30. // #include "video_state.h"
  31. QT_BEGIN_NAMESPACE
  32. namespace Ui {
  33. class MainWindowA;
  34. }
  35. QT_END_NAMESPACE
  36. class OpenGLVideoWidget;
  37. #define MaxRecentFiles 20 // maximum recent play files
  38. #define MaxSkinStlyes 20 // maximum sytyles
  39. #define MaxPlaylist 5 // maximum playlist numbers
  40. class MainWindowA : public QMainWindow
  41. {
  42. Q_OBJECT
  43. public:
  44. explicit MainWindowA(QWidget* parent = Q_NULLPTR);
  45. ~MainWindowA();
  46. public:
  47. float volume_settings(bool set = true, float vol = 0);
  48. void play_mute(bool mute);
  49. void play_seek();
  50. void play_start_seek();
  51. void set_volume(int volume);
  52. void set_play_speed();
  53. void show_msg_dlg(const QString& message,
  54. const QString& windowTitle = "Warning",
  55. const QString& styleSheet = "");
  56. QString get_playingfile() const;
  57. void show_fullscreen(bool bFullscreen = true);
  58. PlayerController* m_playerController;
  59. public slots:
  60. void frameReady(AVFrame*);
  61. void subtitle_ready(const QString&);
  62. void audio_data(const AudioData& data);
  63. void open_recentFile();
  64. void clear_recentfiles();
  65. void update_play_time();
  66. void play_failed(const QString& file);
  67. void playlist_file_saved(const QString& file);
  68. signals:
  69. // 删除所有与底层线程相关的信号
  70. private:
  71. void keyPressEvent(QKeyEvent* event) override;
  72. void resizeEvent(QResizeEvent* event) override;
  73. void moveEvent(QMoveEvent* event) override;
  74. bool eventFilter(QObject* obj, QEvent* event) override;
  75. void dropEvent(QDropEvent* event) override;
  76. void dragEnterEvent(QDragEnterEvent* event) override;
  77. private slots:
  78. void on_actionOpen_triggered();
  79. void on_actionQuit_triggered();
  80. void on_actionHelp_triggered();
  81. void on_actionAbout_triggered();
  82. void on_actionStop_triggered();
  83. void on_actionFullscreen_triggered();
  84. void on_actionHide_Play_Ctronl_triggered();
  85. void on_actionAspect_Ratio_triggered();
  86. void on_actionLoop_Play_triggered();
  87. void on_actionMedia_Info_triggered();
  88. void on_actionKeyboard_Usage_triggered();
  89. void on_actionPlayList_triggered();
  90. void on_actionOpenNetworkUrl_triggered();
  91. void on_actionOriginalSize_triggered();
  92. void onCvActionToggled();
  93. void onShowMessage(const QString& message,
  94. const QString& windowTitle,
  95. const QString& styleSheet);
  96. void onRequestFullscreen(bool bFullscreen);
  97. void onRequestHideStatusBar(bool bHide);
  98. private:
  99. void print_decodeContext(const AVCodecContext* pVideo, bool bVideo = true) const;
  100. void about_media_info();
  101. void center_window(QRect screen_rec);
  102. bool label_fullscreen();
  103. void hide_statusbar(bool bHide = true);
  104. void hide_menubar(bool bHide = true);
  105. void check_hide_menubar(const QPoint& pt);
  106. void check_hide_play_control();
  107. void auto_hide_play_control(bool bHide = true);
  108. void displayStatusMessage(const QString& message);
  109. void hide_play_control(bool bHide = true);
  110. void set_paly_control_wnd(bool set = true);
  111. void update_paly_control_volume();
  112. void update_paly_control_status();
  113. void update_paly_control_muted();
  114. void print_size() const;
  115. void print_screen() const;
  116. void create_style_menu();
  117. inline QScreen* screen() const;
  118. QRect screen_rect() const;
  119. qreal screen_scale() const;
  120. QSize display_video_size(AVCodecContext* pCtxVideo) const;
  121. inline OpenGLVideoWidget* get_video_widget() const { return m_video_widget.get(); }
  122. inline PlayControlWnd* get_play_control() const { return m_play_control_wnd.get(); }
  123. inline QObject* get_object(const QString& name) const { return findChild<QObject*>(name); }
  124. void create_play_control();
  125. void update_play_control();
  126. void set_volume_updown(bool bUp = true, float unit = 0.05);
  127. void create_recentfiles_menu();
  128. void set_current_file(const QString& fileName);
  129. void remove_recentfiles(const QString& fileName);
  130. void update_recentfile_actions();
  131. QString stripped_name(const QString& fullFileName) const;
  132. void save_settings();
  133. void read_settings();
  134. QString get_selected_style() const;
  135. void set_style_action(const QString& style);
  136. void clear_subtitle_str();
  137. void set_subtitle(const QString& str);
  138. void create_cv_action_group();
  139. void play_speed_adjust(bool up = true);
  140. void create_video_label();
  141. void update_video_label();
  142. void create_audio_effect();
  143. void show_audio_effect(bool bShow = true);
  144. void play_control_key(Qt::Key key);
  145. void update_menus();
  146. void enable_menus(bool enable = true);
  147. void enable_v_menus(bool enable = true);
  148. void enable_a_menus(bool enable = true);
  149. bool get_avisual_format(BarHelper::VisualFormat& fmt) const;
  150. void popup_audio_effect();
  151. void set_audio_effect_format(const BarHelper::VisualFormat& fmt);
  152. void create_playlist_wnd();
  153. void add_to_playlist(const QString& file);
  154. void show_playlist(bool show = true);
  155. void playlist_hiden();
  156. void hide_cursor(bool bHide = true);
  157. bool cursor_in_window(QWidget* pWnd);
  158. void create_savedPlaylists_menu();
  159. void remove_playlist_file(const QString& fileName);
  160. void update_savedPlaylists_actions();
  161. bool read_playlist(const QString& playlist_file, QStringList& files) const;
  162. public slots:
  163. void clear_savedPlaylists();
  164. void open_playlist();
  165. private:
  166. // 新增:菜单栏、菜单、Action、状态栏、中央控件等成员变量
  167. QMenuBar* m_menuBar = nullptr;
  168. QMenu* m_menuFile = nullptr;
  169. QMenu* m_menuRecentFiles = nullptr;
  170. QMenu* m_menuSavedPlaylist = nullptr;
  171. QMenu* m_menuCV = nullptr;
  172. QMenu* m_menuStyle = nullptr;
  173. QMenu* m_menuAudioVisualize = nullptr;
  174. QMenu* m_menuHelp = nullptr;
  175. QAction* m_actionOpen = nullptr;
  176. QAction* m_actionQuit = nullptr;
  177. QAction* m_actionHelp = nullptr;
  178. QAction* m_actionAbout = nullptr;
  179. QAction* m_actionAbout_QT = nullptr;
  180. QAction* m_actionStop = nullptr;
  181. QAction* m_actionFullscreen = nullptr;
  182. QAction* m_actionHide_Play_Ctronl = nullptr;
  183. QAction* m_actionAspect_Ratio = nullptr;
  184. QAction* m_actionLoop_Play = nullptr;
  185. QAction* m_actionMedia_Info = nullptr;
  186. QAction* m_actionKeyboard_Usage = nullptr;
  187. QAction* m_actionPlayList = nullptr;
  188. QAction* m_actionOpenNetworkUrl = nullptr;
  189. QAction* m_actionOriginalSize = nullptr;
  190. QAction* m_actionHardware_decode = nullptr;
  191. QAction* m_actionSampling = nullptr;
  192. QAction* m_actionFrequency = nullptr;
  193. QAction* m_actionLine = nullptr;
  194. QAction* m_actionBar = nullptr;
  195. QAction* m_actionPie = nullptr;
  196. QAction* m_actionRemoveCV = nullptr;
  197. QAction* m_actionRotate = nullptr;
  198. QAction* m_actionRepeat = nullptr;
  199. QAction* m_actionEqualizeHist = nullptr;
  200. QAction* m_actionThreshold = nullptr;
  201. QAction* m_actionThreshold_Adaptive = nullptr;
  202. QAction* m_actionReverse = nullptr;
  203. QAction* m_actionColorReduce = nullptr;
  204. QAction* m_actionGamma = nullptr;
  205. QAction* m_actionContrastBright = nullptr;
  206. QAction* m_actionCanny = nullptr;
  207. QAction* m_actionBlur = nullptr;
  208. QAction* m_actionSobel = nullptr;
  209. QAction* m_actionLaplacian = nullptr;
  210. QAction* m_actionScharr = nullptr;
  211. QAction* m_actionPrewitt = nullptr;
  212. QAction* m_actionTest_CV = nullptr;
  213. QAction* m_actionGrayscale = nullptr;
  214. QAction* m_actionMirro = nullptr;
  215. QAction* m_actionTransform = nullptr;
  216. QStatusBar* m_statusBar = nullptr;
  217. QWidget* m_centralWidget = nullptr;
  218. QString m_videoFile;
  219. QTimer m_timer; // mouse moving checking timer
  220. AppSettings m_settings;
  221. QString m_subtitle;
  222. std::unique_ptr<OpenGLVideoWidget> m_video_widget;
  223. std::unique_ptr<PlayControlWnd> m_play_control_wnd;
  224. std::unique_ptr<AudioEffectGL> m_audio_effect_wnd;
  225. std::unique_ptr<PlayListWnd> m_playListWnd;
  226. std::unique_ptr<QAction> m_recentFileActs[MaxRecentFiles];
  227. std::unique_ptr<QAction> m_recentClear;
  228. QActionGroup* m_CvActsGroup; // cv menus group
  229. QActionGroup* m_AVisualTypeActsGroup;
  230. QActionGroup* m_AVisualGrapicTypeActsGroup;
  231. std::unique_ptr<QAction> m_savedPlaylists[MaxPlaylist];
  232. std::unique_ptr<QAction> m_PlaylistsClear;
  233. };
  234. #endif // AVPLAYER2_MAINWINDOWA_H