diff options
10 files changed, 33 insertions, 37 deletions
diff --git a/examples/multimediawidgets/camera/camera.cpp b/examples/multimediawidgets/camera/camera.cpp index 580d7c390..f9a37216c 100644 --- a/examples/multimediawidgets/camera/camera.cpp +++ b/examples/multimediawidgets/camera/camera.cpp @@ -296,19 +296,19 @@ void Camera::updateRecorderState(QMediaEncoder::State state) ui->recordButton->setEnabled(true); ui->pauseButton->setEnabled(true); ui->stopButton->setEnabled(false); - ui->metaDataButton->setEnabled(false); + ui->metaDataButton->setEnabled(true); break; case QMediaEncoder::PausedState: ui->recordButton->setEnabled(true); ui->pauseButton->setEnabled(false); ui->stopButton->setEnabled(true); - ui->metaDataButton->setEnabled(true); + ui->metaDataButton->setEnabled(false); break; case QMediaEncoder::RecordingState: ui->recordButton->setEnabled(false); ui->pauseButton->setEnabled(true); ui->stopButton->setEnabled(true); - ui->metaDataButton->setEnabled(true); + ui->metaDataButton->setEnabled(false); break; } } @@ -408,6 +408,10 @@ void Camera::saveMetaData() QImage thumbnail(val); data.insert(key, thumbnail); } + else if (i == QMediaMetaData::Date) { + QDateTime date = QDateTime::fromString(val); + data.insert(key, date); + } else { data.insert(key, val); } diff --git a/examples/multimediawidgets/camera/metadatadialog.cpp b/examples/multimediawidgets/camera/metadatadialog.cpp index e0df6ba57..28d8db035 100644 --- a/examples/multimediawidgets/camera/metadatadialog.cpp +++ b/examples/multimediawidgets/camera/metadatadialog.cpp @@ -83,8 +83,8 @@ MetaDataDialog::MetaDataDialog(QWidget *parent) m_metaDataFields[key]->setText(tr("Qt Camera Example")); else if (key == QMediaMetaData::Author) m_metaDataFields[key]->setText(tr("The Qt Company")); - else if (key == QMediaMetaData::Year) - m_metaDataFields[key]->setText("2020"); + else if (key == QMediaMetaData::Date) + m_metaDataFields[key]->setText(QDateTime::currentDateTime().toString()); else if (key == QMediaMetaData::Date) m_metaDataFields[key]->setText(QDate::currentDate().toString()); metaDataLayout->addRow(label, m_metaDataFields[key]); diff --git a/src/imports/multimedia/qdeclarativemediametadata_p.h b/src/imports/multimedia/qdeclarativemediametadata_p.h index 3ed7f49de..91b609b4c 100644 --- a/src/imports/multimedia/qdeclarativemediametadata_p.h +++ b/src/imports/multimedia/qdeclarativemediametadata_p.h @@ -67,7 +67,6 @@ class QDeclarativeMediaMetaData : public QObject Q_PROPERTY(QVariant description READ description WRITE setDescription NOTIFY metaDataChanged) // Q_PROPERTY(QVariant category READ category WRITE setCategory NOTIFY metaDataChanged) Q_PROPERTY(QVariant genre READ genre WRITE setGenre NOTIFY metaDataChanged) - Q_PROPERTY(QVariant year READ year WRITE setYear NOTIFY metaDataChanged) Q_PROPERTY(QVariant date READ date WRITE setDate NOTIFY metaDataChanged) // Q_PROPERTY(QVariant userRating READ userRating WRITE setUserRating NOTIFY metaDataChanged) // Q_PROPERTY(QVariant keywords READ keywords WRITE setKeywords NOTIFY metaDataChanged) @@ -178,8 +177,6 @@ public: setMetaData(QMediaMetaData::Description, description); } QVariant genre() const { return metaData.value(QMediaMetaData::Genre); } void setGenre(const QVariant &genre) { setMetaData(QMediaMetaData::Genre, genre); } - QVariant year() const { return metaData.value(QMediaMetaData::Year); } - void setYear(const QVariant &year) { setMetaData(QMediaMetaData::Year, year); } QVariant date() const { return metaData.value(QMediaMetaData::Date); } void setDate(const QVariant &date) { setMetaData(QMediaMetaData::Date, date); } // QVariant userRating() const { return metaData.value(QMediaMetaData::UserRating); } diff --git a/src/multimedia/platform/android/mediaplayer/qandroidmetadata.cpp b/src/multimedia/platform/android/mediaplayer/qandroidmetadata.cpp index e086ba1b4..5fd3a91f4 100644 --- a/src/multimedia/platform/android/mediaplayer/qandroidmetadata.cpp +++ b/src/multimedia/platform/android/mediaplayer/qandroidmetadata.cpp @@ -156,9 +156,6 @@ QMediaMetaData QAndroidMetaData::extractMetadata(const QUrl &url) // if (!string.isNull()) // metadata.insert(QMediaMetaData::Writer, string.split('/', Qt::SkipEmptyParts)); - string = retriever.extractMetadata(AndroidMediaMetadataRetriever::Year); - if (!string.isNull()) - metadata.insert(QMediaMetaData::Year, string.toInt()); } return metadata; diff --git a/src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp b/src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp index 427afb092..7988f6b99 100644 --- a/src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp +++ b/src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp @@ -55,7 +55,8 @@ struct { { GST_TAG_COMMENT, QMediaMetaData::Comment }, { GST_TAG_DESCRIPTION, QMediaMetaData::Description }, { GST_TAG_GENRE, QMediaMetaData::Genre }, - { "year", QMediaMetaData::Year }, + { GST_TAG_DATE_TIME, QMediaMetaData::Date }, + { GST_TAG_DATE, QMediaMetaData::Date }, { GST_TAG_LANGUAGE_CODE, QMediaMetaData::Language }, @@ -162,28 +163,28 @@ static void addTagToMap(const GstTagList *list, int year = g_date_get_year(date); int month = g_date_get_month(date); int day = g_date_get_day(date); - map->insert(key, QDate(year,month,day)); - if (!map->contains(QMediaMetaData::Year)) - map->insert(QMediaMetaData::Year, year); + // don't insert if we already have a datetime. + if (!map->contains(key)) + map->insert(key, QDateTime(QDate(year, month, day), QTime())); } } else if (G_VALUE_TYPE(&val) == GST_TYPE_DATE_TIME) { const GstDateTime *dateTime = (const GstDateTime *)g_value_get_boxed(&val); int year = gst_date_time_has_year(dateTime) ? gst_date_time_get_year(dateTime) : 0; int month = gst_date_time_has_month(dateTime) ? gst_date_time_get_month(dateTime) : 0; int day = gst_date_time_has_day(dateTime) ? gst_date_time_get_day(dateTime) : 0; + int hour = 0; + int minute = 0; + int second = 0; + float tz = 0; if (gst_date_time_has_time(dateTime)) { - int hour = gst_date_time_get_hour(dateTime); - int minute = gst_date_time_get_minute(dateTime); - int second = gst_date_time_get_second(dateTime); - float tz = gst_date_time_get_time_zone_offset(dateTime); - QDateTime dateTime(QDate(year, month, day), QTime(hour, minute, second), - Qt::OffsetFromUTC, tz * 60 * 60); - map->insert(key, dateTime); - } else if (year > 0 && month > 0 && day > 0) { - map->insert(key, QDate(year,month,day)); + hour = gst_date_time_get_hour(dateTime); + minute = gst_date_time_get_minute(dateTime); + second = gst_date_time_get_second(dateTime); + tz = gst_date_time_get_time_zone_offset(dateTime); } - if (!map->contains(QMediaMetaData::Year) && year > 0) - map->insert(QMediaMetaData::Year, year); + QDateTime qDateTime(QDate(year, month, day), QTime(hour, minute, second), + Qt::OffsetFromUTC, tz * 60 * 60); + map->insert(key, qDateTime); } else if (G_VALUE_TYPE(&val) == GST_TYPE_SAMPLE) { GstSample *sample = (GstSample *)g_value_get_boxed(&val); GstCaps* caps = gst_sample_get_caps(sample); @@ -232,7 +233,10 @@ void QGstreamerMetaData::setMetaData(GstElement *element) for (auto it = data.cbegin(), end = data.cend(); it != end; ++it) { const char *tagName = keyToTag(it.key()); + if (!tagName) + continue; const QVariant &tagValue = it.value(); + qDebug() << tagName << tagValue; switch (tagValue.typeId()) { case QMetaType::QString: @@ -258,11 +262,12 @@ void QGstreamerMetaData::setMetaData(GstElement *element) nullptr); break; case QMetaType::QDateTime: { - QDateTime date = tagValue.toDateTime().toLocalTime(); + QDateTime date = tagValue.toDateTime(); + qDebug() << "XXXXX" << date; gst_tag_setter_add_tags(GST_TAG_SETTER(element), GST_TAG_MERGE_REPLACE, tagName, - gst_date_time_new_local_time( + gst_date_time_new(date.offsetFromUtc() / 60. / 60., date.date().year(), date.date().month(), date.date().day(), date.time().hour(), date.time().minute(), date.time().second()), nullptr); diff --git a/src/multimedia/platform/windows/player/mfmetadata.cpp b/src/multimedia/platform/windows/player/mfmetadata.cpp index a6b16e2d4..d64b3fa2f 100644 --- a/src/multimedia/platform/windows/player/mfmetadata.cpp +++ b/src/multimedia/platform/windows/player/mfmetadata.cpp @@ -262,8 +262,6 @@ QMediaMetaData MFMetaData::fromNative(IMFMediaSource* mediaSource) mediaKey = QMediaMetaData::Comment; } else if (key == PKEY_Media_ProviderStyle) { mediaKey = QMediaMetaData::Genre; - } else if (key == PKEY_Media_Year) { - mediaKey = QMediaMetaData::Year; } else if (key == PKEY_Media_DateEncoded) { mediaKey = QMediaMetaData::Date; // } else if (key == PKEY_Rating) { diff --git a/src/multimedia/qmediametadata.cpp b/src/multimedia/qmediametadata.cpp index 7a2ee634f..466507a4e 100644 --- a/src/multimedia/qmediametadata.cpp +++ b/src/multimedia/qmediametadata.cpp @@ -65,7 +65,6 @@ QT_BEGIN_NAMESPACE \row \li Description \li A description of the media. \li QString \row \li Category \li The category of the media. \li QStringList \row \li Genre \li The genre of the media. \li QStringList - \row \li Year \li The year of release of the media. \li int \row \li Date \li The date of the media. \li QDate. \row \li UserRating \li A user rating of the media. \li int [0..100] \row \li Keywords \li A list of keywords describing the media. \li QStringList @@ -249,7 +248,6 @@ QString QMediaMetaData::stringValue(QMediaMetaData::Key k) const case Comment: case Description: case Genre: - case Year: case Language: case Publisher: case Copyright: @@ -300,8 +298,6 @@ QString QMediaMetaData::metaDataKeyToString(QMediaMetaData::Key k) return (QObject::tr("Description")); case QMediaMetaData::Genre: return (QObject::tr("Genre")); - case QMediaMetaData::Year: - return (QObject::tr("Year")); case QMediaMetaData::Date: return (QObject::tr("Date")); case QMediaMetaData::Language: diff --git a/src/multimedia/qmediametadata.h b/src/multimedia/qmediametadata.h index 255953b2b..29fecb1b2 100644 --- a/src/multimedia/qmediametadata.h +++ b/src/multimedia/qmediametadata.h @@ -59,7 +59,6 @@ public: Comment, Description, Genre, - Year, Date, Language, diff --git a/tests/auto/unit/mockbackend/mockcameraimagecapturecontrol.h b/tests/auto/unit/mockbackend/mockcameraimagecapturecontrol.h index cf5544c07..52400c8d8 100644 --- a/tests/auto/unit/mockbackend/mockcameraimagecapturecontrol.h +++ b/tests/auto/unit/mockbackend/mockcameraimagecapturecontrol.h @@ -94,7 +94,7 @@ private Q_SLOTS: QMediaMetaData metaData; metaData.insert(QMediaMetaData::Author, QString::fromUtf8("Author")); - metaData.insert(QMediaMetaData::Year, 2021); + metaData.insert(QMediaMetaData::Date, QDateTime(QDate(2021, 1, 1), QTime())); emit imageMetadataAvailable(m_captureRequest, metaData); } diff --git a/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp b/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp index bbf405ad0..1dc3a8171 100644 --- a/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp +++ b/tests/auto/unit/multimedia/qcamera/tst_qcamera.cpp @@ -357,7 +357,7 @@ void tst_QCamera::testCameraCaptureMetadata() QMediaMetaData data = metadata[1].value<QMediaMetaData>(); QCOMPARE(data.keys().length(), 2); QCOMPARE(data[QMediaMetaData::Author].toString(), "Author"); - QCOMPARE(data[QMediaMetaData::Year].toInt(), 2021); + QCOMPARE(data[QMediaMetaData::Date].toDateTime().date().year(), 2021); } |