diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-02-17 18:17:06 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-03-05 12:32:45 +0000 |
commit | a1f9b691c7960eefed6118b79b66f096094d75b2 (patch) | |
tree | 2047f79ff778dd5a7c1b0162e69f29c63a3ac89a /examples | |
parent | f5ae5377805c3541fa19fe6c8001113f36f86bc4 (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.cpp | 53 | ||||
-rw-r--r-- | examples/multimediawidgets/player/player.h | 9 |
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; |