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

@@ -65,7 +65,7 @@ bool MFMetaDataControl::isMetaDataAvailable() const
return m_content || m_metaData;
}
QVariant MFMetaDataControl::metaData(QtMultimedia::MetaData key) const
QVariant MFMetaDataControl::metaData(const QString &key) const
{
QVariant value;
if (!isMetaDataAvailable())
@@ -113,38 +113,11 @@ QVariant MFMetaDataControl::convertValue(const PROPVARIANT& var) const
return value;
}
QList<QtMultimedia::MetaData> MFMetaDataControl::availableMetaData() const
QStringList MFMetaDataControl::availableMetaData() const
{
return m_availableMetaDatas;
}
QVariant MFMetaDataControl::extendedMetaData(const QString &key) const
{
QVariant value;
HRESULT hr = S_FALSE;
PROPVARIANT var;
PropVariantInit(&var);
if (m_content) {
int index = m_extendedMetaDatas.indexOf(key);
if (index >= 0) {
hr = m_content->GetValue(m_extendedKeys[index], &var);
}
} else if (m_metaData) {
hr = m_metaData->GetProperty(key.utf16(), &var);
}
if (SUCCEEDED(hr))
value = convertValue(var);
PropVariantClear(&var);
return value;
}
QStringList MFMetaDataControl::availableExtendedMetaData() const
{
return m_extendedMetaDatas;
}
void MFMetaDataControl::updateSource(IMFPresentationDescriptor* sourcePD, IMFMediaSource* mediaSource)
{
if (m_metaData) {
@@ -173,15 +146,15 @@ void MFMetaDataControl::updateSource(IMFPresentationDescriptor* sourcePD, IMFMed
continue;
bool common = true;
if (key == PKEY_Author) {
m_availableMetaDatas.push_back(QtMultimedia::Author);
m_availableMetaDatas.push_back(QtMultimedia::MetaData::Author);
} else if (key == PKEY_Title) {
m_availableMetaDatas.push_back(QtMultimedia::Title);
m_availableMetaDatas.push_back(QtMultimedia::MetaData::Title);
} else if (key == PKEY_ParentalRating) {
m_availableMetaDatas.push_back(QtMultimedia::ParentalRating);
m_availableMetaDatas.push_back(QtMultimedia::MetaData::ParentalRating);
} else if (key == PKEY_Comment) {
m_availableMetaDatas.push_back(QtMultimedia::Description);
m_availableMetaDatas.push_back(QtMultimedia::MetaData::Description);
} else if (key == PKEY_Copyright) {
m_availableMetaDatas.push_back(QtMultimedia::Copyright);
m_availableMetaDatas.push_back(QtMultimedia::MetaData::Copyright);
//TODO: add more common keys
} else {
common = false;
@@ -211,24 +184,21 @@ void MFMetaDataControl::updateSource(IMFPresentationDescriptor* sourcePD, IMFMed
#ifdef DEBUG_MEDIAFOUNDATION
qDebug() << "metadata: " << QString::fromUtf16(sName);
#endif
bool common = true;
if (wcscmp(sName, L"Author") == 0) {
m_availableMetaDatas.push_back(QtMultimedia::Author);
m_availableMetaDatas.push_back(QtMultimedia::MetaData::Author);
} else if (wcscmp(sName, L"Title") == 0) {
m_availableMetaDatas.push_back(QtMultimedia::Title);
m_availableMetaDatas.push_back(QtMultimedia::MetaData::Title);
} else if (wcscmp(sName, L"Rating") == 0) {
m_availableMetaDatas.push_back(QtMultimedia::ParentalRating);
m_availableMetaDatas.push_back(QtMultimedia::MetaData::ParentalRating);
} else if (wcscmp(sName, L"Description") == 0) {
m_availableMetaDatas.push_back(QtMultimedia::Description);
m_availableMetaDatas.push_back(QtMultimedia::MetaData::Description);
} else if (wcscmp(sName, L"Copyright") == 0) {
m_availableMetaDatas.push_back(QtMultimedia::Copyright);
m_availableMetaDatas.push_back(QtMultimedia::MetaData::Copyright);
//TODO: add more common keys
} else {
common = false;
m_extendedMetaDatas.push_back(QString::fromUtf16(sName));
m_availableMetaDatas.push_back(QString::fromUtf16(sName));
}
if (common)
m_commonNames.push_back(QString::fromUtf16(sName));
m_commonNames.push_back(QString::fromUtf16(sName));
}
}
PropVariantClear(&varNames);

View File

@@ -56,11 +56,8 @@ public:
bool isMetaDataAvailable() const;
QVariant metaData(QtMultimedia::MetaData key) const;
QList<QtMultimedia::MetaData> availableMetaData() const;
QVariant extendedMetaData(const QString &key) const;
QStringList availableExtendedMetaData() const;
QVariant metaData(const QString &key) const;
QStringList availableMetaData() const;
void updateSource(IMFPresentationDescriptor* sourcePD, IMFMediaSource* mediaSource);
@@ -69,12 +66,9 @@ private:
IPropertyStore *m_content; //for Windows7
IMFMetadata *m_metaData; //for Vista
QList<QtMultimedia::MetaData> m_availableMetaDatas;
QStringList m_availableMetaDatas;
QList<PROPERTYKEY> m_commonKeys; //for Windows7
QStringList m_commonNames; //for Vista
QStringList m_extendedMetaDatas;
QList<PROPERTYKEY> m_extendedKeys; //for Windows7
};
#endif