summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-02-17 17:35:00 +0100
committerLars Knoll <lars.knoll@qt.io>2021-03-02 14:51:13 +0000
commitf5ae5377805c3541fa19fe6c8001113f36f86bc4 (patch)
tree0ad947bedcffa232022b9675cdb904d83d5d22d2 /examples
parent5ae52a8e075e002293a29c238bee4608b6596ee3 (diff)
Implement basic metadata support for QMediaPlayer
Unfortunately, GstDiscover has a crappy API that doesn't allow us to retrieve the data from a running decoder session (we'd be forced to create a separate decoder session just to get the data). So let's do things more manually and parse the topology data from decodebin ourselves. Change-Id: I0aca195265763f838d21df6814d4edfb3aace2d2 Reviewed-by: Doris Verria <doris.verria@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'examples')
-rw-r--r--examples/multimediawidgets/player/player.cpp22
1 files changed, 12 insertions, 10 deletions
diff --git a/examples/multimediawidgets/player/player.cpp b/examples/multimediawidgets/player/player.cpp
index 60745ffe9..6c4df136c 100644
--- a/examples/multimediawidgets/player/player.cpp
+++ b/examples/multimediawidgets/player/player.cpp
@@ -59,6 +59,7 @@
#include <QMediaMetaData>
#include <QMediaDeviceManager>
#include <QAudioDeviceInfo>
+#include <QMediaFormat>
#include <QtWidgets>
Player::Player(QWidget *parent)
@@ -115,7 +116,7 @@ Player::Player(QWidget *parent)
QLabel *metaDataLabel = new QLabel(tr("Metadata for file:"));
QGridLayout *metaDataLayout = new QGridLayout;
int key = QMediaMetaData::Title;
- for (int i = 0; i < 9; i++) {
+ for (int i = 0; i < (QMediaMetaData::NumMetaData + 2)/3; i++) {
for (int j = 0; j < 6; j+=2) {
m_metaDataLabels[key] = new QLabel(QMediaMetaData::metaDataKeyToString
(static_cast<QMediaMetaData::Key>(key)));
@@ -129,6 +130,8 @@ Player::Player(QWidget *parent)
metaDataLayout->addWidget(m_metaDataLabels[key], i, j);
metaDataLayout->addWidget(m_metaDataFields[key], i, j+1);
key++;
+ if (key == QMediaMetaData::NumMetaData)
+ break;
}
}
@@ -303,19 +306,21 @@ void Player::metaDataChanged()
for (auto &key : metaData.keys()) {
int i = int(key);
if (key == QMediaMetaData::CoverArtImage) {
+ QVariant v = metaData.value(key);
if (QLabel *cover = qobject_cast<QLabel*>(m_metaDataFields[key])) {
- QImage coverImage = metaData.value(QMediaMetaData::CoverArtImage).value<QImage>();
+ QImage coverImage = v.value<QImage>();
cover->setPixmap(QPixmap::fromImage(coverImage));
}
- }
- else if (key == QMediaMetaData::ThumbnailImage) {
+ } else if (key == QMediaMetaData::ThumbnailImage) {
+ QVariant v = metaData.value(key);
if (QLabel *thumbnail = qobject_cast<QLabel*>(m_metaDataFields[key])) {
- QImage thumbnailImage = metaData.value(QMediaMetaData::CoverArtImage).value<QImage>();
+ QImage thumbnailImage = v.value<QImage>();
thumbnail->setPixmap(QPixmap::fromImage(thumbnailImage));
}
+ } else if (QLineEdit *field = qobject_cast<QLineEdit*>(m_metaDataFields[key])) {
+ QString stringValue = metaData.stringValue(key);
+ field->setText(stringValue);
}
- else if (QLineEdit *field = qobject_cast<QLineEdit*>(m_metaDataFields[key]))
- field->setText(QString("%1").arg(metaData.value(key).toString()));
m_metaDataFields[i]->setDisabled(false);
m_metaDataLabels[i]->setDisabled(false);
}
@@ -336,7 +341,6 @@ void Player::jump(const QModelIndex &index)
{
if (index.isValid()) {
m_playlist->setCurrentIndex(index.row());
- m_player->play();
}
}
@@ -345,7 +349,6 @@ void Player::playlistPositionChanged(int currentItem)
clearHistogram();
m_playlistView->setCurrentIndex(m_playlistModel->index(currentItem, 0));
m_player->setMedia(m_playlist->currentMedia());
- m_player->play();
}
void Player::seek(int seconds)
@@ -533,4 +536,3 @@ void Player::clearHistogram()
QMetaObject::invokeMethod(m_videoHistogram, "processFrame", Qt::QueuedConnection, Q_ARG(QVideoFrame, QVideoFrame()));
QMetaObject::invokeMethod(m_audioHistogram, "processBuffer", Qt::QueuedConnection, Q_ARG(QAudioBuffer, QAudioBuffer()));
}
-