1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2017 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the examples of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:BSD$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** BSD License Usage 18 ** Alternatively, you may use this file under the terms of the BSD license 19 ** as follows: 20 ** 21 ** "Redistribution and use in source and binary forms, with or without 22 ** modification, are permitted provided that the following conditions are 23 ** met: 24 ** * Redistributions of source code must retain the above copyright 25 ** notice, this list of conditions and the following disclaimer. 26 ** * Redistributions in binary form must reproduce the above copyright 27 ** notice, this list of conditions and the following disclaimer in 28 ** the documentation and/or other materials provided with the 29 ** distribution. 30 ** * Neither the name of The Qt Company Ltd nor the names of its 31 ** contributors may be used to endorse or promote products derived 32 ** from this software without specific prior written permission. 33 ** 34 ** 35 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 36 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 37 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 38 ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 39 ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 40 ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 41 ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 42 ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 43 ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 44 ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 45 ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." 46 ** 47 ** $QT_END_LICENSE$ 48 ** 49 ****************************************************************************/ 50 51 #ifndef PLAYER_H 52 #define PLAYER_H 53 54 #include <QWidget> 55 #include <QMediaPlayer> 56 #include <QMediaPlaylist> 57 58 QT_BEGIN_NAMESPACE 59 class QAbstractItemView; 60 class QLabel; 61 class QMediaPlayer; 62 class QModelIndex; 63 class QPushButton; 64 class QSlider; 65 class QStatusBar; 66 class QVideoProbe; 67 class QVideoWidget; 68 class QAudioProbe; 69 QT_END_NAMESPACE 70 71 class PlaylistModel; 72 class HistogramWidget; 73 74 class Player : public QWidget 75 { 76 Q_OBJECT 77 78 public: 79 explicit Player(QWidget *parent = nullptr); 80 ~Player(); 81 82 bool isPlayerAvailable() const; 83 84 void addToPlaylist(const QList<QUrl> &urls); 85 void setCustomAudioRole(const QString &role); 86 87 signals: 88 void fullScreenChanged(bool fullScreen); 89 90 private slots: 91 void open(); 92 void durationChanged(qint64 duration); 93 void positionChanged(qint64 progress); 94 void metaDataChanged(); 95 96 void previousClicked(); 97 98 void seek(int seconds); 99 void jump(const QModelIndex &index); 100 void playlistPositionChanged(int); 101 102 void statusChanged(QMediaPlayer::MediaStatus status); 103 void stateChanged(QMediaPlayer::State state); 104 void bufferingProgress(int progress); 105 void videoAvailableChanged(bool available); 106 107 void displayErrorMessage(); 108 109 void showColorDialog(); 110 111 private: 112 void clearHistogram(); 113 void setTrackInfo(const QString &info); 114 void setStatusInfo(const QString &info); 115 void handleCursor(QMediaPlayer::MediaStatus status); 116 void updateDurationInfo(qint64 currentInfo); 117 118 QMediaPlayer *m_player = nullptr; 119 QMediaPlaylist *m_playlist = nullptr; 120 QVideoWidget *m_videoWidget = nullptr; 121 QLabel *m_coverLabel = nullptr; 122 QSlider *m_slider = nullptr; 123 QLabel *m_labelDuration = nullptr; 124 QPushButton *m_fullScreenButton = nullptr; 125 QPushButton *m_colorButton = nullptr; 126 QDialog *m_colorDialog = nullptr; 127 QLabel *m_statusLabel = nullptr; 128 QStatusBar *m_statusBar = nullptr; 129 130 QLabel *m_labelHistogram = nullptr; 131 HistogramWidget *m_videoHistogram = nullptr; 132 HistogramWidget *m_audioHistogram = nullptr; 133 QVideoProbe *m_videoProbe = nullptr; 134 QAudioProbe *m_audioProbe = nullptr; 135 136 PlaylistModel *m_playlistModel = nullptr; 137 QAbstractItemView *m_playlistView = nullptr; 138 QString m_trackInfo; 139 QString m_statusInfo; 140 qint64 m_duration; 141 }; 142 143 #endif // PLAYER_H 144