Added metaDataChanged(key,value) signal to metadata controls.
It may be more efficient and convenient for application to use this signal instead of metaDataChanged(). metaDataChanged() signal is emitted for compatibility, backends should emit both signals. Signal added QMetadataReader/WritterControl, QMediaObject and QMediaRecorder. Change-Id: I5ca34a40e64b22034e6fde8cd7f9735cc3f72c68 Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
This commit is contained in:
committed by
Qt by Nokia
parent
fb73a56574
commit
fd3a3a7292
@@ -126,6 +126,16 @@ QMetaDataReaderControl::~QMetaDataReaderControl()
|
|||||||
\fn void QMetaDataReaderControl::metaDataChanged()
|
\fn void QMetaDataReaderControl::metaDataChanged()
|
||||||
|
|
||||||
Signal the changes of meta-data.
|
Signal the changes of meta-data.
|
||||||
|
|
||||||
|
If multiple meta-data elements are changed,
|
||||||
|
metaDataChanged(const QString &key, const QVariant &value) signal is emitted
|
||||||
|
for each of them with metaDataChanged() changed emitted once.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn void QMetaDataReaderControl::metaDataChanged(const QString &key, const QVariant &value)
|
||||||
|
|
||||||
|
Signal the changes of one meta-data element \a value with the given \a key.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ public:
|
|||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void metaDataChanged();
|
void metaDataChanged();
|
||||||
|
void metaDataChanged(const QString &key, const QVariant &value);
|
||||||
|
|
||||||
void metaDataAvailableChanged(bool available);
|
void metaDataAvailableChanged(bool available);
|
||||||
|
|
||||||
|
|||||||
@@ -139,6 +139,16 @@ QMetaDataWriterControl::~QMetaDataWriterControl()
|
|||||||
\fn void QMetaDataWriterControl::metaDataChanged()
|
\fn void QMetaDataWriterControl::metaDataChanged()
|
||||||
|
|
||||||
Signal the changes of meta-data.
|
Signal the changes of meta-data.
|
||||||
|
|
||||||
|
If multiple meta-data elements are changed,
|
||||||
|
metaDataChanged(const QString &key, const QVariant &value) signal is emitted
|
||||||
|
for each of them with metaDataChanged() changed emitted once.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn void QMetaDataWriterControl::metaDataChanged(const QString &key, const QVariant &value)
|
||||||
|
|
||||||
|
Signal the changes of one meta-data element \a value with the given \a key.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ public:
|
|||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void metaDataChanged();
|
void metaDataChanged();
|
||||||
|
void metaDataChanged(const QString &key, const QVariant &value);
|
||||||
|
|
||||||
void writableChanged(bool writable);
|
void writableChanged(bool writable);
|
||||||
void metaDataAvailableChanged(bool available);
|
void metaDataAvailableChanged(bool available);
|
||||||
|
|||||||
@@ -347,8 +347,19 @@ QStringList QMediaObject::availableMetaData() const
|
|||||||
\fn QMediaObject::metaDataChanged()
|
\fn QMediaObject::metaDataChanged()
|
||||||
|
|
||||||
Signals that this media object's meta-data has changed.
|
Signals that this media object's meta-data has changed.
|
||||||
|
|
||||||
|
If multiple meta-data elements are changed,
|
||||||
|
metaDataChanged(const QString &key, const QVariant &value) signal is emitted
|
||||||
|
for each of them with metaDataChanged() changed emitted once.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn QMediaObject::metaDataChanged(const QString &key, const QVariant &value)
|
||||||
|
|
||||||
|
Signal the changes of one meta-data element \a value with the given \a key.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
void QMediaObject::setupMetaData()
|
void QMediaObject::setupMetaData()
|
||||||
{
|
{
|
||||||
Q_D(QMediaObject);
|
Q_D(QMediaObject);
|
||||||
@@ -359,6 +370,9 @@ void QMediaObject::setupMetaData()
|
|||||||
|
|
||||||
if (d->metaDataControl) {
|
if (d->metaDataControl) {
|
||||||
connect(d->metaDataControl, SIGNAL(metaDataChanged()), SIGNAL(metaDataChanged()));
|
connect(d->metaDataControl, SIGNAL(metaDataChanged()), SIGNAL(metaDataChanged()));
|
||||||
|
connect(d->metaDataControl,
|
||||||
|
SIGNAL(metaDataChanged(QString,QVariant)),
|
||||||
|
SIGNAL(metaDataChanged(QString,QVariant)));
|
||||||
connect(d->metaDataControl,
|
connect(d->metaDataControl,
|
||||||
SIGNAL(metaDataAvailableChanged(bool)),
|
SIGNAL(metaDataAvailableChanged(bool)),
|
||||||
SIGNAL(metaDataAvailableChanged(bool)));
|
SIGNAL(metaDataAvailableChanged(bool)));
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ Q_SIGNALS:
|
|||||||
|
|
||||||
void metaDataAvailableChanged(bool available);
|
void metaDataAvailableChanged(bool available);
|
||||||
void metaDataChanged();
|
void metaDataChanged();
|
||||||
|
void metaDataChanged(const QString &key, const QVariant &value);
|
||||||
|
|
||||||
void availabilityChanged(bool available);
|
void availabilityChanged(bool available);
|
||||||
|
|
||||||
|
|||||||
@@ -290,6 +290,8 @@ bool QMediaRecorder::setMediaObject(QMediaObject *object)
|
|||||||
if (d->metaDataControl) {
|
if (d->metaDataControl) {
|
||||||
disconnect(d->metaDataControl, SIGNAL(metaDataChanged()),
|
disconnect(d->metaDataControl, SIGNAL(metaDataChanged()),
|
||||||
this, SIGNAL(metaDataChanged()));
|
this, SIGNAL(metaDataChanged()));
|
||||||
|
disconnect(d->metaDataControl, SIGNAL(metaDataChanged(QString,QVariant)),
|
||||||
|
this, SIGNAL(metaDataChanged(QString,QVariant)));
|
||||||
disconnect(d->metaDataControl, SIGNAL(metaDataAvailableChanged(bool)),
|
disconnect(d->metaDataControl, SIGNAL(metaDataAvailableChanged(bool)),
|
||||||
this, SIGNAL(metaDataAvailableChanged(bool)));
|
this, SIGNAL(metaDataAvailableChanged(bool)));
|
||||||
disconnect(d->metaDataControl, SIGNAL(writableChanged(bool)),
|
disconnect(d->metaDataControl, SIGNAL(writableChanged(bool)),
|
||||||
@@ -331,6 +333,8 @@ bool QMediaRecorder::setMediaObject(QMediaObject *object)
|
|||||||
connect(d->metaDataControl,
|
connect(d->metaDataControl,
|
||||||
SIGNAL(metaDataChanged()),
|
SIGNAL(metaDataChanged()),
|
||||||
SIGNAL(metaDataChanged()));
|
SIGNAL(metaDataChanged()));
|
||||||
|
connect(d->metaDataControl, SIGNAL(metaDataChanged(QString,QVariant)),
|
||||||
|
this, SIGNAL(metaDataChanged(QString,QVariant)));
|
||||||
connect(d->metaDataControl,
|
connect(d->metaDataControl,
|
||||||
SIGNAL(metaDataAvailableChanged(bool)),
|
SIGNAL(metaDataAvailableChanged(bool)),
|
||||||
SIGNAL(metaDataAvailableChanged(bool)));
|
SIGNAL(metaDataAvailableChanged(bool)));
|
||||||
@@ -939,6 +943,16 @@ QStringList QMediaRecorder::availableMetaData() const
|
|||||||
\fn QMediaRecorder::metaDataChanged()
|
\fn QMediaRecorder::metaDataChanged()
|
||||||
|
|
||||||
Signals that a media object's meta-data has changed.
|
Signals that a media object's meta-data has changed.
|
||||||
|
|
||||||
|
If multiple meta-data elements are changed,
|
||||||
|
metaDataChanged(const QString &key, const QVariant &value) signal is emitted
|
||||||
|
for each of them with metaDataChanged() changed emitted once.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn QMediaRecorder::metaDataChanged(const QString &key, const QVariant &value)
|
||||||
|
|
||||||
|
Signal the changes of one meta-data element \a value with the given \a key.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "moc_qmediarecorder.cpp"
|
#include "moc_qmediarecorder.cpp"
|
||||||
|
|||||||
@@ -171,6 +171,7 @@ Q_SIGNALS:
|
|||||||
void metaDataAvailableChanged(bool available);
|
void metaDataAvailableChanged(bool available);
|
||||||
void metaDataWritableChanged(bool writable);
|
void metaDataWritableChanged(bool writable);
|
||||||
void metaDataChanged();
|
void metaDataChanged();
|
||||||
|
void metaDataChanged(const QString &key, const QVariant &value);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QMediaRecorder(QMediaRecorderPrivate &dd, QMediaObject *mediaObject, QObject *parent = 0);
|
QMediaRecorder(QMediaRecorderPrivate &dd, QMediaObject *mediaObject, QObject *parent = 0);
|
||||||
|
|||||||
@@ -149,6 +149,7 @@ void QGstreamerCaptureMetaDataControl::setMetaData(const QString &key, const QVa
|
|||||||
m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), value);
|
m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), value);
|
||||||
|
|
||||||
emit QMetaDataWriterControl::metaDataChanged();
|
emit QMetaDataWriterControl::metaDataChanged();
|
||||||
|
emit QMetaDataWriterControl::metaDataChanged(key, value);
|
||||||
emit metaDataChanged(m_values);
|
emit metaDataChanged(m_values);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -126,6 +126,11 @@ QGstreamerMetaDataProvider::QGstreamerMetaDataProvider(QGstreamerPlayerSession *
|
|||||||
:QMetaDataReaderControl(parent), m_session(session)
|
:QMetaDataReaderControl(parent), m_session(session)
|
||||||
{
|
{
|
||||||
connect(m_session, SIGNAL(tagsChanged()), SLOT(updateTags()));
|
connect(m_session, SIGNAL(tagsChanged()), SLOT(updateTags()));
|
||||||
|
|
||||||
|
const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
|
||||||
|
for (int i = 0; i < count; ++i) {
|
||||||
|
m_keysMap[QByteArray(qt_gstreamerMetaDataKeys[i].token)] = qt_gstreamerMetaDataKeys[i].key;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QGstreamerMetaDataProvider::~QGstreamerMetaDataProvider()
|
QGstreamerMetaDataProvider::~QGstreamerMetaDataProvider()
|
||||||
@@ -144,39 +149,41 @@ bool QGstreamerMetaDataProvider::isWritable() const
|
|||||||
|
|
||||||
QVariant QGstreamerMetaDataProvider::metaData(const QString &key) const
|
QVariant QGstreamerMetaDataProvider::metaData(const QString &key) const
|
||||||
{
|
{
|
||||||
static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
|
return m_tags.value(key);
|
||||||
|
|
||||||
for (int i = 0; i < count; ++i) {
|
|
||||||
if (qt_gstreamerMetaDataKeys[i].key == key) {
|
|
||||||
return m_session->tags().value(QByteArray(qt_gstreamerMetaDataKeys[i].token));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return QVariant();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList QGstreamerMetaDataProvider::availableMetaData() const
|
QStringList QGstreamerMetaDataProvider::availableMetaData() const
|
||||||
{
|
{
|
||||||
static QMap<QByteArray, QString> keysMap;
|
return m_tags.keys();
|
||||||
if (keysMap.isEmpty()) {
|
|
||||||
const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
|
|
||||||
for (int i = 0; i < count; ++i) {
|
|
||||||
keysMap[QByteArray(qt_gstreamerMetaDataKeys[i].token)] = qt_gstreamerMetaDataKeys[i].key;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList res;
|
|
||||||
foreach (const QByteArray &key, m_session->tags().keys()) {
|
|
||||||
QString tag = keysMap.value(key);
|
|
||||||
if (!tag.isEmpty())
|
|
||||||
res.append(tag);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QGstreamerMetaDataProvider::updateTags()
|
void QGstreamerMetaDataProvider::updateTags()
|
||||||
{
|
{
|
||||||
emit metaDataChanged();
|
QVariantMap oldTags = m_tags;
|
||||||
|
m_tags.clear();
|
||||||
|
|
||||||
|
QSet<QString> allTags = QSet<QString>::fromList(m_tags.keys());
|
||||||
|
|
||||||
|
QMapIterator<QByteArray ,QVariant> i(m_session->tags());
|
||||||
|
while (i.hasNext()) {
|
||||||
|
i.next();
|
||||||
|
//use gstreamer native keys for elements not in m_keysMap
|
||||||
|
QString key = m_keysMap.value(i.key(), i.key());
|
||||||
|
m_tags[key] = i.value();
|
||||||
|
allTags.insert(i.key());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool changed = false;
|
||||||
|
foreach (const QString &key, allTags) {
|
||||||
|
const QVariant value = m_tags.value(key);
|
||||||
|
if (value != oldTags.value(key)) {
|
||||||
|
changed = true;
|
||||||
|
emit metaDataChanged(key, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed)
|
||||||
|
emit metaDataChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QGstreamerPlayerSession *m_session;
|
QGstreamerPlayerSession *m_session;
|
||||||
|
QVariantMap m_tags;
|
||||||
|
QMap<QByteArray, QString> m_keysMap;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|||||||
@@ -370,13 +370,24 @@ void tst_QMediaObject::metaDataChanged()
|
|||||||
QtTestMetaDataService service;
|
QtTestMetaDataService service;
|
||||||
QtTestMediaObject object(&service);
|
QtTestMediaObject object(&service);
|
||||||
|
|
||||||
QSignalSpy spy(&object, SIGNAL(metaDataChanged()));
|
QSignalSpy changedSpy(&object, SIGNAL(metaDataChanged()));
|
||||||
|
QSignalSpy changedWithValueSpy(&object, SIGNAL(metaDataChanged(QString, QVariant)));
|
||||||
|
|
||||||
service.metaData.metaDataChanged();
|
service.metaData.setMetaData("key", "Value");
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(changedSpy.count(), 1);
|
||||||
|
QCOMPARE(changedWithValueSpy.count(), 1);
|
||||||
|
QCOMPARE(changedWithValueSpy.last()[0], QVariant("key"));
|
||||||
|
QCOMPARE(changedWithValueSpy.last()[1].value<QVariant>(), QVariant("Value"));
|
||||||
|
|
||||||
service.metaData.metaDataChanged();
|
service.metaData.setMetaData("key", "Value");
|
||||||
QCOMPARE(spy.count(), 2);
|
QCOMPARE(changedSpy.count(), 1);
|
||||||
|
QCOMPARE(changedWithValueSpy.count(), 1);
|
||||||
|
|
||||||
|
service.metaData.setMetaData("key2", "Value");
|
||||||
|
QCOMPARE(changedSpy.count(), 2);
|
||||||
|
QCOMPARE(changedWithValueSpy.count(), 2);
|
||||||
|
QCOMPARE(changedWithValueSpy.last()[0], QVariant("key2"));
|
||||||
|
QCOMPARE(changedWithValueSpy.last()[1].value<QVariant>(), QVariant("Value"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QMediaObject::metaData_data()
|
void tst_QMediaObject::metaData_data()
|
||||||
|
|||||||
@@ -833,13 +833,24 @@ void tst_QMediaRecorder::metaDataChanged()
|
|||||||
|
|
||||||
QMediaRecorder recorder(&object);
|
QMediaRecorder recorder(&object);
|
||||||
|
|
||||||
QSignalSpy spy(&recorder, SIGNAL(metaDataChanged()));
|
QSignalSpy changedSpy(&recorder, SIGNAL(metaDataChanged()));
|
||||||
|
QSignalSpy changedWithValueSpy(&recorder, SIGNAL(metaDataChanged(QString,QVariant)));
|
||||||
|
|
||||||
service.mockMetaDataControl->metaDataChanged();
|
service.mockMetaDataControl->setMetaData("key", "Value");
|
||||||
QCOMPARE(spy.count(), 1);
|
QCOMPARE(changedSpy.count(), 1);
|
||||||
|
QCOMPARE(changedWithValueSpy.count(), 1);
|
||||||
|
QCOMPARE(changedWithValueSpy.last()[0], QVariant("key"));
|
||||||
|
QCOMPARE(changedWithValueSpy.last()[1].value<QVariant>(), QVariant("Value"));
|
||||||
|
|
||||||
service.mockMetaDataControl->metaDataChanged();
|
service.mockMetaDataControl->setMetaData("key", "Value");
|
||||||
QCOMPARE(spy.count(), 2);
|
QCOMPARE(changedSpy.count(), 1);
|
||||||
|
QCOMPARE(changedWithValueSpy.count(), 1);
|
||||||
|
|
||||||
|
service.mockMetaDataControl->setMetaData("key2", "Value");
|
||||||
|
QCOMPARE(changedSpy.count(), 2);
|
||||||
|
QCOMPARE(changedWithValueSpy.count(), 2);
|
||||||
|
QCOMPARE(changedWithValueSpy.last()[0], QVariant("key2"));
|
||||||
|
QCOMPARE(changedWithValueSpy.last()[1].value<QVariant>(), QVariant("Value"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QMediaRecorder::metaData_data()
|
void tst_QMediaRecorder::metaData_data()
|
||||||
|
|||||||
@@ -73,6 +73,19 @@ public:
|
|||||||
return m_data.value(key);
|
return m_data.value(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMetaData(const QString &key, const QVariant &value)
|
||||||
|
{
|
||||||
|
if (m_data[key] != value) {
|
||||||
|
if (value.isNull())
|
||||||
|
m_data.remove(key);
|
||||||
|
else
|
||||||
|
m_data[key] = value;
|
||||||
|
|
||||||
|
emit metaDataChanged(key, value);
|
||||||
|
emit metaDataChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
using QMetaDataReaderControl::metaDataChanged;
|
using QMetaDataReaderControl::metaDataChanged;
|
||||||
|
|
||||||
void populateMetaData()
|
void populateMetaData()
|
||||||
|
|||||||
@@ -72,7 +72,15 @@ public:
|
|||||||
QVariant metaData(const QString &key) const { return m_data.value(key); }//Getting the metadata from Multimediakit
|
QVariant metaData(const QString &key) const { return m_data.value(key); }//Getting the metadata from Multimediakit
|
||||||
void setMetaData(const QString &key, const QVariant &value)
|
void setMetaData(const QString &key, const QVariant &value)
|
||||||
{
|
{
|
||||||
m_data.insert(key, value);
|
if (m_data[key] != value) {
|
||||||
|
if (value.isNull())
|
||||||
|
m_data.remove(key);
|
||||||
|
else
|
||||||
|
m_data[key] = value;
|
||||||
|
|
||||||
|
emit metaDataChanged(key, value);
|
||||||
|
emit metaDataChanged();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
using QMetaDataWriterControl::metaDataChanged;
|
using QMetaDataWriterControl::metaDataChanged;
|
||||||
|
|||||||
Reference in New Issue
Block a user