Fix static initialization order fiasco in some plugins.

Some static variables were initialized using QMediaMetaData
values, which are also statically initialized.

Task-number: QTBUG-39202
Change-Id: Ibedc0a77d96cdfa575aad122c4ec654e6830e1f7
Reviewed-by: Andrew den Exter <andrew.den.exter@qinetic.com.au>
This commit is contained in:
Yoann Lopes
2014-06-03 16:32:46 +02:00
committed by The Qt Project
parent 8a66559e0b
commit eadf1c8c41
5 changed files with 303 additions and 313 deletions

View File

@@ -104,75 +104,85 @@ static q_SHCreateItemFromParsingName sHCreateItemFromParsingName = 0;
#endif #endif
#ifndef QT_NO_WMSDK #ifndef QT_NO_WMSDK
namespace namespace
{ {
struct QWMMetaDataKeyLookup struct QWMMetaDataKey
{ {
QString key; QString qtName;
const wchar_t *token; const wchar_t *wmName;
QWMMetaDataKey(const QString &qtn, const wchar_t *wmn) : qtName(qtn), wmName(wmn) { }
}; };
} }
static const QWMMetaDataKeyLookup qt_wmMetaDataKeys[] = typedef QList<QWMMetaDataKey> QWMMetaDataKeys;
Q_GLOBAL_STATIC(QWMMetaDataKeys, metadataKeys)
static const QWMMetaDataKeys *qt_wmMetaDataKeys()
{ {
{ QMediaMetaData::Title, L"Title" }, if (metadataKeys->isEmpty()) {
{ QMediaMetaData::SubTitle, L"WM/SubTitle" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Title, L"Title"));
{ QMediaMetaData::Author, L"Author" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::SubTitle, L"WM/SubTitle"));
{ QMediaMetaData::Comment, L"Comment" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Author, L"Author"));
{ QMediaMetaData::Description, L"Description" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Comment, L"Comment"));
{ QMediaMetaData::Category, L"WM/Category" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Description, L"Description"));
{ QMediaMetaData::Genre, L"WM/Genre" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Category, L"WM/Category"));
//{ QMediaMetaData::Date, 0 }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Genre, L"WM/Genre"));
{ QMediaMetaData::Year, L"WM/Year" }, //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Date, 0));
{ QMediaMetaData::UserRating, L"Rating" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Year, L"WM/Year"));
//{ QMediaMetaData::MetaDatawords, 0 }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::UserRating, L"Rating"));
{ QMediaMetaData::Language, L"WM/Language" }, //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::MetaDatawords, 0));
{ QMediaMetaData::Publisher, L"WM/Publisher" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Language, L"WM/Language"));
{ QMediaMetaData::Copyright, L"Copyright" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Publisher, L"WM/Publisher"));
{ QMediaMetaData::ParentalRating, L"WM/ParentalRating" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Copyright, L"Copyright"));
//{ QMediaMetaData::RatingOrganisation, L"RatingOrganisation" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::ParentalRating, L"WM/ParentalRating"));
//metadataKeys->append(QWMMetaDataKey(QMediaMetaData::RatingOrganisation, L"RatingOrganisation"));
// Media // Media
{ QMediaMetaData::Size, L"FileSize" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Size, L"FileSize"));
{ QMediaMetaData::MediaType, L"MediaType" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::MediaType, L"MediaType"));
{ QMediaMetaData::Duration, L"Duration" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Duration, L"Duration"));
// Audio // Audio
{ QMediaMetaData::AudioBitRate, L"AudioBitRate" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::AudioBitRate, L"AudioBitRate"));
{ QMediaMetaData::AudioCodec, L"AudioCodec" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::AudioCodec, L"AudioCodec"));
{ QMediaMetaData::ChannelCount, L"ChannelCount" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::ChannelCount, L"ChannelCount"));
{ QMediaMetaData::SampleRate, L"Frequency" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::SampleRate, L"Frequency"));
// Music // Music
{ QMediaMetaData::AlbumTitle, L"WM/AlbumTitle" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::AlbumTitle, L"WM/AlbumTitle"));
{ QMediaMetaData::AlbumArtist, L"WM/AlbumArtist" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::AlbumArtist, L"WM/AlbumArtist"));
{ QMediaMetaData::ContributingArtist, L"Author" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::ContributingArtist, L"Author"));
{ QMediaMetaData::Composer, L"WM/Composer" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Composer, L"WM/Composer"));
{ QMediaMetaData::Conductor, L"WM/Conductor" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Conductor, L"WM/Conductor"));
{ QMediaMetaData::Lyrics, L"WM/Lyrics" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Lyrics, L"WM/Lyrics"));
{ QMediaMetaData::Mood, L"WM/Mood" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Mood, L"WM/Mood"));
{ QMediaMetaData::TrackNumber, L"WM/TrackNumber" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::TrackNumber, L"WM/TrackNumber"));
//{ QMediaMetaData::TrackCount, 0 }, //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::TrackCount, 0));
//{ QMediaMetaData::CoverArtUriSmall, 0 }, //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::CoverArtUriSmall, 0));
//{ QMediaMetaData::CoverArtUriLarge, 0 }, //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::CoverArtUriLarge, 0));
// Image/Video // Image/Video
{ QMediaMetaData::Resolution, L"WM/VideoHeight" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Resolution, L"WM/VideoHeight"));
{ QMediaMetaData::PixelAspectRatio, L"AspectRatioX" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::PixelAspectRatio, L"AspectRatioX"));
// Video // Video
{ QMediaMetaData::VideoFrameRate, L"WM/VideoFrameRate" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::VideoFrameRate, L"WM/VideoFrameRate"));
{ QMediaMetaData::VideoBitRate, L"VideoBitRate" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::VideoBitRate, L"VideoBitRate"));
{ QMediaMetaData::VideoCodec, L"VideoCodec" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::VideoCodec, L"VideoCodec"));
//{ QMediaMetaData::PosterUri, 0 }, //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::PosterUri, 0));
// Movie // Movie
{ QMediaMetaData::ChapterNumber, L"ChapterNumber" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::ChapterNumber, L"ChapterNumber"));
{ QMediaMetaData::Director, L"WM/Director" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Director, L"WM/Director"));
{ QMediaMetaData::LeadPerformer, L"LeadPerformer" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::LeadPerformer, L"LeadPerformer"));
{ QMediaMetaData::Writer, L"WM/Writer" }, metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Writer, L"WM/Writer"));
}; }
return metadataKeys;
}
static QVariant getValue(IWMHeaderInfo *header, const wchar_t *key) static QVariant getValue(IWMHeaderInfo *header, const wchar_t *key)
{ {
@@ -491,32 +501,29 @@ void DirectShowMetaDataControl::updateGraph(IFilterGraph2 *graph, IBaseFilter *s
IWMHeaderInfo *info = com_cast<IWMHeaderInfo>(source, IID_IWMHeaderInfo); IWMHeaderInfo *info = com_cast<IWMHeaderInfo>(source, IID_IWMHeaderInfo);
if (info) { if (info) {
static const int count = sizeof(qt_wmMetaDataKeys) / sizeof(QWMMetaDataKeyLookup); Q_FOREACH (const QWMMetaDataKey &key, *qt_wmMetaDataKeys()) {
for (int i = 0; i < count; ++i) { QVariant var = getValue(info, key.wmName);
QVariant var = getValue(info, qt_wmMetaDataKeys[i].token);
if (var.isValid()) { if (var.isValid()) {
QString key = qt_wmMetaDataKeys[i].key; if (key.qtName == QMediaMetaData::Duration) {
if (key == QMediaMetaData::Duration) {
// duration is provided in 100-nanosecond units, convert to milliseconds // duration is provided in 100-nanosecond units, convert to milliseconds
var = (var.toLongLong() + 10000) / 10000; var = (var.toLongLong() + 10000) / 10000;
} else if (key == QMediaMetaData::Resolution) { } else if (key.qtName == QMediaMetaData::Resolution) {
QSize res; QSize res;
res.setHeight(var.toUInt()); res.setHeight(var.toUInt());
res.setWidth(getValue(info, L"WM/VideoWidth").toUInt()); res.setWidth(getValue(info, L"WM/VideoWidth").toUInt());
var = res; var = res;
} else if (key == QMediaMetaData::VideoFrameRate) { } else if (key.qtName == QMediaMetaData::VideoFrameRate) {
var = var.toReal() / 1000.f; var = var.toReal() / 1000.f;
} else if (key == QMediaMetaData::PixelAspectRatio) { } else if (key.qtName == QMediaMetaData::PixelAspectRatio) {
QSize aspectRatio; QSize aspectRatio;
aspectRatio.setWidth(var.toUInt()); aspectRatio.setWidth(var.toUInt());
aspectRatio.setHeight(getValue(info, L"AspectRatioY").toUInt()); aspectRatio.setHeight(getValue(info, L"AspectRatioY").toUInt());
var = aspectRatio; var = aspectRatio;
} else if (key == QMediaMetaData::UserRating) { } else if (key.qtName == QMediaMetaData::UserRating) {
var = (var.toUInt() - 1) / qreal(98) * 100; var = (var.toUInt() - 1) / qreal(98) * 100;
} }
m_metadata.insert(key, var); m_metadata.insert(key.qtName, var);
} }
} }

View File

@@ -50,13 +50,6 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
struct QGstreamerMetaDataKeyLookup
{
QString key;
const char *token;
QVariant::Type type;
};
static QVariant fromGStreamerOrientation(const QVariant &value) static QVariant fromGStreamerOrientation(const QVariant &value)
{ {
// Note gstreamer tokens either describe the counter clockwise rotation of the // Note gstreamer tokens either describe the counter clockwise rotation of the
@@ -87,87 +80,109 @@ static QVariant toGStreamerOrientation(const QVariant &value)
} }
} }
static const QGstreamerMetaDataKeyLookup qt_gstreamerMetaDataKeys[] = namespace {
struct QGStreamerMetaDataKey
{
QString qtName;
const char *gstName;
QVariant::Type type;
QGStreamerMetaDataKey(const QString &qtn, const char *gstn, QVariant::Type t)
: qtName(qtn)
, gstName(gstn)
, type(t)
{ }
};
}
typedef QList<QGStreamerMetaDataKey> QGStreamerMetaDataKeys;
Q_GLOBAL_STATIC(QGStreamerMetaDataKeys, metadataKeys)
static const QGStreamerMetaDataKeys *qt_gstreamerMetaDataKeys()
{ {
{ QMediaMetaData::Title, GST_TAG_TITLE, QVariant::String }, if (metadataKeys->isEmpty()) {
//{ QMediaMetaData::SubTitle, 0, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Title, GST_TAG_TITLE, QVariant::String));
//{ QMediaMetaData::Author, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::SubTitle, 0, QVariant::String));
{ QMediaMetaData::Comment, GST_TAG_COMMENT, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Author, 0, QVariant::String));
{ QMediaMetaData::Date, GST_TAG_DATE_TIME, QVariant::DateTime }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Comment, GST_TAG_COMMENT, QVariant::String));
{ QMediaMetaData::Description, GST_TAG_DESCRIPTION, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Date, GST_TAG_DATE_TIME, QVariant::DateTime));
//{ QMediaMetaData::Category, 0, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Description, GST_TAG_DESCRIPTION, QVariant::String));
{ QMediaMetaData::Genre, GST_TAG_GENRE, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Category, 0, QVariant::String));
//{ QMediaMetaData::Year, 0, QVariant::Int }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Genre, GST_TAG_GENRE, QVariant::String));
//{ QMediaMetaData::UserRating, , QVariant::Int }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Year, 0, QVariant::Int));
//metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::UserRating, , QVariant::Int));
{ QMediaMetaData::Language, GST_TAG_LANGUAGE_CODE, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Language, GST_TAG_LANGUAGE_CODE, QVariant::String));
{ QMediaMetaData::Publisher, GST_TAG_ORGANIZATION, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Publisher, GST_TAG_ORGANIZATION, QVariant::String));
{ QMediaMetaData::Copyright, GST_TAG_COPYRIGHT, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Copyright, GST_TAG_COPYRIGHT, QVariant::String));
//{ QMediaMetaData::ParentalRating, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::ParentalRating, 0, QVariant::String));
//{ QMediaMetaData::RatingOrganisation, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::RatingOrganisation, 0, QVariant::String));
// Media // Media
//{ QMediaMetaData::Size, 0, QVariant::Int }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Size, 0, QVariant::Int));
//{ QMediaMetaData::MediaType, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::MediaType, 0, QVariant::String));
{ QMediaMetaData::Duration, GST_TAG_DURATION, QVariant::Int }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Duration, GST_TAG_DURATION, QVariant::Int));
// Audio // Audio
{ QMediaMetaData::AudioBitRate, GST_TAG_BITRATE, QVariant::Int }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::AudioBitRate, GST_TAG_BITRATE, QVariant::Int));
{ QMediaMetaData::AudioCodec, GST_TAG_AUDIO_CODEC, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::AudioCodec, GST_TAG_AUDIO_CODEC, QVariant::String));
//{ QMediaMetaData::ChannelCount, 0, QVariant::Int }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::ChannelCount, 0, QVariant::Int));
//{ QMediaMetaData::SampleRate, 0, QVariant::Int }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::SampleRate, 0, QVariant::Int));
// Music // Music
{ QMediaMetaData::AlbumTitle, GST_TAG_ALBUM, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::AlbumTitle, GST_TAG_ALBUM, QVariant::String));
{ QMediaMetaData::AlbumArtist, GST_TAG_ARTIST, QVariant::String}, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::AlbumArtist, GST_TAG_ARTIST, QVariant::String));
{ QMediaMetaData::ContributingArtist, GST_TAG_PERFORMER, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::ContributingArtist, GST_TAG_PERFORMER, QVariant::String));
#if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 19) #if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 19)
{ QMediaMetaData::Composer, GST_TAG_COMPOSER, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Composer, GST_TAG_COMPOSER, QVariant::String));
#endif #endif
//{ QMediaMetaData::Conductor, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Conductor, 0, QVariant::String));
//{ QMediaMetaData::Lyrics, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Lyrics, 0, QVariant::String));
//{ QMediaMetaData::Mood, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Mood, 0, QVariant::String));
{ QMediaMetaData::TrackNumber, GST_TAG_TRACK_NUMBER, QVariant::Int }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::TrackNumber, GST_TAG_TRACK_NUMBER, QVariant::Int));
//{ QMediaMetaData::CoverArtUrlSmall, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::CoverArtUrlSmall, 0, QVariant::String));
//{ QMediaMetaData::CoverArtUrlLarge, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::CoverArtUrlLarge, 0, QVariant::String));
// Image/Video // Image/Video
//{ QMediaMetaData::Resolution, 0, QVariant::Size }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Resolution, 0, QVariant::Size));
//{ QMediaMetaData::PixelAspectRatio, 0, QVariant::Size }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::PixelAspectRatio, 0, QVariant::Size));
// Video // Video
//{ QMediaMetaData::VideoFrameRate, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::VideoFrameRate, 0, QVariant::String));
//{ QMediaMetaData::VideoBitRate, 0, QVariant::Double }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::VideoBitRate, 0, QVariant::Double));
{ QMediaMetaData::VideoCodec, GST_TAG_VIDEO_CODEC, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::VideoCodec, GST_TAG_VIDEO_CODEC, QVariant::String));
//{ QMediaMetaData::PosterUrl, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::PosterUrl, 0, QVariant::String));
// Movie // Movie
//{ QMediaMetaData::ChapterNumber, 0, QVariant::Int }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::ChapterNumber, 0, QVariant::Int));
//{ QMediaMetaData::Director, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Director, 0, QVariant::String));
{ QMediaMetaData::LeadPerformer, GST_TAG_PERFORMER, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::LeadPerformer, GST_TAG_PERFORMER, QVariant::String));
//{ QMediaMetaData::Writer, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Writer, 0, QVariant::String));
#if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 30) #if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 30)
// Photos // Photos
{ QMediaMetaData::CameraManufacturer, GST_TAG_DEVICE_MANUFACTURER, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::CameraManufacturer, GST_TAG_DEVICE_MANUFACTURER, QVariant::String));
{ QMediaMetaData::CameraModel, GST_TAG_DEVICE_MODEL, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::CameraModel, GST_TAG_DEVICE_MODEL, QVariant::String));
//{ QMediaMetaData::Event, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Event, 0, QVariant::String));
//{ QMediaMetaData::Subject, 0, QVariant::String }, //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Subject, 0, QVariant::String));
{ QMediaMetaData::Orientation, GST_TAG_IMAGE_ORIENTATION, QVariant::String }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Orientation, GST_TAG_IMAGE_ORIENTATION, QVariant::String));
// GPS // GPS
{ QMediaMetaData::GPSLatitude, GST_TAG_GEO_LOCATION_LATITUDE, QVariant::Double }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::GPSLatitude, GST_TAG_GEO_LOCATION_LATITUDE, QVariant::Double));
{ QMediaMetaData::GPSLongitude, GST_TAG_GEO_LOCATION_LONGITUDE, QVariant::Double }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::GPSLongitude, GST_TAG_GEO_LOCATION_LONGITUDE, QVariant::Double));
{ QMediaMetaData::GPSAltitude, GST_TAG_GEO_LOCATION_ELEVATION, QVariant::Double }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::GPSAltitude, GST_TAG_GEO_LOCATION_ELEVATION, QVariant::Double));
{ QMediaMetaData::GPSTrack, GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, QVariant::Double }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::GPSTrack, GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, QVariant::Double));
{ QMediaMetaData::GPSSpeed, GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, QVariant::Double }, metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::GPSSpeed, GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, QVariant::Double));
{ QMediaMetaData::GPSImgDirection, GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, QVariant::Double } metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::GPSImgDirection, GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, QVariant::Double));
#endif #endif
}; }
return metadataKeys;
}
CameraBinMetaData::CameraBinMetaData(QObject *parent) CameraBinMetaData::CameraBinMetaData(QObject *parent)
:QMetaDataWriterControl(parent) :QMetaDataWriterControl(parent)
@@ -183,14 +198,9 @@ QVariant CameraBinMetaData::metaData(const QString &key) const
return (metersPerSec * 3600) / 1000; return (metersPerSec * 3600) / 1000;
} }
static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup); Q_FOREACH (const QGStreamerMetaDataKey &metadataKey, *qt_gstreamerMetaDataKeys()) {
if (metadataKey.qtName == key)
for (int i = 0; i < count; ++i) { return m_values.value(QByteArray::fromRawData(metadataKey.gstName, qstrlen(metadataKey.gstName)));
if (qt_gstreamerMetaDataKeys[i].key == key) {
const char *name = qt_gstreamerMetaDataKeys[i].token;
return m_values.value(QByteArray::fromRawData(name, qstrlen(name)));
}
} }
return QVariant(); return QVariant();
} }
@@ -207,14 +217,12 @@ void CameraBinMetaData::setMetaData(const QString &key, const QVariant &value)
} }
} }
static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup); Q_FOREACH (const QGStreamerMetaDataKey &metadataKey, *qt_gstreamerMetaDataKeys()) {
if (metadataKey.qtName == key) {
for (int i = 0; i < count; ++i) { const char *name = metadataKey.gstName;
if (qt_gstreamerMetaDataKeys[i].key == key) {
const char *name = qt_gstreamerMetaDataKeys[i].token;
if (correctedValue.isValid()) { if (correctedValue.isValid()) {
correctedValue.convert(qt_gstreamerMetaDataKeys[i].type); correctedValue.convert(metadataKey.type);
m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), correctedValue); m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), correctedValue);
} else { } else {
m_values.remove(QByteArray::fromRawData(name, qstrlen(name))); m_values.remove(QByteArray::fromRawData(name, qstrlen(name)));
@@ -232,14 +240,12 @@ QStringList CameraBinMetaData::availableMetaData() const
{ {
static QMap<QByteArray, QString> keysMap; static QMap<QByteArray, QString> keysMap;
if (keysMap.isEmpty()) { if (keysMap.isEmpty()) {
const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup); Q_FOREACH (const QGStreamerMetaDataKey &metadataKey, *qt_gstreamerMetaDataKeys())
for (int i = 0; i < count; ++i) { keysMap[QByteArray(metadataKey.gstName)] = metadataKey.qtName;
keysMap[QByteArray(qt_gstreamerMetaDataKeys[i].token)] = qt_gstreamerMetaDataKeys[i].key;
}
} }
QStringList res; QStringList res;
foreach (const QByteArray &key, m_values.keys()) { Q_FOREACH (const QByteArray &key, m_values.keys()) {
QString tag = keysMap.value(key); QString tag = keysMap.value(key);
if (!tag.isEmpty()) if (!tag.isEmpty())
res.append(tag); res.append(tag);

View File

@@ -46,80 +46,82 @@
#include <gst/gst.h> #include <gst/gst.h>
#include <gst/gstversion.h> #include <gst/gstversion.h>
struct QGstreamerMetaDataKeyLookup
typedef QMap<QString, QByteArray> QGstreamerMetaDataKeyLookup;
Q_GLOBAL_STATIC(QGstreamerMetaDataKeyLookup, metadataKeys)
static const QGstreamerMetaDataKeyLookup *qt_gstreamerMetaDataKeys()
{ {
QString key; if (metadataKeys->isEmpty()) {
const char *token; metadataKeys->insert(QMediaMetaData::Title, GST_TAG_TITLE);
}; metadataKeys->insert(QMediaMetaData::SubTitle, 0);
//metadataKeys->insert(QMediaMetaData::Author, 0);
metadataKeys->insert(QMediaMetaData::Comment, GST_TAG_COMMENT);
metadataKeys->insert(QMediaMetaData::Description, GST_TAG_DESCRIPTION);
//metadataKeys->insert(QMediaMetaData::Category, 0);
metadataKeys->insert(QMediaMetaData::Genre, GST_TAG_GENRE);
//metadataKeys->insert(QMediaMetaData::Year, 0);
//metadataKeys->insert(QMediaMetaData::UserRating, 0);
static const QGstreamerMetaDataKeyLookup qt_gstreamerMetaDataKeys[] = metadataKeys->insert(QMediaMetaData::Language, GST_TAG_LANGUAGE_CODE);
{
{ QMediaMetaData::Title, GST_TAG_TITLE },
//{ QMediaMetaData::SubTitle, 0 },
//{ QMediaMetaData::Author, 0 },
{ QMediaMetaData::Comment, GST_TAG_COMMENT },
{ QMediaMetaData::Description, GST_TAG_DESCRIPTION },
//{ QMediaMetaData::Category, 0 },
{ QMediaMetaData::Genre, GST_TAG_GENRE },
//{ QMediaMetaData::Year, 0 },
//{ QMediaMetaData::UserRating, 0 },
{ QMediaMetaData::Language, GST_TAG_LANGUAGE_CODE }, metadataKeys->insert(QMediaMetaData::Publisher, GST_TAG_ORGANIZATION);
metadataKeys->insert(QMediaMetaData::Copyright, GST_TAG_COPYRIGHT);
//metadataKeys->insert(QMediaMetaData::ParentalRating, 0);
//metadataKeys->insert(QMediaMetaData::RatingOrganisation, 0);
{ QMediaMetaData::Publisher, GST_TAG_ORGANIZATION }, // Media
{ QMediaMetaData::Copyright, GST_TAG_COPYRIGHT }, //metadataKeys->insert(QMediaMetaData::Size, 0);
//{ QMediaMetaData::ParentalRating, 0 }, //metadataKeys->insert(QMediaMetaData::MediaType, 0);
//{ QMediaMetaData::RatingOrganisation, 0 }, metadataKeys->insert(QMediaMetaData::Duration, GST_TAG_DURATION);
// Media // Audio
//{ QMediaMetaData::Size, 0 }, metadataKeys->insert(QMediaMetaData::AudioBitRate, GST_TAG_BITRATE);
//{ QMediaMetaData::MediaType, 0 }, metadataKeys->insert(QMediaMetaData::AudioCodec, GST_TAG_AUDIO_CODEC);
{ QMediaMetaData::Duration, GST_TAG_DURATION }, //metadataKeys->insert(QMediaMetaData::ChannelCount, 0);
//metadataKeys->insert(QMediaMetaData::SampleRate, 0);
// Audio // Music
{ QMediaMetaData::AudioBitRate, GST_TAG_BITRATE }, metadataKeys->insert(QMediaMetaData::AlbumTitle, GST_TAG_ALBUM);
{ QMediaMetaData::AudioCodec, GST_TAG_AUDIO_CODEC }, metadataKeys->insert(QMediaMetaData::AlbumArtist, GST_TAG_ARTIST);
//{ QMediaMetaData::ChannelCount, 0 }, metadataKeys->insert(QMediaMetaData::ContributingArtist, GST_TAG_PERFORMER);
//{ QMediaMetaData::SampleRate, 0 },
// Music
{ QMediaMetaData::AlbumTitle, GST_TAG_ALBUM },
{ QMediaMetaData::AlbumArtist, GST_TAG_ARTIST},
{ QMediaMetaData::ContributingArtist, GST_TAG_PERFORMER },
#if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 19) #if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 19)
{ QMediaMetaData::Composer, GST_TAG_COMPOSER }, metadataKeys->insert(QMediaMetaData::Composer, GST_TAG_COMPOSER);
#endif #endif
//{ QMediaMetaData::Conductor, 0 }, //metadataKeys->insert(QMediaMetaData::Conductor, 0);
//{ QMediaMetaData::Lyrics, 0 }, //metadataKeys->insert(QMediaMetaData::Lyrics, 0);
//{ QMediaMetaData::Mood, 0 }, //metadataKeys->insert(QMediaMetaData::Mood, 0);
{ QMediaMetaData::TrackNumber, GST_TAG_TRACK_NUMBER }, metadataKeys->insert(QMediaMetaData::TrackNumber, GST_TAG_TRACK_NUMBER);
//{ QMediaMetaData::CoverArtUrlSmall, 0 }, //metadataKeys->insert(QMediaMetaData::CoverArtUrlSmall, 0);
//{ QMediaMetaData::CoverArtUrlLarge, 0 }, //metadataKeys->insert(QMediaMetaData::CoverArtUrlLarge, 0);
// Image/Video // Image/Video
//{ QMediaMetaData::Resolution, 0 }, //metadataKeys->insert(QMediaMetaData::Resolution, 0);
//{ QMediaMetaData::PixelAspectRatio, 0 }, //metadataKeys->insert(QMediaMetaData::PixelAspectRatio, 0);
// Video // Video
//{ QMediaMetaData::VideoFrameRate, 0 }, //metadataKeys->insert(QMediaMetaData::VideoFrameRate, 0);
//{ QMediaMetaData::VideoBitRate, 0 }, //metadataKeys->insert(QMediaMetaData::VideoBitRate, 0);
{ QMediaMetaData::VideoCodec, GST_TAG_VIDEO_CODEC }, metadataKeys->insert(QMediaMetaData::VideoCodec, GST_TAG_VIDEO_CODEC);
//{ QMediaMetaData::PosterUrl, 0 }, //metadataKeys->insert(QMediaMetaData::PosterUrl, 0);
// Movie // Movie
//{ QMediaMetaData::ChapterNumber, 0 }, //metadataKeys->insert(QMediaMetaData::ChapterNumber, 0);
//{ QMediaMetaData::Director, 0 }, //metadataKeys->insert(QMediaMetaData::Director, 0);
{ QMediaMetaData::LeadPerformer, GST_TAG_PERFORMER }, metadataKeys->insert(QMediaMetaData::LeadPerformer, GST_TAG_PERFORMER);
//{ QMediaMetaData::Writer, 0 }, //metadataKeys->insert(QMediaMetaData::Writer, 0);
// Photos // Photos
//{ QMediaMetaData::CameraManufacturer, 0 }, //metadataKeys->insert(QMediaMetaData::CameraManufacturer, 0);
//{ QMediaMetaData::CameraModel, 0 }, //metadataKeys->insert(QMediaMetaData::CameraModel, 0);
//{ QMediaMetaData::Event, 0 }, //metadataKeys->insert(QMediaMetaData::Event, 0);
//{ QMediaMetaData::Subject, 0 } //metadataKeys->insert(QMediaMetaData::Subject, 0 }
}; }
return metadataKeys;
}
QGstreamerCaptureMetaDataControl::QGstreamerCaptureMetaDataControl(QObject *parent) QGstreamerCaptureMetaDataControl::QGstreamerCaptureMetaDataControl(QObject *parent)
:QMetaDataWriterControl(parent) :QMetaDataWriterControl(parent)
@@ -128,50 +130,30 @@ QGstreamerCaptureMetaDataControl::QGstreamerCaptureMetaDataControl(QObject *pare
QVariant QGstreamerCaptureMetaDataControl::metaData(const QString &key) const QVariant QGstreamerCaptureMetaDataControl::metaData(const QString &key) const
{ {
static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup); QGstreamerMetaDataKeyLookup::const_iterator it = qt_gstreamerMetaDataKeys()->find(key);
if (it != qt_gstreamerMetaDataKeys()->constEnd())
return m_values.value(it.value());
for (int i = 0; i < count; ++i) {
if (qt_gstreamerMetaDataKeys[i].key == key) {
const char *name = qt_gstreamerMetaDataKeys[i].token;
return m_values.value(QByteArray::fromRawData(name, qstrlen(name)));
}
}
return QVariant(); return QVariant();
} }
void QGstreamerCaptureMetaDataControl::setMetaData(const QString &key, const QVariant &value) void QGstreamerCaptureMetaDataControl::setMetaData(const QString &key, const QVariant &value)
{ {
static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup); QGstreamerMetaDataKeyLookup::const_iterator it = qt_gstreamerMetaDataKeys()->find(key);
if (it != qt_gstreamerMetaDataKeys()->constEnd()) {
m_values.insert(it.value(), value);
for (int i = 0; i < count; ++i) { emit QMetaDataWriterControl::metaDataChanged();
if (qt_gstreamerMetaDataKeys[i].key == key) { emit QMetaDataWriterControl::metaDataChanged(key, value);
const char *name = qt_gstreamerMetaDataKeys[i].token; emit metaDataChanged(m_values);
m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), value);
emit QMetaDataWriterControl::metaDataChanged();
emit QMetaDataWriterControl::metaDataChanged(key, value);
emit metaDataChanged(m_values);
return;
}
} }
} }
QStringList QGstreamerCaptureMetaDataControl::availableMetaData() const QStringList QGstreamerCaptureMetaDataControl::availableMetaData() const
{ {
static QMap<QByteArray, QString> keysMap;
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; QStringList res;
foreach (const QByteArray &key, m_values.keys()) { foreach (const QByteArray &key, m_values.keys()) {
QString tag = keysMap.value(key); QString tag = qt_gstreamerMetaDataKeys()->key(key);
if (!tag.isEmpty()) if (!tag.isEmpty())
res.append(tag); res.append(tag);
} }

View File

@@ -48,90 +48,86 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
struct QGstreamerMetaDataKeyLookup typedef QMap<QByteArray, QString> QGstreamerMetaDataKeyLookup;
Q_GLOBAL_STATIC(QGstreamerMetaDataKeyLookup, metadataKeys)
static const QGstreamerMetaDataKeyLookup *qt_gstreamerMetaDataKeys()
{ {
QString key; if (metadataKeys->isEmpty()) {
const char *token; metadataKeys->insert(GST_TAG_TITLE, QMediaMetaData::Title);
}; //metadataKeys->insert(0, QMediaMetaData::SubTitle);
//metadataKeys->insert(0, QMediaMetaData::Author);
metadataKeys->insert(GST_TAG_COMMENT, QMediaMetaData::Comment);
metadataKeys->insert(GST_TAG_DESCRIPTION, QMediaMetaData::Description);
//metadataKeys->insert(0, QMediaMetaData::Category);
metadataKeys->insert(GST_TAG_GENRE, QMediaMetaData::Genre);
metadataKeys->insert("year", QMediaMetaData::Year);
//metadataKeys->insert(0, QMediaMetaData::UserRating);
static const QGstreamerMetaDataKeyLookup qt_gstreamerMetaDataKeys[] = metadataKeys->insert(GST_TAG_LANGUAGE_CODE, QMediaMetaData::Language);
{
{ QMediaMetaData::Title, GST_TAG_TITLE },
//{ QMediaMetaData::SubTitle, 0 },
//{ QMediaMetaData::Author, 0 },
{ QMediaMetaData::Comment, GST_TAG_COMMENT },
{ QMediaMetaData::Description, GST_TAG_DESCRIPTION },
//{ QMediaMetaData::Category, 0 },
{ QMediaMetaData::Genre, GST_TAG_GENRE },
{ QMediaMetaData::Year, "year" },
//{ QMediaMetaData::UserRating, 0 },
{ QMediaMetaData::Language, GST_TAG_LANGUAGE_CODE }, metadataKeys->insert(GST_TAG_ORGANIZATION, QMediaMetaData::Publisher);
metadataKeys->insert(GST_TAG_COPYRIGHT, QMediaMetaData::Copyright);
//metadataKeys->insert(0, QMediaMetaData::ParentalRating);
//metadataKeys->insert(0, QMediaMetaData::RatingOrganisation);
{ QMediaMetaData::Publisher, GST_TAG_ORGANIZATION }, // Media
{ QMediaMetaData::Copyright, GST_TAG_COPYRIGHT }, //metadataKeys->insert(0, QMediaMetaData::Size);
//{ QMediaMetaData::ParentalRating, 0 }, //metadataKeys->insert(0,QMediaMetaData::MediaType );
//{ QMediaMetaData::RatingOrganisation, 0 }, metadataKeys->insert(GST_TAG_DURATION, QMediaMetaData::Duration);
// Media // Audio
//{ QMediaMetaData::Size, 0 }, metadataKeys->insert(GST_TAG_BITRATE, QMediaMetaData::AudioBitRate);
//{ QMediaMetaData::MediaType, 0 }, metadataKeys->insert(GST_TAG_AUDIO_CODEC, QMediaMetaData::AudioCodec);
{ QMediaMetaData::Duration, GST_TAG_DURATION }, //metadataKeys->insert(0, QMediaMetaData::ChannelCount);
//metadataKeys->insert(0, QMediaMetaData::SampleRate);
// Audio // Music
{ QMediaMetaData::AudioBitRate, GST_TAG_BITRATE }, metadataKeys->insert(GST_TAG_ALBUM, QMediaMetaData::AlbumTitle);
{ QMediaMetaData::AudioCodec, GST_TAG_AUDIO_CODEC }, metadataKeys->insert(GST_TAG_ARTIST, QMediaMetaData::AlbumArtist);
//{ QMediaMetaData::ChannelCount, 0 }, metadataKeys->insert(GST_TAG_PERFORMER, QMediaMetaData::ContributingArtist);
//{ QMediaMetaData::SampleRate, 0 },
// Music
{ QMediaMetaData::AlbumTitle, GST_TAG_ALBUM },
{ QMediaMetaData::AlbumArtist, GST_TAG_ARTIST},
{ QMediaMetaData::ContributingArtist, GST_TAG_PERFORMER },
#if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 19) #if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 19)
{ QMediaMetaData::Composer, GST_TAG_COMPOSER }, metadataKeys->insert(GST_TAG_COMPOSER, QMediaMetaData::Composer);
#endif #endif
//{ QMediaMetaData::Conductor, 0 }, //metadataKeys->insert(0, QMediaMetaData::Conductor);
//{ QMediaMetaData::Lyrics, 0 }, //metadataKeys->insert(0, QMediaMetaData::Lyrics);
//{ QMediaMetaData::Mood, 0 }, //metadataKeys->insert(0, QMediaMetaData::Mood);
{ QMediaMetaData::TrackNumber, GST_TAG_TRACK_NUMBER }, metadataKeys->insert(GST_TAG_TRACK_NUMBER, QMediaMetaData::TrackNumber);
//{ QMediaMetaData::CoverArtUrlSmall, 0 }, //metadataKeys->insert(0, QMediaMetaData::CoverArtUrlSmall);
//{ QMediaMetaData::CoverArtUrlLarge, 0 }, //metadataKeys->insert(0, QMediaMetaData::CoverArtUrlLarge);
// Image/Video // Image/Video
{ QMediaMetaData::Resolution, "resolution" }, metadataKeys->insert("resolution", QMediaMetaData::Resolution);
{ QMediaMetaData::PixelAspectRatio, "pixel-aspect-ratio" }, metadataKeys->insert("pixel-aspect-ratio", QMediaMetaData::PixelAspectRatio);
// Video // Video
//{ QMediaMetaData::VideoFrameRate, 0 }, //metadataKeys->insert(0, QMediaMetaData::VideoFrameRate);
//{ QMediaMetaData::VideoBitRate, 0 }, //metadataKeys->insert(0, QMediaMetaData::VideoBitRate);
{ QMediaMetaData::VideoCodec, GST_TAG_VIDEO_CODEC }, metadataKeys->insert(GST_TAG_VIDEO_CODEC, QMediaMetaData::VideoCodec);
//{ QMediaMetaData::PosterUrl, 0 }, //metadataKeys->insert(0, QMediaMetaData::PosterUrl);
// Movie // Movie
//{ QMediaMetaData::ChapterNumber, 0 }, //metadataKeys->insert(0, QMediaMetaData::ChapterNumber);
//{ QMediaMetaData::Director, 0 }, //metadataKeys->insert(0, QMediaMetaData::Director);
{ QMediaMetaData::LeadPerformer, GST_TAG_PERFORMER }, metadataKeys->insert(GST_TAG_PERFORMER, QMediaMetaData::LeadPerformer);
//{ QMediaMetaData::Writer, 0 }, //metadataKeys->insert(0, QMediaMetaData::Writer);
// Photos // Photos
//{ QMediaMetaData::CameraManufacturer, 0 }, //metadataKeys->insert(0, QMediaMetaData::CameraManufacturer);
//{ QMediaMetaData::CameraModel, 0 }, //metadataKeys->insert(0, QMediaMetaData::CameraModel);
//{ QMediaMetaData::Event, 0 }, //metadataKeys->insert(0, QMediaMetaData::Event);
//{ QMediaMetaData::Subject, 0 } //metadataKeys->insert(0, QMediaMetaData::Subject);
}; }
return metadataKeys;
}
QGstreamerMetaDataProvider::QGstreamerMetaDataProvider(QGstreamerPlayerSession *session, QObject *parent) QGstreamerMetaDataProvider::QGstreamerMetaDataProvider(QGstreamerPlayerSession *session, QObject *parent)
: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()
@@ -167,8 +163,8 @@ void QGstreamerMetaDataProvider::updateTags()
QMapIterator<QByteArray ,QVariant> i(m_session->tags()); QMapIterator<QByteArray ,QVariant> i(m_session->tags());
while (i.hasNext()) { while (i.hasNext()) {
i.next(); i.next();
//use gstreamer native keys for elements not in m_keysMap //use gstreamer native keys for elements not in our key map
QString key = m_keysMap.value(i.key(), i.key()); QString key = qt_gstreamerMetaDataKeys()->value(i.key(), i.key());
m_tags.insert(key, i.value()); m_tags.insert(key, i.value());
if (i.value() != oldTags.value(key)) { if (i.value() != oldTags.value(key)) {
changed = true; changed = true;

View File

@@ -67,7 +67,6 @@ private slots:
private: private:
QGstreamerPlayerSession *m_session; QGstreamerPlayerSession *m_session;
QVariantMap m_tags; QVariantMap m_tags;
QMap<QByteArray, QString> m_keysMap;
}; };
QT_END_NAMESPACE QT_END_NAMESPACE