qtmobility/plugins/multimedia/gstreamer/mediacapture/qgstreamercapturemetadatacontrol.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
child 15 1f895d8a5b2b
equal deleted inserted replaced
11:06b8e2af4411 14:6fbed849b4f4
    44 #include <gst/gst.h>
    44 #include <gst/gst.h>
    45 #include <gst/gstversion.h>
    45 #include <gst/gstversion.h>
    46 
    46 
    47 struct QGstreamerMetaDataKeyLookup
    47 struct QGstreamerMetaDataKeyLookup
    48 {
    48 {
    49     QtMediaServices::MetaData key;
    49     QtMultimedia::MetaData key;
    50     const char *token;
    50     const char *token;
    51 };
    51 };
    52 
    52 
    53 static const QGstreamerMetaDataKeyLookup qt_gstreamerMetaDataKeys[] =
    53 static const QGstreamerMetaDataKeyLookup qt_gstreamerMetaDataKeys[] =
    54 {
    54 {
    55     { QtMediaServices::Title, GST_TAG_TITLE },
    55     { QtMultimedia::Title, GST_TAG_TITLE },
    56     //{ QtMediaServices::SubTitle, 0 },
    56     //{ QtMultimedia::SubTitle, 0 },
    57     //{ QtMediaServices::Author, 0 },
    57     //{ QtMultimedia::Author, 0 },
    58     { QtMediaServices::Comment, GST_TAG_COMMENT },
    58     { QtMultimedia::Comment, GST_TAG_COMMENT },
    59     { QtMediaServices::Description, GST_TAG_DESCRIPTION },
    59     { QtMultimedia::Description, GST_TAG_DESCRIPTION },
    60     //{ QtMediaServices::Category, 0 },
    60     //{ QtMultimedia::Category, 0 },
    61     { QtMediaServices::Genre, GST_TAG_GENRE },
    61     { QtMultimedia::Genre, GST_TAG_GENRE },
    62     //{ QtMediaServices::Year, 0 },
    62     //{ QtMultimedia::Year, 0 },
    63     //{ QtMediaServices::UserRating, 0 },
    63     //{ QtMultimedia::UserRating, 0 },
    64 
    64 
    65     { QtMediaServices::Language, GST_TAG_LANGUAGE_CODE },
    65     { QtMultimedia::Language, GST_TAG_LANGUAGE_CODE },
    66 
    66 
    67     { QtMediaServices::Publisher, GST_TAG_ORGANIZATION },
    67     { QtMultimedia::Publisher, GST_TAG_ORGANIZATION },
    68     { QtMediaServices::Copyright, GST_TAG_COPYRIGHT },
    68     { QtMultimedia::Copyright, GST_TAG_COPYRIGHT },
    69     //{ QtMediaServices::ParentalRating, 0 },
    69     //{ QtMultimedia::ParentalRating, 0 },
    70     //{ QtMediaServices::RatingOrganisation, 0 },
    70     //{ QtMultimedia::RatingOrganisation, 0 },
    71 
    71 
    72     // Media
    72     // Media
    73     //{ QtMediaServices::Size, 0 },
    73     //{ QtMultimedia::Size, 0 },
    74     //{ QtMediaServices::MediaType, 0 },
    74     //{ QtMultimedia::MediaType, 0 },
    75     { QtMediaServices::Duration, GST_TAG_DURATION },
    75     { QtMultimedia::Duration, GST_TAG_DURATION },
    76 
    76 
    77     // Audio
    77     // Audio
    78     { QtMediaServices::AudioBitRate, GST_TAG_BITRATE },
    78     { QtMultimedia::AudioBitRate, GST_TAG_BITRATE },
    79     { QtMediaServices::AudioCodec, GST_TAG_AUDIO_CODEC },
    79     { QtMultimedia::AudioCodec, GST_TAG_AUDIO_CODEC },
    80     //{ QtMediaServices::ChannelCount, 0 },
    80     //{ QtMultimedia::ChannelCount, 0 },
    81     //{ QtMediaServices::SampleRate, 0 },
    81     //{ QtMultimedia::SampleRate, 0 },
    82 
    82 
    83     // Music
    83     // Music
    84     { QtMediaServices::AlbumTitle, GST_TAG_ALBUM },
    84     { QtMultimedia::AlbumTitle, GST_TAG_ALBUM },
    85     { QtMediaServices::AlbumArtist,  GST_TAG_ARTIST},
    85     { QtMultimedia::AlbumArtist,  GST_TAG_ARTIST},
    86     { QtMediaServices::ContributingArtist, GST_TAG_PERFORMER },
    86     { QtMultimedia::ContributingArtist, GST_TAG_PERFORMER },
    87 #if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 19)
    87 #if (GST_VERSION_MAJOR >= 0) && (GST_VERSION_MINOR >= 10) && (GST_VERSION_MICRO >= 19)
    88     { QtMediaServices::Composer, GST_TAG_COMPOSER },
    88     { QtMultimedia::Composer, GST_TAG_COMPOSER },
    89 #endif
    89 #endif
    90     //{ QtMediaServices::Conductor, 0 },
    90     //{ QtMultimedia::Conductor, 0 },
    91     //{ QtMediaServices::Lyrics, 0 },
    91     //{ QtMultimedia::Lyrics, 0 },
    92     //{ QtMediaServices::Mood, 0 },
    92     //{ QtMultimedia::Mood, 0 },
    93     { QtMediaServices::TrackNumber, GST_TAG_TRACK_NUMBER },
    93     { QtMultimedia::TrackNumber, GST_TAG_TRACK_NUMBER },
    94 
    94 
    95     //{ QtMediaServices::CoverArtUrlSmall, 0 },
    95     //{ QtMultimedia::CoverArtUrlSmall, 0 },
    96     //{ QtMediaServices::CoverArtUrlLarge, 0 },
    96     //{ QtMultimedia::CoverArtUrlLarge, 0 },
    97 
    97 
    98     // Image/Video
    98     // Image/Video
    99     //{ QtMediaServices::Resolution, 0 },
    99     //{ QtMultimedia::Resolution, 0 },
   100     //{ QtMediaServices::PixelAspectRatio, 0 },
   100     //{ QtMultimedia::PixelAspectRatio, 0 },
   101 
   101 
   102     // Video
   102     // Video
   103     //{ QtMediaServices::VideoFrameRate, 0 },
   103     //{ QtMultimedia::VideoFrameRate, 0 },
   104     //{ QtMediaServices::VideoBitRate, 0 },
   104     //{ QtMultimedia::VideoBitRate, 0 },
   105     { QtMediaServices::VideoCodec, GST_TAG_VIDEO_CODEC },
   105     { QtMultimedia::VideoCodec, GST_TAG_VIDEO_CODEC },
   106 
   106 
   107     //{ QtMediaServices::PosterUrl, 0 },
   107     //{ QtMultimedia::PosterUrl, 0 },
   108 
   108 
   109     // Movie
   109     // Movie
   110     //{ QtMediaServices::ChapterNumber, 0 },
   110     //{ QtMultimedia::ChapterNumber, 0 },
   111     //{ QtMediaServices::Director, 0 },
   111     //{ QtMultimedia::Director, 0 },
   112     { QtMediaServices::LeadPerformer, GST_TAG_PERFORMER },
   112     { QtMultimedia::LeadPerformer, GST_TAG_PERFORMER },
   113     //{ QtMediaServices::Writer, 0 },
   113     //{ QtMultimedia::Writer, 0 },
   114 
   114 
   115     // Photos
   115     // Photos
   116     //{ QtMediaServices::CameraManufacturer, 0 },
   116     //{ QtMultimedia::CameraManufacturer, 0 },
   117     //{ QtMediaServices::CameraModel, 0 },
   117     //{ QtMultimedia::CameraModel, 0 },
   118     //{ QtMediaServices::Event, 0 },
   118     //{ QtMultimedia::Event, 0 },
   119     //{ QtMediaServices::Subject, 0 }
   119     //{ QtMultimedia::Subject, 0 }
   120 };
   120 };
   121 
   121 
   122 QGstreamerCaptureMetaDataControl::QGstreamerCaptureMetaDataControl(QObject *parent)
   122 QGstreamerCaptureMetaDataControl::QGstreamerCaptureMetaDataControl(QObject *parent)
   123     :QMetaDataControl(parent)
   123     :QMetaDataWriterControl(parent)
   124 {
   124 {
   125 }
   125 }
   126 
   126 
   127 QVariant QGstreamerCaptureMetaDataControl::metaData(QtMediaServices::MetaData key) const
   127 QVariant QGstreamerCaptureMetaDataControl::metaData(QtMultimedia::MetaData key) const
   128 {
   128 {
   129     static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
   129     static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
   130 
   130 
   131     for (int i = 0; i < count; ++i) {
   131     for (int i = 0; i < count; ++i) {
   132         if (qt_gstreamerMetaDataKeys[i].key == key) {
   132         if (qt_gstreamerMetaDataKeys[i].key == key) {
   136         }
   136         }
   137     }
   137     }
   138     return QVariant();
   138     return QVariant();
   139 }
   139 }
   140 
   140 
   141 void QGstreamerCaptureMetaDataControl::setMetaData(QtMediaServices::MetaData key, const QVariant &value)
   141 void QGstreamerCaptureMetaDataControl::setMetaData(QtMultimedia::MetaData key, const QVariant &value)
   142 {
   142 {
   143     static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
   143     static const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
   144 
   144 
   145     for (int i = 0; i < count; ++i) {
   145     for (int i = 0; i < count; ++i) {
   146         if (qt_gstreamerMetaDataKeys[i].key == key) {
   146         if (qt_gstreamerMetaDataKeys[i].key == key) {
   147             const char *name = qt_gstreamerMetaDataKeys[i].token;
   147             const char *name = qt_gstreamerMetaDataKeys[i].token;
   148 
   148 
   149             m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), value);
   149             m_values.insert(QByteArray::fromRawData(name, qstrlen(name)), value);
   150 
   150 
   151             emit QMetaDataControl::metaDataChanged();
   151             emit QMetaDataWriterControl::metaDataChanged();
   152             emit metaDataChanged(m_values);
   152             emit metaDataChanged(m_values);
   153 
   153 
   154             return;
   154             return;
   155         }
   155         }
   156     }
   156     }
   157 }
   157 }
   158 
   158 
   159 QList<QtMediaServices::MetaData> QGstreamerCaptureMetaDataControl::availableMetaData() const
   159 QList<QtMultimedia::MetaData> QGstreamerCaptureMetaDataControl::availableMetaData() const
   160 {
   160 {
   161     static QMap<QByteArray, QtMediaServices::MetaData> keysMap;
   161     static QMap<QByteArray, QtMultimedia::MetaData> keysMap;
   162     if (keysMap.isEmpty()) {
   162     if (keysMap.isEmpty()) {
   163         const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
   163         const int count = sizeof(qt_gstreamerMetaDataKeys) / sizeof(QGstreamerMetaDataKeyLookup);
   164         for (int i = 0; i < count; ++i) {
   164         for (int i = 0; i < count; ++i) {
   165             keysMap[QByteArray(qt_gstreamerMetaDataKeys[i].token)] = qt_gstreamerMetaDataKeys[i].key;
   165             keysMap[QByteArray(qt_gstreamerMetaDataKeys[i].token)] = qt_gstreamerMetaDataKeys[i].key;
   166         }
   166         }
   167     }
   167     }
   168 
   168 
   169     QList<QtMediaServices::MetaData> res;
   169     QList<QtMultimedia::MetaData> res;
   170     foreach (const QByteArray &key, m_values.keys()) {
   170     foreach (const QByteArray &key, m_values.keys()) {
   171         QtMediaServices::MetaData tag = keysMap.value(key, QtMediaServices::MetaData(-1));
   171         QtMultimedia::MetaData tag = keysMap.value(key, QtMultimedia::MetaData(-1));
   172         if (tag != -1)
   172         if (tag != -1)
   173             res.append(tag);
   173             res.append(tag);
   174     }
   174     }
   175 
   175 
   176     return res;
   176     return res;
   182 }
   182 }
   183 
   183 
   184 void QGstreamerCaptureMetaDataControl::setExtendedMetaData(QString const &name, QVariant const &value)
   184 void QGstreamerCaptureMetaDataControl::setExtendedMetaData(QString const &name, QVariant const &value)
   185 {
   185 {
   186     m_values.insert(name.toLatin1(), value);
   186     m_values.insert(name.toLatin1(), value);
   187     emit QMetaDataControl::metaDataChanged();
   187     emit QMetaDataWriterControl::metaDataChanged();
   188     emit metaDataChanged(m_values);
   188     emit metaDataChanged(m_values);
   189 }
   189 }
   190 
   190 
   191 QStringList QGstreamerCaptureMetaDataControl::availableExtendedMetaData() const
   191 QStringList QGstreamerCaptureMetaDataControl::availableExtendedMetaData() const
   192 {
   192 {