diff options
author | Sergio Ahumada <sahumada@blackberry.com> | 2014-06-11 10:05:00 +0200 |
---|---|---|
committer | Sergio Ahumada <sahumada@blackberry.com> | 2014-06-11 10:05:00 +0200 |
commit | 150ff6662de1312e3ba9d000895d80dd5805ea5b (patch) | |
tree | 6f9fc0289c329022551bcc54ff6279974c9599eb | |
parent | d71aaca893a27a8a9a6712a59313300b87226a4f (diff) | |
parent | b99a4b3025f08df8f33efb02897397ae5e404acf (diff) |
Merge remote-tracking branch 'origin/stable' into 5.3
Change-Id: I689554fb6e47b8183013de271a776909a05398dc
8 files changed, 353 insertions, 353 deletions
diff --git a/src/imports/multimedia/multimedia.cpp b/src/imports/multimedia/multimedia.cpp index 94b697e85..5954db22c 100644 --- a/src/imports/multimedia/multimedia.cpp +++ b/src/imports/multimedia/multimedia.cpp @@ -95,6 +95,11 @@ public: qmlRegisterUncreatableType<QDeclarativeCameraImageProcessing>(uri, 5, 0, "CameraImageProcessing", trUtf8("CameraImageProcessing is provided by Camera")); + // Make types available for the 5.3 version + // Adding "import QtMultimedia 5.3" in QML will fail unless at least one type is registered + // for that version. + qmlRegisterType<QSoundEffect>(uri, 5, 3, "SoundEffect"); + qmlRegisterType<QDeclarativeMediaMetaData>(); } diff --git a/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java b/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java index 32d3496ee..ff92af771 100644 --- a/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java +++ b/src/plugins/android/jar/src/org/qtproject/qt5/android/multimedia/QtAndroidMediaPlayer.java @@ -379,6 +379,7 @@ public class QtAndroidMediaPlayer mMediaPlayer.setDisplay(mSurfaceHolder); AssetFileDescriptor afd = null; + FileInputStream fis = null; try { mUri = Uri.parse(path); final boolean inAssets = (mUri.getScheme().compareTo("assets") == 0); @@ -390,8 +391,8 @@ public class QtAndroidMediaPlayer final long length = afd.getLength(); FileDescriptor fd = afd.getFileDescriptor(); mMediaPlayer.setDataSource(fd, offset, length); - } else if (mUri.getScheme().compareTo("tempfile") == 0) { - FileInputStream fis = new FileInputStream(mUri.getPath()); + } else if (mUri.getScheme().compareTo("file") == 0) { + fis = new FileInputStream(mUri.getPath()); FileDescriptor fd = fis.getFD(); mMediaPlayer.setDataSource(fd); } else { @@ -409,9 +410,13 @@ public class QtAndroidMediaPlayer } catch (final NullPointerException e) { Log.d(TAG, "" + e.getMessage()); } finally { - if (afd !=null) { - try { afd.close(); } catch (final IOException ioe) { /* Ignore... */ } - } + try { + if (afd != null) + afd.close(); + if (fis != null) + fis.close(); + } catch (final IOException ioe) { /* Ignore... */ } + if ((mState & State.Initialized) == 0) { setState(State.Error); onErrorNative(MediaPlayer.MEDIA_ERROR_UNKNOWN, diff --git a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp index 6565b0545..6817d65b0 100644 --- a/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp +++ b/src/plugins/android/src/mediaplayer/qandroidmediaplayercontrol.cpp @@ -312,7 +312,7 @@ void QAndroidMediaPlayerControl::setMedia(const QMediaContent &mediaContent, const QString path = url.toString().mid(3); mTempFile.reset(QTemporaryFile::createNativeFile(path)); if (!mTempFile.isNull()) - mediaPath = QLatin1String("tempfile://") + mTempFile->fileName(); + mediaPath = QStringLiteral("file://") + mTempFile->fileName(); } else { mediaPath = url.toString(); } diff --git a/src/plugins/directshow/player/directshowmetadatacontrol.cpp b/src/plugins/directshow/player/directshowmetadatacontrol.cpp index 51d9574ba..96c9fab8b 100644 --- a/src/plugins/directshow/player/directshowmetadatacontrol.cpp +++ b/src/plugins/directshow/player/directshowmetadatacontrol.cpp @@ -104,75 +104,85 @@ static q_SHCreateItemFromParsingName sHCreateItemFromParsingName = 0; #endif #ifndef QT_NO_WMSDK + namespace { - struct QWMMetaDataKeyLookup + struct QWMMetaDataKey { - QString key; - const wchar_t *token; + QString qtName; + 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" }, - { QMediaMetaData::SubTitle, L"WM/SubTitle" }, - { QMediaMetaData::Author, L"Author" }, - { QMediaMetaData::Comment, L"Comment" }, - { QMediaMetaData::Description, L"Description" }, - { QMediaMetaData::Category, L"WM/Category" }, - { QMediaMetaData::Genre, L"WM/Genre" }, - //{ QMediaMetaData::Date, 0 }, - { QMediaMetaData::Year, L"WM/Year" }, - { QMediaMetaData::UserRating, L"Rating" }, - //{ QMediaMetaData::MetaDatawords, 0 }, - { QMediaMetaData::Language, L"WM/Language" }, - { QMediaMetaData::Publisher, L"WM/Publisher" }, - { QMediaMetaData::Copyright, L"Copyright" }, - { QMediaMetaData::ParentalRating, L"WM/ParentalRating" }, - //{ QMediaMetaData::RatingOrganisation, L"RatingOrganisation" }, - - // Media - { QMediaMetaData::Size, L"FileSize" }, - { QMediaMetaData::MediaType, L"MediaType" }, - { QMediaMetaData::Duration, L"Duration" }, - - // Audio - { QMediaMetaData::AudioBitRate, L"AudioBitRate" }, - { QMediaMetaData::AudioCodec, L"AudioCodec" }, - { QMediaMetaData::ChannelCount, L"ChannelCount" }, - { QMediaMetaData::SampleRate, L"Frequency" }, - - // Music - { QMediaMetaData::AlbumTitle, L"WM/AlbumTitle" }, - { QMediaMetaData::AlbumArtist, L"WM/AlbumArtist" }, - { QMediaMetaData::ContributingArtist, L"Author" }, - { QMediaMetaData::Composer, L"WM/Composer" }, - { QMediaMetaData::Conductor, L"WM/Conductor" }, - { QMediaMetaData::Lyrics, L"WM/Lyrics" }, - { QMediaMetaData::Mood, L"WM/Mood" }, - { QMediaMetaData::TrackNumber, L"WM/TrackNumber" }, - //{ QMediaMetaData::TrackCount, 0 }, - //{ QMediaMetaData::CoverArtUriSmall, 0 }, - //{ QMediaMetaData::CoverArtUriLarge, 0 }, - - // Image/Video - { QMediaMetaData::Resolution, L"WM/VideoHeight" }, - { QMediaMetaData::PixelAspectRatio, L"AspectRatioX" }, - - // Video - { QMediaMetaData::VideoFrameRate, L"WM/VideoFrameRate" }, - { QMediaMetaData::VideoBitRate, L"VideoBitRate" }, - { QMediaMetaData::VideoCodec, L"VideoCodec" }, - - //{ QMediaMetaData::PosterUri, 0 }, - - // Movie - { QMediaMetaData::ChapterNumber, L"ChapterNumber" }, - { QMediaMetaData::Director, L"WM/Director" }, - { QMediaMetaData::LeadPerformer, L"LeadPerformer" }, - { QMediaMetaData::Writer, L"WM/Writer" }, -}; + if (metadataKeys->isEmpty()) { + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Title, L"Title")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::SubTitle, L"WM/SubTitle")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Author, L"Author")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Comment, L"Comment")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Description, L"Description")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Category, L"WM/Category")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Genre, L"WM/Genre")); + //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Date, 0)); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Year, L"WM/Year")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::UserRating, L"Rating")); + //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::MetaDatawords, 0)); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Language, L"WM/Language")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Publisher, L"WM/Publisher")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Copyright, L"Copyright")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::ParentalRating, L"WM/ParentalRating")); + //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::RatingOrganisation, L"RatingOrganisation")); + + // Media + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Size, L"FileSize")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::MediaType, L"MediaType")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Duration, L"Duration")); + + // Audio + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::AudioBitRate, L"AudioBitRate")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::AudioCodec, L"AudioCodec")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::ChannelCount, L"ChannelCount")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::SampleRate, L"Frequency")); + + // Music + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::AlbumTitle, L"WM/AlbumTitle")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::AlbumArtist, L"WM/AlbumArtist")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::ContributingArtist, L"Author")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Composer, L"WM/Composer")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Conductor, L"WM/Conductor")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Lyrics, L"WM/Lyrics")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Mood, L"WM/Mood")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::TrackNumber, L"WM/TrackNumber")); + //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::TrackCount, 0)); + //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::CoverArtUriSmall, 0)); + //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::CoverArtUriLarge, 0)); + + // Image/Video + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Resolution, L"WM/VideoHeight")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::PixelAspectRatio, L"AspectRatioX")); + + // Video + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::VideoFrameRate, L"WM/VideoFrameRate")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::VideoBitRate, L"VideoBitRate")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::VideoCodec, L"VideoCodec")); + + //metadataKeys->append(QWMMetaDataKey(QMediaMetaData::PosterUri, 0)); + + // Movie + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::ChapterNumber, L"ChapterNumber")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Director, L"WM/Director")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::LeadPerformer, L"LeadPerformer")); + metadataKeys->append(QWMMetaDataKey(QMediaMetaData::Writer, L"WM/Writer")); + } + + return metadataKeys; +} 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); if (info) { - static const int count = sizeof(qt_wmMetaDataKeys) / sizeof(QWMMetaDataKeyLookup); - for (int i = 0; i < count; ++i) { - QVariant var = getValue(info, qt_wmMetaDataKeys[i].token); + Q_FOREACH (const QWMMetaDataKey &key, *qt_wmMetaDataKeys()) { + QVariant var = getValue(info, key.wmName); if (var.isValid()) { - QString key = qt_wmMetaDataKeys[i].key; - - if (key == QMediaMetaData::Duration) { + if (key.qtName == QMediaMetaData::Duration) { // duration is provided in 100-nanosecond units, convert to milliseconds var = (var.toLongLong() + 10000) / 10000; - } else if (key == QMediaMetaData::Resolution) { + } else if (key.qtName == QMediaMetaData::Resolution) { QSize res; res.setHeight(var.toUInt()); res.setWidth(getValue(info, L"WM/VideoWidth").toUInt()); var = res; - } else if (key == QMediaMetaData::VideoFrameRate) { + } else if (key.qtName == QMediaMetaData::VideoFrameRate) { var = var.toReal() / 1000.f; - } else if (key == QMediaMetaData::PixelAspectRatio) { + } else if (key.qtName == QMediaMetaData::PixelAspectRatio) { QSize aspectRatio; aspectRatio.setWidth(var.toUInt()); aspectRatio.setHeight(getValue(info, L"AspectRatioY").toUInt()); var = aspectRatio; - } else if (key == QMediaMetaData::UserRating) { + } else if (key.qtName == QMediaMetaData::UserRating) { var = (var.toUInt() - 1) / qreal(98) * 100; } - m_metadata.insert(key, var); + m_metadata.insert(key.qtName, var); } } diff --git a/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp b/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp index c2b7c33c3..170d25a07 100644 --- a/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinmetadata.cpp @@ -50,13 +50,6 @@ QT_BEGIN_NAMESPACE -struct QGstreamerMetaDataKeyLookup -{ - QString key; - const char *token; - QVariant::Type type; -}; - static QVariant fromGStreamerOrientation(const QVariant &value) { // 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 }, - //{ QMediaMetaData::SubTitle, 0, QVariant::String }, - //{ QMediaMetaData::Author, 0, QVariant::String }, - { QMediaMetaData::Comment, GST_TAG_COMMENT, QVariant::String }, - { QMediaMetaData::Date, GST_TAG_DATE_TIME, QVariant::DateTime }, - { QMediaMetaData::Description, GST_TAG_DESCRIPTION, QVariant::String }, - //{ QMediaMetaData::Category, 0, QVariant::String }, - { QMediaMetaData::Genre, GST_TAG_GENRE, QVariant::String }, - //{ QMediaMetaData::Year, 0, QVariant::Int }, - //{ QMediaMetaData::UserRating, , QVariant::Int }, - - { QMediaMetaData::Language, GST_TAG_LANGUAGE_CODE, QVariant::String }, - - { QMediaMetaData::Publisher, GST_TAG_ORGANIZATION, QVariant::String }, - { QMediaMetaData::Copyright, GST_TAG_COPYRIGHT, QVariant::String }, - //{ QMediaMetaData::ParentalRating, 0, QVariant::String }, - //{ QMediaMetaData::RatingOrganisation, 0, QVariant::String }, - - // Media - //{ QMediaMetaData::Size, 0, QVariant::Int }, - //{ QMediaMetaData::MediaType, 0, QVariant::String }, - { QMediaMetaData::Duration, GST_TAG_DURATION, QVariant::Int }, - - // Audio - { QMediaMetaData::AudioBitRate, GST_TAG_BITRATE, QVariant::Int }, - { QMediaMetaData::AudioCodec, GST_TAG_AUDIO_CODEC, QVariant::String }, - //{ QMediaMetaData::ChannelCount, 0, QVariant::Int }, - //{ QMediaMetaData::SampleRate, 0, QVariant::Int }, - - // Music - { QMediaMetaData::AlbumTitle, GST_TAG_ALBUM, QVariant::String }, - { QMediaMetaData::AlbumArtist, GST_TAG_ARTIST, QVariant::String}, - { QMediaMetaData::ContributingArtist, GST_TAG_PERFORMER, QVariant::String }, + if (metadataKeys->isEmpty()) { + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Title, GST_TAG_TITLE, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::SubTitle, 0, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Author, 0, QVariant::String)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Comment, GST_TAG_COMMENT, QVariant::String)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Date, GST_TAG_DATE_TIME, QVariant::DateTime)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Description, GST_TAG_DESCRIPTION, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Category, 0, QVariant::String)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Genre, GST_TAG_GENRE, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Year, 0, QVariant::Int)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::UserRating, , QVariant::Int)); + + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Language, GST_TAG_LANGUAGE_CODE, QVariant::String)); + + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Publisher, GST_TAG_ORGANIZATION, QVariant::String)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Copyright, GST_TAG_COPYRIGHT, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::ParentalRating, 0, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::RatingOrganisation, 0, QVariant::String)); + + // Media + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Size, 0, QVariant::Int)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::MediaType, 0, QVariant::String)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Duration, GST_TAG_DURATION, QVariant::Int)); + + // Audio + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::AudioBitRate, GST_TAG_BITRATE, QVariant::Int)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::AudioCodec, GST_TAG_AUDIO_CODEC, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::ChannelCount, 0, QVariant::Int)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::SampleRate, 0, QVariant::Int)); + + // Music + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::AlbumTitle, GST_TAG_ALBUM, QVariant::String)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::AlbumArtist, GST_TAG_ARTIST, 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) - { QMediaMetaData::Composer, GST_TAG_COMPOSER, QVariant::String }, + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Composer, GST_TAG_COMPOSER, QVariant::String)); #endif - //{ QMediaMetaData::Conductor, 0, QVariant::String }, - //{ QMediaMetaData::Lyrics, 0, QVariant::String }, - //{ QMediaMetaData::Mood, 0, QVariant::String }, - { QMediaMetaData::TrackNumber, GST_TAG_TRACK_NUMBER, QVariant::Int }, + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Conductor, 0, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Lyrics, 0, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Mood, 0, QVariant::String)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::TrackNumber, GST_TAG_TRACK_NUMBER, QVariant::Int)); - //{ QMediaMetaData::CoverArtUrlSmall, 0, QVariant::String }, - //{ QMediaMetaData::CoverArtUrlLarge, 0, QVariant::String }, + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::CoverArtUrlSmall, 0, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::CoverArtUrlLarge, 0, QVariant::String)); - // Image/Video - //{ QMediaMetaData::Resolution, 0, QVariant::Size }, - //{ QMediaMetaData::PixelAspectRatio, 0, QVariant::Size }, + // Image/Video + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Resolution, 0, QVariant::Size)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::PixelAspectRatio, 0, QVariant::Size)); - // Video - //{ QMediaMetaData::VideoFrameRate, 0, QVariant::String }, - //{ QMediaMetaData::VideoBitRate, 0, QVariant::Double }, - { QMediaMetaData::VideoCodec, GST_TAG_VIDEO_CODEC, QVariant::String }, + // Video + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::VideoFrameRate, 0, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::VideoBitRate, 0, QVariant::Double)); + 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 - //{ QMediaMetaData::ChapterNumber, 0, QVariant::Int }, - //{ QMediaMetaData::Director, 0, QVariant::String }, - { QMediaMetaData::LeadPerformer, GST_TAG_PERFORMER, QVariant::String }, - //{ QMediaMetaData::Writer, 0, QVariant::String }, + // Movie + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::ChapterNumber, 0, QVariant::Int)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Director, 0, QVariant::String)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::LeadPerformer, GST_TAG_PERFORMER, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Writer, 0, QVariant::String)); #if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 30) - // Photos - { QMediaMetaData::CameraManufacturer, GST_TAG_DEVICE_MANUFACTURER, QVariant::String }, - { QMediaMetaData::CameraModel, GST_TAG_DEVICE_MODEL, QVariant::String }, - //{ QMediaMetaData::Event, 0, QVariant::String }, - //{ QMediaMetaData::Subject, 0, QVariant::String }, - - { QMediaMetaData::Orientation, GST_TAG_IMAGE_ORIENTATION, QVariant::String }, - - // GPS - { QMediaMetaData::GPSLatitude, GST_TAG_GEO_LOCATION_LATITUDE, QVariant::Double }, - { QMediaMetaData::GPSLongitude, GST_TAG_GEO_LOCATION_LONGITUDE, QVariant::Double }, - { QMediaMetaData::GPSAltitude, GST_TAG_GEO_LOCATION_ELEVATION, QVariant::Double }, - { QMediaMetaData::GPSTrack, GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, QVariant::Double }, - { QMediaMetaData::GPSSpeed, GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, QVariant::Double }, - { QMediaMetaData::GPSImgDirection, GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, QVariant::Double } + // Photos + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::CameraManufacturer, GST_TAG_DEVICE_MANUFACTURER, QVariant::String)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::CameraModel, GST_TAG_DEVICE_MODEL, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Event, 0, QVariant::String)); + //metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Subject, 0, QVariant::String)); + + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::Orientation, GST_TAG_IMAGE_ORIENTATION, QVariant::String)); + + // GPS + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::GPSLatitude, GST_TAG_GEO_LOCATION_LATITUDE, QVariant::Double)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::GPSLongitude, GST_TAG_GEO_LOCATION_LONGITUDE, QVariant::Double)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::GPSAltitude, GST_TAG_GEO_LOCATION_ELEVATION, QVariant::Double)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::GPSTrack, GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, QVariant::Double)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::GPSSpeed, GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, QVariant::Double)); + metadataKeys->append(QGStreamerMetaDataKey(QMediaMetaData::GPSImgDirection, GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, QVariant::Double)); #endif -}; + } + + return metadataKeys; +} CameraBinMetaData::CameraBinMetaData(QObject *parent) :QMetaDataWriterControl(parent) @@ -183,14 +198,9 @@ QVariant CameraBinMetaData::metaData(const QString &key) const return (metersPerSec * 3600) / 1000; } - static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup); - - 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))); - } + Q_FOREACH (const QGStreamerMetaDataKey &metadataKey, *qt_gstreamerMetaDataKeys()) { + if (metadataKey.qtName == key) + return m_values.value(QByteArray::fromRawData(metadataKey.gstName, qstrlen(metadataKey.gstName))); } return QVariant(); } @@ -207,14 +217,12 @@ void CameraBinMetaData::setMetaData(const QString &key, const QVariant &value) } } - static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup); - - for (int i = 0; i < count; ++i) { - if (qt_gstreamerMetaDataKeys[i].key == key) { - const char *name = qt_gstreamerMetaDataKeys[i].token; + Q_FOREACH (const QGStreamerMetaDataKey &metadataKey, *qt_gstreamerMetaDataKeys()) { + if (metadataKey.qtName == key) { + const char *name = metadataKey.gstName; if (correctedValue.isValid()) { - correctedValue.convert(qt_gstreamerMetaDataKeys[i].type); + correctedValue.convert(metadataKey.type); m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), correctedValue); } else { m_values.remove(QByteArray::fromRawData(name, qstrlen(name))); @@ -232,14 +240,12 @@ QStringList CameraBinMetaData::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; - } + Q_FOREACH (const QGStreamerMetaDataKey &metadataKey, *qt_gstreamerMetaDataKeys()) + keysMap[QByteArray(metadataKey.gstName)] = metadataKey.qtName; } QStringList res; - foreach (const QByteArray &key, m_values.keys()) { + Q_FOREACH (const QByteArray &key, m_values.keys()) { QString tag = keysMap.value(key); if (!tag.isEmpty()) res.append(tag); diff --git a/src/plugins/gstreamer/mediacapture/qgstreamercapturemetadatacontrol.cpp b/src/plugins/gstreamer/mediacapture/qgstreamercapturemetadatacontrol.cpp index fd7fb7d82..1080a5875 100644 --- a/src/plugins/gstreamer/mediacapture/qgstreamercapturemetadatacontrol.cpp +++ b/src/plugins/gstreamer/mediacapture/qgstreamercapturemetadatacontrol.cpp @@ -46,80 +46,82 @@ #include <gst/gst.h> #include <gst/gstversion.h> -struct QGstreamerMetaDataKeyLookup -{ - QString key; - const char *token; -}; -static const QGstreamerMetaDataKeyLookup qt_gstreamerMetaDataKeys[] = +typedef QMap<QString, QByteArray> QGstreamerMetaDataKeyLookup; +Q_GLOBAL_STATIC(QGstreamerMetaDataKeyLookup, metadataKeys) + +static const QGstreamerMetaDataKeyLookup *qt_gstreamerMetaDataKeys() { - { 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 }, - - { QMediaMetaData::Publisher, GST_TAG_ORGANIZATION }, - { QMediaMetaData::Copyright, GST_TAG_COPYRIGHT }, - //{ QMediaMetaData::ParentalRating, 0 }, - //{ QMediaMetaData::RatingOrganisation, 0 }, - - // Media - //{ QMediaMetaData::Size, 0 }, - //{ QMediaMetaData::MediaType, 0 }, - { QMediaMetaData::Duration, GST_TAG_DURATION }, - - // Audio - { QMediaMetaData::AudioBitRate, GST_TAG_BITRATE }, - { QMediaMetaData::AudioCodec, GST_TAG_AUDIO_CODEC }, - //{ QMediaMetaData::ChannelCount, 0 }, - //{ QMediaMetaData::SampleRate, 0 }, - - // Music - { QMediaMetaData::AlbumTitle, GST_TAG_ALBUM }, - { QMediaMetaData::AlbumArtist, GST_TAG_ARTIST}, - { QMediaMetaData::ContributingArtist, GST_TAG_PERFORMER }, + if (metadataKeys->isEmpty()) { + 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); + + metadataKeys->insert(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); + + // Media + //metadataKeys->insert(QMediaMetaData::Size, 0); + //metadataKeys->insert(QMediaMetaData::MediaType, 0); + metadataKeys->insert(QMediaMetaData::Duration, GST_TAG_DURATION); + + // Audio + metadataKeys->insert(QMediaMetaData::AudioBitRate, GST_TAG_BITRATE); + metadataKeys->insert(QMediaMetaData::AudioCodec, GST_TAG_AUDIO_CODEC); + //metadataKeys->insert(QMediaMetaData::ChannelCount, 0); + //metadataKeys->insert(QMediaMetaData::SampleRate, 0); + + // Music + metadataKeys->insert(QMediaMetaData::AlbumTitle, GST_TAG_ALBUM); + metadataKeys->insert(QMediaMetaData::AlbumArtist, GST_TAG_ARTIST); + metadataKeys->insert(QMediaMetaData::ContributingArtist, GST_TAG_PERFORMER); #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 - //{ QMediaMetaData::Conductor, 0 }, - //{ QMediaMetaData::Lyrics, 0 }, - //{ QMediaMetaData::Mood, 0 }, - { QMediaMetaData::TrackNumber, GST_TAG_TRACK_NUMBER }, - - //{ QMediaMetaData::CoverArtUrlSmall, 0 }, - //{ QMediaMetaData::CoverArtUrlLarge, 0 }, - - // Image/Video - //{ QMediaMetaData::Resolution, 0 }, - //{ QMediaMetaData::PixelAspectRatio, 0 }, - - // Video - //{ QMediaMetaData::VideoFrameRate, 0 }, - //{ QMediaMetaData::VideoBitRate, 0 }, - { QMediaMetaData::VideoCodec, GST_TAG_VIDEO_CODEC }, - - //{ QMediaMetaData::PosterUrl, 0 }, - - // Movie - //{ QMediaMetaData::ChapterNumber, 0 }, - //{ QMediaMetaData::Director, 0 }, - { QMediaMetaData::LeadPerformer, GST_TAG_PERFORMER }, - //{ QMediaMetaData::Writer, 0 }, - - // Photos - //{ QMediaMetaData::CameraManufacturer, 0 }, - //{ QMediaMetaData::CameraModel, 0 }, - //{ QMediaMetaData::Event, 0 }, - //{ QMediaMetaData::Subject, 0 } -}; + //metadataKeys->insert(QMediaMetaData::Conductor, 0); + //metadataKeys->insert(QMediaMetaData::Lyrics, 0); + //metadataKeys->insert(QMediaMetaData::Mood, 0); + metadataKeys->insert(QMediaMetaData::TrackNumber, GST_TAG_TRACK_NUMBER); + + //metadataKeys->insert(QMediaMetaData::CoverArtUrlSmall, 0); + //metadataKeys->insert(QMediaMetaData::CoverArtUrlLarge, 0); + + // Image/Video + //metadataKeys->insert(QMediaMetaData::Resolution, 0); + //metadataKeys->insert(QMediaMetaData::PixelAspectRatio, 0); + + // Video + //metadataKeys->insert(QMediaMetaData::VideoFrameRate, 0); + //metadataKeys->insert(QMediaMetaData::VideoBitRate, 0); + metadataKeys->insert(QMediaMetaData::VideoCodec, GST_TAG_VIDEO_CODEC); + + //metadataKeys->insert(QMediaMetaData::PosterUrl, 0); + + // Movie + //metadataKeys->insert(QMediaMetaData::ChapterNumber, 0); + //metadataKeys->insert(QMediaMetaData::Director, 0); + metadataKeys->insert(QMediaMetaData::LeadPerformer, GST_TAG_PERFORMER); + //metadataKeys->insert(QMediaMetaData::Writer, 0); + + // Photos + //metadataKeys->insert(QMediaMetaData::CameraManufacturer, 0); + //metadataKeys->insert(QMediaMetaData::CameraModel, 0); + //metadataKeys->insert(QMediaMetaData::Event, 0); + //metadataKeys->insert(QMediaMetaData::Subject, 0 } + } + + return metadataKeys; +} QGstreamerCaptureMetaDataControl::QGstreamerCaptureMetaDataControl(QObject *parent) :QMetaDataWriterControl(parent) @@ -128,50 +130,30 @@ QGstreamerCaptureMetaDataControl::QGstreamerCaptureMetaDataControl(QObject *pare QVariant QGstreamerCaptureMetaDataControl::metaData(const QString &key) const { - static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup); - - for (int i = 0; i < count; ++i) { - if (qt_gstreamerMetaDataKeys[i].key == key) { - const char *name = qt_gstreamerMetaDataKeys[i].token; + QGstreamerMetaDataKeyLookup::const_iterator it = qt_gstreamerMetaDataKeys()->find(key); + if (it != qt_gstreamerMetaDataKeys()->constEnd()) + return m_values.value(it.value()); - return m_values.value(QByteArray::fromRawData(name, qstrlen(name))); - } - } return QVariant(); } void QGstreamerCaptureMetaDataControl::setMetaData(const QString &key, const QVariant &value) { - static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup); - - for (int i = 0; i < count; ++i) { - if (qt_gstreamerMetaDataKeys[i].key == key) { - const char *name = qt_gstreamerMetaDataKeys[i].token; - - m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), value); + QGstreamerMetaDataKeyLookup::const_iterator it = qt_gstreamerMetaDataKeys()->find(key); + if (it != qt_gstreamerMetaDataKeys()->constEnd()) { + m_values.insert(it.value(), value); - emit QMetaDataWriterControl::metaDataChanged(); - emit QMetaDataWriterControl::metaDataChanged(key, value); - emit metaDataChanged(m_values); - - return; - } + emit QMetaDataWriterControl::metaDataChanged(); + emit QMetaDataWriterControl::metaDataChanged(key, value); + emit metaDataChanged(m_values); } } 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; foreach (const QByteArray &key, m_values.keys()) { - QString tag = keysMap.value(key); + QString tag = qt_gstreamerMetaDataKeys()->key(key); if (!tag.isEmpty()) res.append(tag); } diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp index fa837d3f4..88faf607c 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp +++ b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp @@ -48,90 +48,86 @@ QT_BEGIN_NAMESPACE -struct QGstreamerMetaDataKeyLookup -{ - QString key; - const char *token; -}; +typedef QMap<QByteArray, QString> QGstreamerMetaDataKeyLookup; +Q_GLOBAL_STATIC(QGstreamerMetaDataKeyLookup, metadataKeys) -static const QGstreamerMetaDataKeyLookup qt_gstreamerMetaDataKeys[] = +static const QGstreamerMetaDataKeyLookup *qt_gstreamerMetaDataKeys() { - { 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 }, - - { QMediaMetaData::Publisher, GST_TAG_ORGANIZATION }, - { QMediaMetaData::Copyright, GST_TAG_COPYRIGHT }, - //{ QMediaMetaData::ParentalRating, 0 }, - //{ QMediaMetaData::RatingOrganisation, 0 }, - - // Media - //{ QMediaMetaData::Size, 0 }, - //{ QMediaMetaData::MediaType, 0 }, - { QMediaMetaData::Duration, GST_TAG_DURATION }, - - // Audio - { QMediaMetaData::AudioBitRate, GST_TAG_BITRATE }, - { QMediaMetaData::AudioCodec, GST_TAG_AUDIO_CODEC }, - //{ QMediaMetaData::ChannelCount, 0 }, - //{ QMediaMetaData::SampleRate, 0 }, - - // Music - { QMediaMetaData::AlbumTitle, GST_TAG_ALBUM }, - { QMediaMetaData::AlbumArtist, GST_TAG_ARTIST}, - { QMediaMetaData::ContributingArtist, GST_TAG_PERFORMER }, + if (metadataKeys->isEmpty()) { + 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); + + metadataKeys->insert(GST_TAG_LANGUAGE_CODE, QMediaMetaData::Language); + + metadataKeys->insert(GST_TAG_ORGANIZATION, QMediaMetaData::Publisher); + metadataKeys->insert(GST_TAG_COPYRIGHT, QMediaMetaData::Copyright); + //metadataKeys->insert(0, QMediaMetaData::ParentalRating); + //metadataKeys->insert(0, QMediaMetaData::RatingOrganisation); + + // Media + //metadataKeys->insert(0, QMediaMetaData::Size); + //metadataKeys->insert(0,QMediaMetaData::MediaType ); + metadataKeys->insert(GST_TAG_DURATION, QMediaMetaData::Duration); + + // Audio + metadataKeys->insert(GST_TAG_BITRATE, QMediaMetaData::AudioBitRate); + metadataKeys->insert(GST_TAG_AUDIO_CODEC, QMediaMetaData::AudioCodec); + //metadataKeys->insert(0, QMediaMetaData::ChannelCount); + //metadataKeys->insert(0, QMediaMetaData::SampleRate); + + // Music + metadataKeys->insert(GST_TAG_ALBUM, QMediaMetaData::AlbumTitle); + metadataKeys->insert(GST_TAG_ARTIST, QMediaMetaData::AlbumArtist); + metadataKeys->insert(GST_TAG_PERFORMER, QMediaMetaData::ContributingArtist); #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 - //{ QMediaMetaData::Conductor, 0 }, - //{ QMediaMetaData::Lyrics, 0 }, - //{ QMediaMetaData::Mood, 0 }, - { QMediaMetaData::TrackNumber, GST_TAG_TRACK_NUMBER }, - - //{ QMediaMetaData::CoverArtUrlSmall, 0 }, - //{ QMediaMetaData::CoverArtUrlLarge, 0 }, - - // Image/Video - { QMediaMetaData::Resolution, "resolution" }, - { QMediaMetaData::PixelAspectRatio, "pixel-aspect-ratio" }, - - // Video - //{ QMediaMetaData::VideoFrameRate, 0 }, - //{ QMediaMetaData::VideoBitRate, 0 }, - { QMediaMetaData::VideoCodec, GST_TAG_VIDEO_CODEC }, - - //{ QMediaMetaData::PosterUrl, 0 }, - - // Movie - //{ QMediaMetaData::ChapterNumber, 0 }, - //{ QMediaMetaData::Director, 0 }, - { QMediaMetaData::LeadPerformer, GST_TAG_PERFORMER }, - //{ QMediaMetaData::Writer, 0 }, - - // Photos - //{ QMediaMetaData::CameraManufacturer, 0 }, - //{ QMediaMetaData::CameraModel, 0 }, - //{ QMediaMetaData::Event, 0 }, - //{ QMediaMetaData::Subject, 0 } -}; + //metadataKeys->insert(0, QMediaMetaData::Conductor); + //metadataKeys->insert(0, QMediaMetaData::Lyrics); + //metadataKeys->insert(0, QMediaMetaData::Mood); + metadataKeys->insert(GST_TAG_TRACK_NUMBER, QMediaMetaData::TrackNumber); + + //metadataKeys->insert(0, QMediaMetaData::CoverArtUrlSmall); + //metadataKeys->insert(0, QMediaMetaData::CoverArtUrlLarge); + + // Image/Video + metadataKeys->insert("resolution", QMediaMetaData::Resolution); + metadataKeys->insert("pixel-aspect-ratio", QMediaMetaData::PixelAspectRatio); + + // Video + //metadataKeys->insert(0, QMediaMetaData::VideoFrameRate); + //metadataKeys->insert(0, QMediaMetaData::VideoBitRate); + metadataKeys->insert(GST_TAG_VIDEO_CODEC, QMediaMetaData::VideoCodec); + + //metadataKeys->insert(0, QMediaMetaData::PosterUrl); + + // Movie + //metadataKeys->insert(0, QMediaMetaData::ChapterNumber); + //metadataKeys->insert(0, QMediaMetaData::Director); + metadataKeys->insert(GST_TAG_PERFORMER, QMediaMetaData::LeadPerformer); + //metadataKeys->insert(0, QMediaMetaData::Writer); + + // Photos + //metadataKeys->insert(0, QMediaMetaData::CameraManufacturer); + //metadataKeys->insert(0, QMediaMetaData::CameraModel); + //metadataKeys->insert(0, QMediaMetaData::Event); + //metadataKeys->insert(0, QMediaMetaData::Subject); + } + + return metadataKeys; +} QGstreamerMetaDataProvider::QGstreamerMetaDataProvider(QGstreamerPlayerSession *session, QObject *parent) :QMetaDataReaderControl(parent), m_session(session) { 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() @@ -167,8 +163,8 @@ void QGstreamerMetaDataProvider::updateTags() 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()); + //use gstreamer native keys for elements not in our key map + QString key = qt_gstreamerMetaDataKeys()->value(i.key(), i.key()); m_tags.insert(key, i.value()); if (i.value() != oldTags.value(key)) { changed = true; diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h index e36c127ad..7b3b266fa 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h +++ b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.h @@ -67,7 +67,6 @@ private slots: private: QGstreamerPlayerSession *m_session; QVariantMap m_tags; - QMap<QByteArray, QString> m_keysMap; }; QT_END_NAMESPACE |