summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-02-17 18:17:06 +0100
committerLars Knoll <lars.knoll@qt.io>2021-03-05 12:32:45 +0000
commita1f9b691c7960eefed6118b79b66f096094d75b2 (patch)
tree2047f79ff778dd5a7c1b0162e69f29c63a3ac89a /examples
parentf5ae5377805c3541fa19fe6c8001113f36f86bc4 (diff)
Add support for selecting audio/video tracks
Implement this for the gstreamer backend. The API for subtitle tracks is also there, but we do not support displaying those for the moment. Change-Id: Ia561656d63c33ac4ea5d167846d4535820180fb3 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Doris Verria <doris.verria@qt.io>
Diffstat (limited to 'examples')
-rw-r--r--examples/multimediawidgets/player/player.cpp53
-rw-r--r--examples/multimediawidgets/player/player.h9
2 files changed, 62 insertions, 0 deletions
diff --git a/examples/multimediawidgets/player/player.cpp b/examples/multimediawidgets/player/player.cpp
index 6c4df136c..7f7657ce2 100644
--- a/examples/multimediawidgets/player/player.cpp
+++ b/examples/multimediawidgets/player/player.cpp
@@ -91,6 +91,7 @@ Player::Player(QWidget *parent)
connect(m_player, &QMediaPlayer::videoAvailableChanged, this, &Player::videoAvailableChanged);
connect(m_player, QOverload<QMediaPlayer::Error>::of(&QMediaPlayer::error), this, &Player::displayErrorMessage);
connect(m_player, &QMediaPlayer::stateChanged, this, &Player::stateChanged);
+ connect(m_player, &QMediaPlayer::tracksChanged, this, &Player::tracksChanged);
m_playlistView = new QListView(this);
m_playlistView->setModel(m_playlistModel);
@@ -104,6 +105,20 @@ Player::Player(QWidget *parent)
m_labelDuration = new QLabel(this);
connect(m_slider, &QSlider::sliderMoved, this, &Player::seek);
+ m_audioTracks = new QComboBox(this);
+ m_videoTracks = new QComboBox(this);
+ m_subtitleTracks = new QComboBox(this);
+ connect(m_audioTracks, &QComboBox::activated, this, &Player::selectAudioStream);
+ connect(m_videoTracks, &QComboBox::activated, this, &Player::selectVideoStream);
+ connect(m_subtitleTracks, &QComboBox::activated, this, &Player::selectSubtitleStream);
+ QGridLayout *tracksLayout = new QGridLayout;
+ tracksLayout->addWidget(new QLabel(tr("Audio Tracks:"), this), 0, 0);
+ tracksLayout->addWidget(m_audioTracks, 0, 1);
+ tracksLayout->addWidget(new QLabel(tr("Video Tracks:"), this), 1, 0);
+ tracksLayout->addWidget(m_videoTracks, 1, 1);
+ tracksLayout->addWidget(new QLabel(tr("Subtitle Tracks:"), this), 2, 0);
+ tracksLayout->addWidget(m_subtitleTracks, 2, 1);
+
m_labelHistogram = new QLabel(this);
m_labelHistogram->setText("Histogram:");
m_videoHistogram = new HistogramWidget(this);
@@ -201,6 +216,7 @@ Player::Player(QWidget *parent)
hLayout->addWidget(m_labelDuration);
layout->addLayout(hLayout);
layout->addLayout(controlLayout);
+ layout->addLayout(tracksLayout);
layout->addLayout(histogramLayout);
layout->addWidget(metaDataLabel);
layout->addLayout(metaDataLayout);
@@ -326,6 +342,25 @@ void Player::metaDataChanged()
}
}
+void Player::tracksChanged()
+{
+ m_audioTracks->clear();
+ m_videoTracks->clear();
+ m_subtitleTracks->clear();
+
+ const auto audioStreams = m_player->audioTracks();
+ for (int i = 0; i < audioStreams.size(); ++i)
+ m_audioTracks->addItem(audioStreams.at(i).stringValue(QMediaMetaData::Language), i);
+
+ const auto videoStreams = m_player->videoTracks();
+ for (int i = 0; i < videoStreams.size(); ++i)
+ m_videoTracks->addItem(videoStreams.at(i).stringValue(QMediaMetaData::Language), i);
+
+ const auto subtitleStreams = m_player->subtitleTracks();
+ for (int i = 0; i < subtitleStreams.size(); ++i)
+ m_subtitleTracks->addItem(subtitleStreams.at(i).stringValue(QMediaMetaData::Language), i);
+}
+
void Player::previousClicked()
{
// Go to previous track if we are within the first 5 seconds of playback
@@ -429,6 +464,24 @@ void Player::videoAvailableChanged(bool available)
m_colorButton->setEnabled(available);
}
+void Player::selectAudioStream()
+{
+ int stream = m_audioTracks->currentData().toInt();
+ m_player->setActiveAudioTrack(stream);
+}
+
+void Player::selectVideoStream()
+{
+ int stream = m_audioTracks->currentData().toInt();
+ m_player->setActiveVideoTrack(stream);
+}
+
+void Player::selectSubtitleStream()
+{
+ int stream = m_audioTracks->currentData().toInt();
+ m_player->setActiveSubtitleTrack(stream);
+}
+
void Player::setTrackInfo(const QString &info)
{
m_trackInfo = info;
diff --git a/examples/multimediawidgets/player/player.h b/examples/multimediawidgets/player/player.h
index 3944d0f3f..7385d27a9 100644
--- a/examples/multimediawidgets/player/player.h
+++ b/examples/multimediawidgets/player/player.h
@@ -92,6 +92,7 @@ private slots:
void durationChanged(qint64 duration);
void positionChanged(qint64 progress);
void metaDataChanged();
+ void tracksChanged();
void previousClicked();
@@ -104,6 +105,10 @@ private slots:
void bufferingProgress(int progress);
void videoAvailableChanged(bool available);
+ void selectAudioStream();
+ void selectVideoStream();
+ void selectSubtitleStream();
+
void displayErrorMessage();
void showColorDialog();
@@ -129,6 +134,10 @@ private:
QLabel *m_statusLabel = nullptr;
QStatusBar *m_statusBar = nullptr;
+ QComboBox *m_audioTracks = nullptr;
+ QComboBox *m_videoTracks = nullptr;
+ QComboBox *m_subtitleTracks = nullptr;
+
QLabel *m_labelHistogram = nullptr;
HistogramWidget *m_videoHistogram = nullptr;
HistogramWidget *m_audioHistogram = nullptr;