diff options
Diffstat (limited to 'examples/multimediawidgets/player/player.cpp')
-rw-r--r-- | examples/multimediawidgets/player/player.cpp | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/examples/multimediawidgets/player/player.cpp b/examples/multimediawidgets/player/player.cpp index ab048838a..8f291c501 100644 --- a/examples/multimediawidgets/player/player.cpp +++ b/examples/multimediawidgets/player/player.cpp @@ -47,6 +47,7 @@ #include <QMediaService> #include <QMediaPlaylist> #include <QVideoProbe> +#include <QAudioProbe> #include <QMediaMetaData> #include <QtWidgets> @@ -73,6 +74,7 @@ Player::Player(QWidget *parent) connect(player, SIGNAL(bufferStatusChanged(int)), this, SLOT(bufferingProgress(int))); connect(player, SIGNAL(videoAvailableChanged(bool)), this, SLOT(videoAvailableChanged(bool))); connect(player, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(displayErrorMessage())); + connect(player, &QMediaPlayer::stateChanged, this, &Player::stateChanged); //! [2] videoWidget = new VideoWidget(this); @@ -96,14 +98,20 @@ Player::Player(QWidget *parent) labelHistogram = new QLabel(this); labelHistogram->setText("Histogram:"); - histogram = new HistogramWidget(this); + videoHistogram = new HistogramWidget(this); + audioHistogram = new HistogramWidget(this); QHBoxLayout *histogramLayout = new QHBoxLayout; histogramLayout->addWidget(labelHistogram); - histogramLayout->addWidget(histogram, 1); + histogramLayout->addWidget(videoHistogram, 1); + histogramLayout->addWidget(audioHistogram, 2); - probe = new QVideoProbe(this); - connect(probe, SIGNAL(videoFrameProbed(QVideoFrame)), histogram, SLOT(processFrame(QVideoFrame))); - probe->setSource(player); + videoProbe = new QVideoProbe(this); + connect(videoProbe, SIGNAL(videoFrameProbed(QVideoFrame)), videoHistogram, SLOT(processFrame(QVideoFrame))); + videoProbe->setSource(player); + + audioProbe = new QAudioProbe(this); + connect(audioProbe, SIGNAL(audioBufferProbed(QAudioBuffer)), audioHistogram, SLOT(processBuffer(QAudioBuffer))); + audioProbe->setSource(player); QPushButton *openButton = new QPushButton(tr("Open"), this); @@ -269,6 +277,7 @@ void Player::jump(const QModelIndex &index) void Player::playlistPositionChanged(int currentItem) { + clearHistogram(); playlistView->setCurrentIndex(playlistModel->index(currentItem, 0)); } @@ -305,6 +314,12 @@ void Player::statusChanged(QMediaPlayer::MediaStatus status) } } +void Player::stateChanged(QMediaPlayer::State state) +{ + if (state == QMediaPlayer::StoppedState) + clearHistogram(); +} + void Player::handleCursor(QMediaPlayer::MediaStatus status) { #ifndef QT_NO_CURSOR @@ -423,3 +438,9 @@ void Player::showColorDialog() } colorDialog->show(); } + +void Player::clearHistogram() +{ + QMetaObject::invokeMethod(videoHistogram, "processFrame", Qt::QueuedConnection, Q_ARG(QVideoFrame, QVideoFrame())); + QMetaObject::invokeMethod(audioHistogram, "processBuffer", Qt::QueuedConnection, Q_ARG(QAudioBuffer, QAudioBuffer())); +} |