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; |