Changed metadata keys type from enum to QString.

This allows to combine metaData and extendedMetaData
and simplify metadata handling on both backend and application sides.

Change-Id: I136eedc86c215be3485db101c43069ca7c82101b
Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
This commit is contained in:
Dmytro Poplavskiy
2012-01-16 16:40:47 +10:00
committed by Qt by Nokia
parent 382ba7d4f4
commit 8ff5b88b27
54 changed files with 736 additions and 1050 deletions

View File

@@ -127,8 +127,6 @@ private:
void tst_QCameraBackend::initTestCase()
{
qRegisterMetaType<QtMultimedia::MetaData>("QtMultimedia::MetaData");
QCamera camera;
if (!camera.isAvailable())
QSKIP("Camera is not available");
@@ -501,7 +499,7 @@ void tst_QCameraBackend::testCameraCaptureMetadata()
QCameraImageCapture imageCapture(&camera);
camera.exposure()->setFlashMode(QCameraExposure::FlashOff);
QSignalSpy metadataSignal(&imageCapture, SIGNAL(imageMetadataAvailable(int,QtMultimedia::MetaData,QVariant)));
QSignalSpy metadataSignal(&imageCapture, SIGNAL(imageMetadataAvailable(int,QString,QVariant)));
QSignalSpy savedSignal(&imageCapture, SIGNAL(imageSaved(int,QString)));
camera.start();

View File

@@ -171,7 +171,6 @@ void tst_QCamera::initTestCase()
provider = new MockMediaServiceProvider;
mockSimpleCameraService = new MockSimpleCameraService;
provider->service = mockSimpleCameraService;
qRegisterMetaType<QtMultimedia::MetaData>("QtMultimedia::MetaData");
}
void tst_QCamera::cleanupTestCase()
@@ -479,8 +478,7 @@ void tst_QCamera::testCameraCaptureMetadata()
QCamera camera(0, provider);
QCameraImageCapture imageCapture(&camera);
QSignalSpy metadataSignal(&imageCapture, SIGNAL(imageMetadataAvailable(int,QtMultimedia::MetaData,QVariant)));
QSignalSpy extendedMetadataSignal(&imageCapture, SIGNAL(imageMetadataAvailable(int,QString,QVariant)));
QSignalSpy metadataSignal(&imageCapture, SIGNAL(imageMetadataAvailable(int,QString,QVariant)));
QSignalSpy savedSignal(&imageCapture, SIGNAL(imageSaved(int,QString)));
camera.start();
@@ -491,21 +489,20 @@ void tst_QCamera::testCameraCaptureMetadata()
QCOMPARE(savedSignal.size(), 1);
QCOMPARE(metadataSignal.size(), 2);
QCOMPARE(metadataSignal.size(), 3);
QVariantList metadata = metadataSignal[0];
QCOMPARE(metadata[0].toInt(), id);
QCOMPARE(metadata[1].value<QtMultimedia::MetaData>(), QtMultimedia::FocalLengthIn35mmFilm);
QCOMPARE(metadata[1].toString(), QtMultimedia::MetaData::FocalLengthIn35mmFilm);
QCOMPARE(metadata[2].value<QVariant>().toInt(), 50);
metadata = metadataSignal[1];
QCOMPARE(metadata[0].toInt(), id);
QCOMPARE(metadata[1].value<QtMultimedia::MetaData>(), QtMultimedia::DateTimeOriginal);
QCOMPARE(metadata[1].toString(), QtMultimedia::MetaData::DateTimeOriginal);
QDateTime captureTime = metadata[2].value<QVariant>().value<QDateTime>();
QVERIFY(qAbs(captureTime.secsTo(QDateTime::currentDateTime()) < 5)); //it should not takes more than 5 seconds for signal to arrive here
QCOMPARE(extendedMetadataSignal.size(), 1);
metadata = extendedMetadataSignal.first();
metadata = metadataSignal[2];
QCOMPARE(metadata[0].toInt(), id);
QCOMPARE(metadata[1].toString(), QLatin1String("Answer to the Ultimate Question of Life, the Universe, and Everything"));
QCOMPARE(metadata[2].value<QVariant>().toInt(), 42);

View File

@@ -97,7 +97,6 @@ void tst_QCameraWidgets::initTestCase()
provider = new MockMediaServiceProvider;
mockSimpleCameraService = new MockSimpleCameraService;
provider->service = mockSimpleCameraService;
qRegisterMetaType<QtMultimedia::MetaData>("QtMultimedia::MetaData");
}
void tst_QCameraWidgets::cleanupTestCase()

View File

@@ -202,17 +202,14 @@ public:
bool isMetaDataAvailable() const { return true; }
QVariant metaData(QtMultimedia::MetaData key) const { return m_metaData.value(key); }
void setMetaData(QtMultimedia::MetaData key, const QVariant &value) {
QVariant metaData(const QString &key) const { return m_metaData.value(key); }
void setMetaData(const QString &key, const QVariant &value) {
m_metaData.insert(key, value); emit metaDataChanged(); }
QList<QtMultimedia::MetaData> availableMetaData() const { return m_metaData.keys(); }
QVariant extendedMetaData(const QString &) const { return QVariant(); }
QStringList availableExtendedMetaData() const { return QStringList(); }
QStringList availableMetaData() const { return m_metaData.keys(); }
private:
QMap<QtMultimedia::MetaData, QVariant> m_metaData;
QMap<QString, QVariant> m_metaData;
};
class QtTestMediaService : public QMediaService
@@ -1122,29 +1119,29 @@ void tst_QDeclarativeAudio::status()
void tst_QDeclarativeAudio::metaData_data()
{
QTest::addColumn<QByteArray>("propertyName");
QTest::addColumn<QtMultimedia::MetaData>("propertyKey");
QTest::addColumn<QString>("propertyKey");
QTest::addColumn<QVariant>("value");
QTest::newRow("title")
<< QByteArray("title")
<< QtMultimedia::Title
<< QtMultimedia::MetaData::Title
<< QVariant(QString::fromLatin1("This is a title"));
QTest::newRow("genre")
<< QByteArray("genre")
<< QtMultimedia::Genre
<< QtMultimedia::MetaData::Genre
<< QVariant(QString::fromLatin1("rock"));
QTest::newRow("trackNumber")
<< QByteArray("trackNumber")
<< QtMultimedia::TrackNumber
<< QtMultimedia::MetaData::TrackNumber
<< QVariant(8);
}
void tst_QDeclarativeAudio::metaData()
{
QFETCH(QByteArray, propertyName);
QFETCH(QtMultimedia::MetaData, propertyKey);
QFETCH(QString, propertyKey);
QFETCH(QVariant, value);
QtTestMediaServiceProvider provider;

View File

@@ -98,8 +98,6 @@ private slots:
void metaData_data();
void metaData();
void availability();
void extendedMetaData_data() { metaData_data(); }
void extendedMetaData();
void service();
@@ -340,10 +338,8 @@ void tst_QMediaObject::nullMetaDataControl()
QCOMPARE(object.isMetaDataAvailable(), false);
QCOMPARE(object.metaData(QtMultimedia::Title).toString(), QString());
QCOMPARE(object.extendedMetaData(titleKey).toString(), QString());
QCOMPARE(object.availableMetaData(), QList<QtMultimedia::MetaData>());
QCOMPARE(object.availableExtendedMetaData(), QStringList());
QCOMPARE(object.metaData(QtMultimedia::MetaData::Title).toString(), QString());
QCOMPARE(object.availableMetaData(), QStringList());
QCOMPARE(spy.count(), 0);
}
@@ -407,42 +403,18 @@ void tst_QMediaObject::metaData()
QtTestMediaObject object(&service);
QVERIFY(object.availableMetaData().isEmpty());
service.metaData.m_data.insert(QtMultimedia::AlbumArtist, artist);
service.metaData.m_data.insert(QtMultimedia::Title, title);
service.metaData.m_data.insert(QtMultimedia::Genre, genre);
service.metaData.m_data.insert(QtMultimedia::MetaData::AlbumArtist, artist);
service.metaData.m_data.insert(QtMultimedia::MetaData::Title, title);
service.metaData.m_data.insert(QtMultimedia::MetaData::Genre, genre);
QCOMPARE(object.metaData(QtMultimedia::AlbumArtist).toString(), artist);
QCOMPARE(object.metaData(QtMultimedia::Title).toString(), title);
QCOMPARE(object.metaData(QtMultimedia::MetaData::AlbumArtist).toString(), artist);
QCOMPARE(object.metaData(QtMultimedia::MetaData::Title).toString(), title);
QList<QtMultimedia::MetaData> metaDataKeys = object.availableMetaData();
QStringList metaDataKeys = object.availableMetaData();
QCOMPARE(metaDataKeys.size(), 3);
QVERIFY(metaDataKeys.contains(QtMultimedia::AlbumArtist));
QVERIFY(metaDataKeys.contains(QtMultimedia::Title));
QVERIFY(metaDataKeys.contains(QtMultimedia::Genre));
}
void tst_QMediaObject::extendedMetaData()
{
QFETCH(QString, artist);
QFETCH(QString, title);
QFETCH(QString, genre);
QtTestMetaDataService service;
QtTestMediaObject object(&service);
QVERIFY(object.availableExtendedMetaData().isEmpty());
service.metaData.m_extendedData.insert(QLatin1String("Artist"), artist);
service.metaData.m_extendedData.insert(QLatin1String("Title"), title);
service.metaData.m_extendedData.insert(QLatin1String("Genre"), genre);
QCOMPARE(object.extendedMetaData(QLatin1String("Artist")).toString(), artist);
QCOMPARE(object.extendedMetaData(QLatin1String("Title")).toString(), title);
QStringList extendedKeys = object.availableExtendedMetaData();
QCOMPARE(extendedKeys.size(), 3);
QVERIFY(extendedKeys.contains(QLatin1String("Artist")));
QVERIFY(extendedKeys.contains(QLatin1String("Title")));
QVERIFY(extendedKeys.contains(QLatin1String("Genre")));
QVERIFY(metaDataKeys.contains(QtMultimedia::MetaData::AlbumArtist));
QVERIFY(metaDataKeys.contains(QtMultimedia::MetaData::Title));
QVERIFY(metaDataKeys.contains(QtMultimedia::MetaData::Genre));
}
void tst_QMediaObject::availability()

View File

@@ -92,10 +92,6 @@ private slots:
void metaData();
void setMetaData_data();
void setMetaData();
void extendedMetaData_data() { metaData_data(); }
void extendedMetaData();
void setExtendedMetaData_data() { extendedMetaData_data(); }
void setExtendedMetaData();
void testAudioSettingsCopyConstructor();
void testAudioSettingsOperatorNotEqual();
@@ -710,13 +706,10 @@ void tst_QMediaRecorder::nullMetaDataControl()
QCOMPARE(recorder.isMetaDataAvailable(), false);
QCOMPARE(recorder.isMetaDataWritable(), false);
recorder.setMetaData(QtMultimedia::Title, title);
recorder.setExtendedMetaData(titleKey, title);
recorder.setMetaData(QtMultimedia::MetaData::Title, title);
QCOMPARE(recorder.metaData(QtMultimedia::Title).toString(), QString());
QCOMPARE(recorder.extendedMetaData(titleKey).toString(), QString());
QCOMPARE(recorder.availableMetaData(), QList<QtMultimedia::MetaData>());
QCOMPARE(recorder.availableExtendedMetaData(), QStringList());
QCOMPARE(recorder.metaData(QtMultimedia::MetaData::Title).toString(), QString());
QCOMPARE(recorder.availableMetaData(), QStringList());
QCOMPARE(spy.count(), 0);
}
@@ -793,11 +786,13 @@ void tst_QMediaRecorder::metaData_data()
QTest::addColumn<QString>("artist");
QTest::addColumn<QString>("title");
QTest::addColumn<QString>("genre");
QTest::addColumn<QString>("custom");
QTest::newRow("")
<< QString::fromLatin1("Dead Can Dance")
<< QString::fromLatin1("Host of Seraphim")
<< QString::fromLatin1("Awesome");
<< QString::fromLatin1("Awesome")
<< QString::fromLatin1("Something else");
}
void tst_QMediaRecorder::metaData()
@@ -805,6 +800,7 @@ void tst_QMediaRecorder::metaData()
QFETCH(QString, artist);
QFETCH(QString, title);
QFETCH(QString, genre);
QFETCH(QString, custom);
MockMediaRecorderControl recorderControl(0);
MockMediaRecorderService service(0, &recorderControl);
@@ -815,18 +811,20 @@ void tst_QMediaRecorder::metaData()
QMediaRecorder recorder(&object);
QVERIFY(object.availableMetaData().isEmpty());
service.mockMetaDataControl->m_data.insert(QtMultimedia::AlbumArtist, artist);
service.mockMetaDataControl->m_data.insert(QtMultimedia::Title, title);
service.mockMetaDataControl->m_data.insert(QtMultimedia::Genre, genre);
service.mockMetaDataControl->m_data.insert(QtMultimedia::MetaData::AlbumArtist, artist);
service.mockMetaDataControl->m_data.insert(QtMultimedia::MetaData::Title, title);
service.mockMetaDataControl->m_data.insert(QtMultimedia::MetaData::Genre, genre);
service.mockMetaDataControl->m_data.insert(QLatin1String("CustomEntry"), custom );
QCOMPARE(recorder.metaData(QtMultimedia::AlbumArtist).toString(), artist);
QCOMPARE(recorder.metaData(QtMultimedia::Title).toString(), title);
QCOMPARE(recorder.metaData(QtMultimedia::MetaData::AlbumArtist).toString(), artist);
QCOMPARE(recorder.metaData(QtMultimedia::MetaData::Title).toString(), title);
QList<QtMultimedia::MetaData> metaDataKeys = recorder.availableMetaData();
QCOMPARE(metaDataKeys.size(), 3);
QVERIFY(metaDataKeys.contains(QtMultimedia::AlbumArtist));
QVERIFY(metaDataKeys.contains(QtMultimedia::Title));
QVERIFY(metaDataKeys.contains(QtMultimedia::Genre));
QStringList metaDataKeys = recorder.availableMetaData();
QCOMPARE(metaDataKeys.size(), 4);
QVERIFY(metaDataKeys.contains(QtMultimedia::MetaData::AlbumArtist));
QVERIFY(metaDataKeys.contains(QtMultimedia::MetaData::Title));
QVERIFY(metaDataKeys.contains(QtMultimedia::MetaData::Genre));
QVERIFY(metaDataKeys.contains(QLatin1String("CustomEntry")));
}
void tst_QMediaRecorder::setMetaData_data()
@@ -849,56 +847,11 @@ void tst_QMediaRecorder::setMetaData()
QMediaRecorder recorder(&object);
recorder.setMetaData(QtMultimedia::Title, title);
QCOMPARE(recorder.metaData(QtMultimedia::Title).toString(), title);
QCOMPARE(service.mockMetaDataControl->m_data.value(QtMultimedia::Title).toString(), title);
recorder.setMetaData(QtMultimedia::MetaData::Title, title);
QCOMPARE(recorder.metaData(QtMultimedia::MetaData::Title).toString(), title);
QCOMPARE(service.mockMetaDataControl->m_data.value(QtMultimedia::MetaData::Title).toString(), title);
}
void tst_QMediaRecorder::extendedMetaData()
{
QFETCH(QString, artist);
QFETCH(QString, title);
QFETCH(QString, genre);
MockMediaRecorderControl recorderControl(0);
MockMediaRecorderService service(0, &recorderControl);
MockMediaObject object(0, &service);
QMediaRecorder recorder(&object);
QVERIFY(recorder.availableExtendedMetaData().isEmpty());
service.mockMetaDataControl->m_extendedData.insert(QLatin1String("Artist"), artist);
service.mockMetaDataControl->m_extendedData.insert(QLatin1String("Title"), title);
service.mockMetaDataControl->m_extendedData.insert(QLatin1String("Genre"), genre);
QCOMPARE(recorder.extendedMetaData(QLatin1String("Artist")).toString(), artist);
QCOMPARE(recorder.extendedMetaData(QLatin1String("Title")).toString(), title);
QStringList extendedKeys = recorder.availableExtendedMetaData();
QCOMPARE(extendedKeys.size(), 3);
QVERIFY(extendedKeys.contains(QLatin1String("Artist")));
QVERIFY(extendedKeys.contains(QLatin1String("Title")));
QVERIFY(extendedKeys.contains(QLatin1String("Genre")));
}
void tst_QMediaRecorder::setExtendedMetaData()
{
MockMediaRecorderControl recorderControl(0);
MockMediaRecorderService service(0, &recorderControl);
service.mockMetaDataControl->populateMetaData();
MockMediaObject object(0, &service);
QMediaRecorder recorder(&object);
QString title(QLatin1String("In the Kingdom of the Blind the One eyed are Kings"));
recorder.setExtendedMetaData(QLatin1String("Title"), title);
QCOMPARE(recorder.extendedMetaData(QLatin1String("Title")).toString(), title);
QCOMPARE(service.mockMetaDataControl->m_extendedData.value(QLatin1String("Title")).toString(), title);
}
void tst_QMediaRecorder::testAudioSettingsCopyConstructor()
{
/* create an object for AudioEncodersettings */

View File

@@ -52,10 +52,8 @@ private slots:
// Test case for QMetaDataReaderControl
void metaDataReaderControlConstructor();
void metaDataReaderControlAvailableMetaData();
void metaDataReaderControlExtendedMetaData();
void metaDataReaderControlIsMetaDataAvailable();
void metaDataReaderControlMetaData();
void metaDataReaderControlAvailableExtendedMetaData();
void metaDataReaderControlMetaDataAvailableChangedSignal();
void metaDataReaderControlMetaDataChangedSignal();
};
@@ -79,16 +77,6 @@ void tst_QMetaDataReaderControl::metaDataReaderControlAvailableMetaData()
delete metaData;
}
/* Test case for extendedMetaData */
void tst_QMetaDataReaderControl::metaDataReaderControlExtendedMetaData ()
{
const QString titleKey(QLatin1String("Title"));
MockMetaDataReaderControl *metaData = new MockMetaDataReaderControl();
QVERIFY(metaData !=NULL);
metaData->extendedMetaData(titleKey);
delete metaData;
}
/* Test case for availableMetaData */
void tst_QMetaDataReaderControl::metaDataReaderControlIsMetaDataAvailable ()
{
@@ -103,16 +91,7 @@ void tst_QMetaDataReaderControl::metaDataReaderControlMetaData ()
{
MockMetaDataReaderControl *metaData = new MockMetaDataReaderControl();
QVERIFY(metaData !=NULL);
metaData->metaData(QtMultimedia::Title);
delete metaData;
}
/* Test case for availableExtendedMetaData */
void tst_QMetaDataReaderControl::metaDataReaderControlAvailableExtendedMetaData ()
{
MockMetaDataReaderControl *metaData = new MockMetaDataReaderControl();
QVERIFY(metaData !=NULL);
metaData->availableExtendedMetaData();
metaData->metaData(QtMultimedia::MetaData::Title);
delete metaData;
}

View File

@@ -71,14 +71,11 @@ void tst_QMetaDataWriterControl::cleanupTestCase()
void tst_QMetaDataWriterControl::constructor()
{
QMetaDataWriterControl *mock = new MockMetaDataWriterControl();
mock->availableExtendedMetaData();
mock->availableMetaData();
mock->isMetaDataAvailable();
mock->isWritable();
mock->metaData((QtMultimedia::MetaData) 1 );
mock->extendedMetaData(QString("XYZ"));
mock->setExtendedMetaData(QString("XYZ"),QVariant());
mock->setMetaData((QtMultimedia::MetaData) 1,QVariant());
mock->metaData(QtMultimedia::MetaData::Title);
mock->setMetaData(QtMultimedia::MetaData::Title, QVariant());
((MockMetaDataWriterControl*)mock)->setWritable();
((MockMetaDataWriterControl*)mock)->setMetaDataAvailable();
delete mock;

View File

@@ -95,11 +95,11 @@ private Q_SLOTS:
emit imageCaptured(m_captureRequest, QImage());
emit imageMetadataAvailable(m_captureRequest,
QtMultimedia::FocalLengthIn35mmFilm,
QtMultimedia::MetaData::FocalLengthIn35mmFilm,
QVariant(50));
emit imageMetadataAvailable(m_captureRequest,
QtMultimedia::DateTimeOriginal,
QtMultimedia::MetaData::DateTimeOriginal,
QVariant(QDateTime::currentDateTime()));
emit imageMetadataAvailable(m_captureRequest,

View File

@@ -55,9 +55,9 @@ public:
StreamType streamType(int index) { return _streams.at(index).type; }
void setStreamType(int index, StreamType type) { _streams[index].type = type; }
QVariant metaData(int index, QtMultimedia::MetaData key) {
QVariant metaData(int index, const QString &key) {
return _streams.at(index).metaData.value(key); }
void setMetaData(int index, QtMultimedia::MetaData key, const QVariant &value) {
void setMetaData(int index, const QString &key, const QVariant &value) {
_streams[index].metaData.insert(key, value); }
bool isActive(int index) { return _streams.at(index).active; }
@@ -68,7 +68,7 @@ private:
{
Stream() : type(UnknownStream), active(false) {}
StreamType type;
QMap<QtMultimedia::MetaData, QVariant> metaData;
QMap<QString, QVariant> metaData;
bool active;
};

View File

@@ -63,26 +63,16 @@ public:
if (m_available != available)
emit metaDataAvailableChanged(m_available = available);
}
QList<QtMultimedia::MetaData> availableMetaData() const
QStringList availableMetaData() const
{
return m_data.keys();
}
QVariant metaData(QtMultimedia::MetaData key) const
QVariant metaData(const QString &key) const
{
return m_data.value(key);
}
QVariant extendedMetaData(const QString &key) const
{
return m_extendedData.value(key);
}
QStringList availableExtendedMetaData() const
{
return m_extendedData.keys();
}
using QMetaDataReaderControl::metaDataChanged;
void populateMetaData()
@@ -91,8 +81,7 @@ public:
}
bool m_available;
QMap<QtMultimedia::MetaData, QVariant> m_data;
QMap<QString, QVariant> m_extendedData;
QMap<QString, QVariant> m_data;
};
#endif // MOCKMETADATAREADERCONTROL_H

View File

@@ -64,25 +64,17 @@ public:
if (m_available != available)
emit metaDataAvailableChanged(m_available = available);
}
QList<QtMultimedia::MetaData> availableMetaData() const { return m_data.keys(); }
QStringList availableMetaData() const { return m_data.keys(); }
bool isWritable() const { return m_writable; }
void setWritable(bool writable) { emit writableChanged(m_writable = writable); }
QVariant metaData(QtMultimedia::MetaData key) const { return m_data.value(key); }//Getting the metadata from Multimediakit
void setMetaData(QtMultimedia::MetaData key, const QVariant &value)
QVariant metaData(const QString &key) const { return m_data.value(key); }//Getting the metadata from Multimediakit
void setMetaData(const QString &key, const QVariant &value)
{
m_data.insert(key, value);
}
QVariant extendedMetaData(const QString &key) const { return m_extendedData.value(key); }
void setExtendedMetaData(const QString &key, const QVariant &value)
{
m_extendedData.insert(key, value);
}
QStringList availableExtendedMetaData() const { return m_extendedData.keys(); }
using QMetaDataWriterControl::metaDataChanged;
void populateMetaData()
@@ -100,8 +92,7 @@ public:
bool m_available;
bool m_writable;
QMap<QtMultimedia::MetaData, QVariant> m_data;
QMap<QString, QVariant> m_extendedData;
QMap<QString, QVariant> m_data;
};
#endif // MOCKMETADATAWRITERCONTROL_H