summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorDoris Verria <doris.verria@qt.io>2021-02-15 10:28:53 +0100
committerLars Knoll <lars.knoll@qt.io>2021-03-02 14:50:16 +0000
commit4a6b7816b1f11e00063ee6080141be4d77bca9ac (patch)
treef73ed511fa44773e27c10a47b8517775be4133df /examples
parent2499b994a77c12a4cd55fd79c83708d18f3d896d (diff)
Show metadata for audio/video files in player example
Change-Id: I10748df06e9866c3121015c657b579aa27ac4450 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'examples')
-rw-r--r--examples/multimediawidgets/player/player.cpp53
-rw-r--r--examples/multimediawidgets/player/player.h5
2 files changed, 54 insertions, 4 deletions
diff --git a/examples/multimediawidgets/player/player.cpp b/examples/multimediawidgets/player/player.cpp
index ed04ff75f..60745ffe9 100644
--- a/examples/multimediawidgets/player/player.cpp
+++ b/examples/multimediawidgets/player/player.cpp
@@ -112,6 +112,26 @@ Player::Player(QWidget *parent)
histogramLayout->addWidget(m_videoHistogram, 1);
histogramLayout->addWidget(m_audioHistogram, 2);
+ 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 j = 0; j < 6; j+=2) {
+ m_metaDataLabels[key] = new QLabel(QMediaMetaData::metaDataKeyToString
+ (static_cast<QMediaMetaData::Key>(key)));
+ if (key == QMediaMetaData::ThumbnailImage
+ || key == QMediaMetaData::CoverArtImage)
+ m_metaDataFields[key] = new QLabel;
+ else
+ m_metaDataFields[key] = new QLineEdit;
+ m_metaDataLabels[key]->setDisabled(true);
+ m_metaDataFields[key]->setDisabled(true);
+ metaDataLayout->addWidget(m_metaDataLabels[key], i, j);
+ metaDataLayout->addWidget(m_metaDataFields[key], i, j+1);
+ key++;
+ }
+ }
+
// ### replace by a monitoring outputs once we have them
// m_videoProbe = new QVideoProbe(this);
// connect(m_videoProbe, &QVideoProbe::videoFrameProbed, m_videoHistogram, &HistogramWidget::processFrame);
@@ -179,6 +199,8 @@ Player::Player(QWidget *parent)
layout->addLayout(hLayout);
layout->addLayout(controlLayout);
layout->addLayout(histogramLayout);
+ layout->addWidget(metaDataLabel);
+ layout->addLayout(metaDataLayout);
#if defined(Q_OS_QNX)
// On QNX, the main window doesn't have a title bar (or any other decorations).
// Create a status bar for the status information instead.
@@ -269,9 +291,33 @@ void Player::metaDataChanged()
.arg(metaData.value(QMediaMetaData::AlbumArtist).toString())
.arg(metaData.value(QMediaMetaData::Title).toString()));
- if (m_coverLabel) {
- QImage cover = metaData.value(QMediaMetaData::CoverArtImage).value<QImage>();
- m_coverLabel->setPixmap(QPixmap::fromImage(cover));
+ for (int i = 0; i < QMediaMetaData::NumMetaData; i++) {
+ if (QLineEdit* field = qobject_cast<QLineEdit*>(m_metaDataFields[i]))
+ field->clear();
+ else if (QLabel* label = qobject_cast<QLabel*>(m_metaDataFields[i]))
+ label->clear();
+ m_metaDataFields[i]->setDisabled(true);
+ m_metaDataLabels[i]->setDisabled(true);
+ }
+
+ for (auto &key : metaData.keys()) {
+ int i = int(key);
+ if (key == QMediaMetaData::CoverArtImage) {
+ if (QLabel *cover = qobject_cast<QLabel*>(m_metaDataFields[key])) {
+ QImage coverImage = metaData.value(QMediaMetaData::CoverArtImage).value<QImage>();
+ cover->setPixmap(QPixmap::fromImage(coverImage));
+ }
+ }
+ else if (key == QMediaMetaData::ThumbnailImage) {
+ if (QLabel *thumbnail = qobject_cast<QLabel*>(m_metaDataFields[key])) {
+ QImage thumbnailImage = metaData.value(QMediaMetaData::CoverArtImage).value<QImage>();
+ thumbnail->setPixmap(QPixmap::fromImage(thumbnailImage));
+ }
+ }
+ 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);
}
}
@@ -487,3 +533,4 @@ 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()));
}
+
diff --git a/examples/multimediawidgets/player/player.h b/examples/multimediawidgets/player/player.h
index d95ad6191..3944d0f3f 100644
--- a/examples/multimediawidgets/player/player.h
+++ b/examples/multimediawidgets/player/player.h
@@ -54,6 +54,7 @@
#include <QWidget>
#include <QMediaPlayer>
#include <QMediaPlaylist>
+#include <QMediaMetaData>
QT_BEGIN_NAMESPACE
class QAbstractItemView;
@@ -119,7 +120,6 @@ private:
QMediaPlayer *m_player = nullptr;
QMediaPlaylist *m_playlist = nullptr;
QVideoWidget *m_videoWidget = nullptr;
- QLabel *m_coverLabel = nullptr;
QSlider *m_slider = nullptr;
QLabel *m_labelDuration = nullptr;
QPushButton *m_fullScreenButton = nullptr;
@@ -138,6 +138,9 @@ private:
QString m_trackInfo;
QString m_statusInfo;
qint64 m_duration;
+
+ QWidget *m_metaDataFields[QMediaMetaData::NumMetaData] = {};
+ QLabel *m_metaDataLabels[QMediaMetaData::NumMetaData] = {};
};
#endif // PLAYER_H