QtGStreamer  0.10.2
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Pages
taglist.cpp
1 /*
2  Copyright (C) 2010 Collabora Multimedia.
3  @author Mauricio Piacentini <mauricio.piacentini@collabora.co.uk>
4  Copyright (C) 2011 Collabora Ltd.
5  @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk>
6 
7  This library is free software; you can redistribute it and/or modify
8  it under the terms of the GNU Lesser General Public License as published
9  by the Free Software Foundation; either version 2.1 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU Lesser General Public License for more details.
16 
17  You should have received a copy of the GNU Lesser General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #include "taglist.h"
21 #include "../QGlib/string_p.h"
22 #include <gst/gsttaglist.h>
23 #include <gst/gstvalue.h>
24 //#include <gst/gstdatetime.h>
25 #include <QtCore/QDebug>
26 #include <QtCore/QDate>
27 #include <QGst/Buffer>
28 
29 namespace QGst {
30 
31 QString getStringTag(GstTagList * list, const gchar * tag, int index)
32 {
33  gchar * value;
34  if (gst_tag_list_get_string_index(list, tag, index, &value)) {
35  return QGlib::Private::stringFromGCharPtr(value);
36  }
37  return QString::null;
38 }
39 
40 quint32 getUintTag(GstTagList * list, const gchar * tag, int index)
41 {
42  guint value = 0;
43  gst_tag_list_get_uint_index(list, tag, index, &value);
44  return value;
45 }
46 
47 double getDoubleTag(GstTagList * list, const gchar * tag, int index)
48 {
49  double value = 0;
50  gst_tag_list_get_double_index(list, tag, index, &value);
51  return value;
52 }
53 
54 QGst::BufferPtr getBufferTag(GstTagList * list, const gchar * tag, int index)
55 {
56  GstBuffer * value = 0;
57  gst_tag_list_get_buffer_index(list, tag, index, &value);
58  //Buffer is already refd()
59  return QGst::BufferPtr::wrap(value, false);
60 }
61 
62 #ifndef DOXYGEN_RUN
63 
64 struct QTGSTREAMER_NO_EXPORT TagList::Data : public QSharedData
65 {
66  Data();
67  Data(const GstTagList *tl);
68  Data(const Data & other);
69  ~Data();
70 
71  GstTagList *taglist;
72 };
73 
74 TagList::Data::Data()
75  : QSharedData()
76 {
77  taglist = gst_tag_list_new();
78 }
79 
80 TagList::Data::Data(const GstTagList *tl)
81  : QSharedData()
82 {
83  if (tl && gst_is_tag_list(tl)) {
84  taglist = gst_tag_list_copy(tl);
85  } else {
86  taglist = gst_tag_list_new();
87  }
88 }
89 
90 TagList::Data::Data(const TagList::Data & other)
91  : QSharedData(other)
92 {
93  taglist = gst_tag_list_copy(other.taglist);
94 }
95 
96 TagList::Data::~Data()
97 {
98  gst_tag_list_free(taglist);
99 }
100 
101 #endif //DOXYGEN_RUN
102 
103 TagList::TagList()
104  : d(new Data)
105 {
106 }
107 
108 TagList::TagList(const GstTagList *taglist)
109  : d(new Data(taglist))
110 {
111 }
112 
113 TagList::~TagList()
114 {
115 }
116 
117 TagList::TagList(const TagList & other)
118  : d(other.d)
119 {
120 }
121 
122 TagList & TagList::operator=(const TagList & other)
123 {
124  d = other.d;
125  return *this;
126 }
127 
128 bool TagList::isEmpty() const
129 {
130  return gst_tag_list_is_empty(d->taglist);
131 }
132 
133 void TagList::insert(const TagList & other, TagMergeMode mode)
134 {
135  gst_tag_list_insert(d->taglist, other.d->taglist, static_cast<GstTagMergeMode>(mode));
136 }
137 
138 //static
139 TagList TagList::merge(const TagList & firstList, const TagList & secondList, TagMergeMode mode)
140 {
141  GstTagList *taglist = gst_tag_list_merge(firstList, secondList,
142  static_cast<GstTagMergeMode>(mode));
143 
144  //avoid copying the merged taglist by freeing the new one and assigning this one to d->taglist
145  TagList tl;
146  gst_tag_list_free(tl.d->taglist);
147  tl.d->taglist = taglist;
148  return tl;
149 }
150 
151 QGlib::Value TagList::tagValue(const char *tag, int index) const
152 {
153  return QGlib::Value(gst_tag_list_get_value_index(d->taglist, tag, index));
154 }
155 
156 void TagList::setTagValue(const char *tag, const QGlib::Value & value, TagMergeMode mode)
157 {
158  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode), tag, value);
159 }
160 
161 int TagList::tagValueCount(const char *tag) const
162 {
163  return gst_tag_list_get_tag_size(d->taglist, tag);
164 }
165 
166 void TagList::clear()
167 {
168  gst_tag_list_free(d->taglist);
169  d->taglist = gst_tag_list_new();
170 }
171 
172 void TagList::removeTag(const char *tag)
173 {
174  gst_tag_list_remove_tag(d->taglist, tag);
175 }
176 
177 TagList::operator GstTagList*()
178 {
179  return d->taglist;
180 }
181 
182 TagList::operator const GstTagList*() const
183 {
184  return d->taglist;
185 }
186 
187 QString TagList::title(int index) const
188 {
189  return getStringTag(d->taglist, GST_TAG_TITLE, index);
190 }
191 
192 void TagList::setTitle(const QString & value, TagMergeMode mode)
193 {
194  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
195  GST_TAG_TITLE, QGlib::Value::create(value));
196 }
197 
198 int TagList::titleCount() const
199 {
200  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_TITLE);
201 }
202 
203 QString TagList::titleSortName() const
204 {
205  return getStringTag(d->taglist, GST_TAG_TITLE_SORTNAME, 0);
206 }
207 
208 void TagList::setTitleSortName(const QString & value)
209 {
210  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
211  GST_TAG_TITLE_SORTNAME, QGlib::Value::create(value));
212 }
213 
214 QString TagList::artist(int index) const
215 {
216  return getStringTag(d->taglist, GST_TAG_ARTIST, index);
217 }
218 
219 void TagList::setArtist(const QString & value, TagMergeMode mode)
220 {
221  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
222  GST_TAG_ARTIST, QGlib::Value::create(value));
223 }
224 
225 int TagList::artistCount() const
226 {
227  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_ARTIST);
228 }
229 
230 QString TagList::artistSortName() const
231 {
232  return getStringTag(d->taglist, GST_TAG_ARTIST_SORTNAME, 0);
233 }
234 
235 void TagList::setArtistSortName(const QString & value)
236 {
237  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
238  GST_TAG_ARTIST_SORTNAME, QGlib::Value::create(value));
239 }
240 
241 QString TagList::composer(int index) const
242 {
243  return getStringTag(d->taglist, GST_TAG_COMPOSER, index);
244 }
245 
246 void TagList::setComposer(const QString & value, TagMergeMode mode)
247 {
248  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
249  GST_TAG_COMPOSER, QGlib::Value::create(value));
250 }
251 
252 int TagList::composerCount() const
253 {
254  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_COMPOSER);
255 }
256 
257 QDate TagList::date() const
258 {
259  GDate * value;
260  if (gst_tag_list_get_date(d->taglist, GST_TAG_DATE, &value)) {
261  QDate ret = QDate::fromJulianDay(g_date_get_julian(value));
262  g_date_free(value);
263  return ret;
264  }
265  return QDate();
266 }
267 
268 void TagList::setDate(const QDate & value)
269 {
270  GDate * date = g_date_new_julian(value.toJulianDay());
271  gst_tag_list_add (d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_DATE, date, NULL);
272 }
273 
274 QString TagList::genre(int index) const
275 {
276  return getStringTag(d->taglist, GST_TAG_GENRE, index);
277 }
278 
279 void TagList::setGenre(const QString & value, TagMergeMode mode)
280 {
281  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
282  GST_TAG_GENRE, QGlib::Value::create(value));
283 }
284 
285 int TagList::genreCount() const
286 {
287  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_GENRE);
288 }
289 
290 QString TagList::comment(int index) const
291 {
292  return getStringTag(d->taglist, GST_TAG_COMMENT, index);
293 }
294 
295 void TagList::setComment(const QString & value, TagMergeMode mode)
296 {
297  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
298  GST_TAG_COMMENT, QGlib::Value::create(value));
299 }
300 
301 int TagList::commentCount() const
302 {
303  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_COMMENT);
304 }
305 
306 QString TagList::extendedComment(int index) const
307 {
308  return getStringTag(d->taglist, GST_TAG_EXTENDED_COMMENT, index);
309 }
310 
311 void TagList::setExtendedComment(const QString & value, TagMergeMode mode)
312 {
313  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
314  GST_TAG_EXTENDED_COMMENT, QGlib::Value::create(value));
315 }
316 
317 int TagList::extendedCommentCount() const
318 {
319  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_EXTENDED_COMMENT);
320 }
321 
322 quint32 TagList::trackNumber() const
323 {
324  return getUintTag(d->taglist, GST_TAG_TRACK_NUMBER, 0);
325 }
326 
327 void TagList::setTrackNumber(quint32 value)
328 {
329  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_TRACK_NUMBER, value, NULL);
330 }
331 
332 quint32 TagList::trackCount() const
333 {
334  return getUintTag(d->taglist, GST_TAG_TRACK_COUNT, 0);
335 }
336 
337 void TagList::setTrackCount(quint32 value)
338 {
339  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_TRACK_COUNT, value, NULL);
340 }
341 
342 quint32 TagList::albumVolumeNumber() const
343 {
344  return getUintTag(d->taglist, GST_TAG_ALBUM_VOLUME_NUMBER, 0);
345 }
346 
347 void TagList::setAlbumVolumeNumber(quint32 value)
348 {
349  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_ALBUM_VOLUME_NUMBER, value, NULL);
350 }
351 
352 quint32 TagList::albumVolumeCount() const
353 {
354  return getUintTag(d->taglist, GST_TAG_ALBUM_VOLUME_COUNT, 0);
355 }
356 
357 void TagList::setAlbumVolumeCount(quint32 value)
358 {
359  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_ALBUM_VOLUME_COUNT, value, NULL);
360 }
361 
362 QString TagList::location(int index) const
363 {
364  return getStringTag(d->taglist, GST_TAG_LOCATION, index);
365 }
366 
367 void TagList::setLocation(const QString & value, TagMergeMode mode)
368 {
369  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
370  GST_TAG_LOCATION, QGlib::Value::create(value));
371 }
372 
373 int TagList::locationCount() const
374 {
375  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_LOCATION);
376 }
377 
378 QString TagList::homepage(int index) const
379 {
380  return getStringTag(d->taglist, GST_TAG_HOMEPAGE, index);
381 }
382 
383 void TagList::setHomepage(const QString & value, TagMergeMode mode)
384 {
385  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
386  GST_TAG_HOMEPAGE, QGlib::Value::create(value));
387 }
388 
389 int TagList::homepageCount() const
390 {
391  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_HOMEPAGE);
392 }
393 
394 QString TagList::description(int index) const
395 {
396  return getStringTag(d->taglist, GST_TAG_DESCRIPTION, index);
397 }
398 
399 void TagList::setDescription(const QString & value, TagMergeMode mode)
400 {
401  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
402  GST_TAG_DESCRIPTION, QGlib::Value::create(value));
403 }
404 
405 int TagList::descriptionCount() const
406 {
407  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_DESCRIPTION);
408 }
409 
410 QString TagList::version() const
411 {
412  return getStringTag(d->taglist, GST_TAG_VERSION, 0);
413 }
414 
415 void TagList::setVersion(const QString & value)
416 {
417  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
418  GST_TAG_VERSION, QGlib::Value::create(value));
419 }
420 
421 QString TagList::isrc() const
422 {
423  return getStringTag(d->taglist, GST_TAG_ISRC, 0);
424 }
425 
426 void TagList::setIsrc(const QString & value)
427 {
428  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
429  GST_TAG_ISRC, QGlib::Value::create(value));
430 }
431 
432 QString TagList::organization(int index) const
433 {
434  return getStringTag(d->taglist, GST_TAG_ORGANIZATION, index);
435 }
436 
437 void TagList::setOrganization(const QString & value, TagMergeMode mode)
438 {
439  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
440  GST_TAG_ORGANIZATION, QGlib::Value::create(value));
441 }
442 
443 int TagList::organizationCount() const
444 {
445  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_ORGANIZATION);
446 }
447 
448 QString TagList::copyright() const
449 {
450  return getStringTag(d->taglist, GST_TAG_COPYRIGHT, 0);
451 }
452 
453 void TagList::setCopyright(const QString & value)
454 {
455  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
456  GST_TAG_COPYRIGHT, QGlib::Value::create(value));
457 }
458 
459 QString TagList::copyrightUri() const
460 {
461  return getStringTag(d->taglist, GST_TAG_COPYRIGHT_URI, 0);
462 }
463 
464 void TagList::setCopyrightUri(const QString & value)
465 {
466  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
467  GST_TAG_COPYRIGHT_URI, QGlib::Value::create(value));
468 }
469 
470 QString TagList::contact(int index) const
471 {
472  return getStringTag(d->taglist, GST_TAG_CONTACT, index);
473 }
474 
475 void TagList::setContact(const QString & value, TagMergeMode mode)
476 {
477  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
478  GST_TAG_CONTACT, QGlib::Value::create(value));
479 }
480 
481 int TagList::contactCount() const
482 {
483  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_CONTACT);
484 }
485 
486 QString TagList::license() const
487 {
488  return getStringTag(d->taglist, GST_TAG_LICENSE, 0);
489 }
490 
491 void TagList::setLicense(const QString & value)
492 {
493  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
494  GST_TAG_LICENSE, QGlib::Value::create(value));
495 }
496 
497 QString TagList::licenseUri() const
498 {
499  return getStringTag(d->taglist, GST_TAG_LICENSE_URI, 0);
500 }
501 
502 void TagList::setLicenseUri(const QString & value)
503 {
504  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
505  GST_TAG_LICENSE_URI, QGlib::Value::create(value));
506 }
507 
508 QString TagList::performer(int index) const
509 {
510  return getStringTag(d->taglist, GST_TAG_PERFORMER, index);
511 }
512 
513 void TagList::setPerformer(const QString & value, TagMergeMode mode)
514 {
515  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
516  GST_TAG_PERFORMER, QGlib::Value::create(value));
517 }
518 
519 int TagList::performerCount() const
520 {
521  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_PERFORMER);
522 }
523 
524 quint64 TagList::duration() const
525 {
526  guint64 value = 0;
527  gst_tag_list_get_uint64_index(d->taglist, GST_TAG_DURATION, 0, &value);
528  return value;
529 }
530 
531 void TagList::setDuration(quint64 value)
532 {
533  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_DURATION, value, NULL);
534 }
535 
536 QString TagList::codec() const
537 {
538  return getStringTag(d->taglist, GST_TAG_CODEC, 0);
539 }
540 
541 void TagList::setCodec(const QString & value)
542 {
543  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
544  GST_TAG_CODEC, QGlib::Value::create(value));
545 }
546 
547 QString TagList::videoCodec() const
548 {
549  return getStringTag(d->taglist, GST_TAG_VIDEO_CODEC, 0);
550 }
551 
552 void TagList::setVideoCodec(const QString & value)
553 {
554  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
555  GST_TAG_VIDEO_CODEC, QGlib::Value::create(value));
556 }
557 
558 QString TagList::audioCodec() const
559 {
560  return getStringTag(d->taglist, GST_TAG_AUDIO_CODEC, 0);
561 }
562 
563 void TagList::setAudioCodec(const QString & value)
564 {
565  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
566  GST_TAG_AUDIO_CODEC, QGlib::Value::create(value));
567 }
568 
569 QString TagList::subtitleCodec() const
570 {
571  return getStringTag(d->taglist, GST_TAG_SUBTITLE_CODEC, 0);
572 }
573 
574 void TagList::setSubtitleCodec(const QString & value)
575 {
576  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
577  GST_TAG_SUBTITLE_CODEC, QGlib::Value::create(value));
578 }
579 
580 QString TagList::containerFormat() const
581 {
582  return getStringTag(d->taglist, GST_TAG_CONTAINER_FORMAT, 0);
583 }
584 
585 void TagList::setContainerFormat(const QString & value)
586 {
587  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
588  GST_TAG_CONTAINER_FORMAT, QGlib::Value::create(value));
589 }
590 
591 quint32 TagList::bitrate() const
592 {
593  return getUintTag(d->taglist, GST_TAG_BITRATE, 0);
594 }
595 
596 void TagList::setBitrate(quint32 value)
597 {
598  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_BITRATE, value, NULL);
599 }
600 
601 quint32 TagList::nominalBitrate() const
602 {
603  return getUintTag(d->taglist, GST_TAG_NOMINAL_BITRATE, 0);
604 }
605 
606 void TagList::setNominalBitrate(quint32 value)
607 {
608  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_NOMINAL_BITRATE, value, NULL);
609 }
610 
611 quint32 TagList::minimumBitrate() const
612 {
613  return getUintTag(d->taglist, GST_TAG_MINIMUM_BITRATE, 0);
614 }
615 
616 void TagList::setMinimumBitrate(quint32 value)
617 {
618  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_MINIMUM_BITRATE, value, NULL);
619 }
620 
621 quint32 TagList::maximumBitrate() const
622 {
623  return getUintTag(d->taglist, GST_TAG_MAXIMUM_BITRATE, 0);
624 }
625 
626 void TagList::setMaximumBitrate(quint32 value)
627 {
628  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_MAXIMUM_BITRATE, value, NULL);
629 }
630 
631 quint32 TagList::serial() const
632 {
633  return getUintTag(d->taglist, GST_TAG_SERIAL, 0);
634 }
635 
636 void TagList::setSerial(quint32 value)
637 {
638  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_SERIAL, value, NULL);
639 }
640 
641 QString TagList::encoder() const
642 {
643  return getStringTag(d->taglist, GST_TAG_ENCODER, 0);
644 }
645 
646 void TagList::setEncoder(const QString & value)
647 {
648  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
649  GST_TAG_ENCODER, QGlib::Value::create(value));
650 }
651 
652 quint32 TagList::encoderVersion() const
653 {
654  return getUintTag(d->taglist, GST_TAG_ENCODER_VERSION, 0);
655 }
656 
657 void TagList::setEncoderVersion(quint32 value)
658 {
659  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_ENCODER_VERSION, value, NULL);
660 }
661 
662 double TagList::trackGain() const
663 {
664  return getDoubleTag(d->taglist, GST_TAG_TRACK_GAIN, 0);
665 }
666 
667 void TagList::setTrackGain(double value)
668 {
669  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_TRACK_GAIN, value, NULL);
670 }
671 
672 double TagList::trackPeak() const
673 {
674  return getDoubleTag(d->taglist, GST_TAG_TRACK_PEAK, 0);
675 }
676 
677 void TagList::setTrackPeak(double value)
678 {
679  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_TRACK_PEAK, value, NULL);
680 }
681 
682 double TagList::albumGain() const
683 {
684  return getDoubleTag(d->taglist, GST_TAG_ALBUM_GAIN, 0);
685 }
686 
687 void TagList::setAlbumGain(double value)
688 {
689  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_ALBUM_GAIN, value, NULL);
690 }
691 
692 double TagList::albumPeak() const
693 {
694  return getDoubleTag(d->taglist, GST_TAG_ALBUM_PEAK, 0);
695 }
696 
697 void TagList::setAlbumPeak(double value)
698 {
699  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_ALBUM_PEAK, value, NULL);
700 }
701 
702 double TagList::referenceLevel() const
703 {
704  return getDoubleTag(d->taglist, GST_TAG_REFERENCE_LEVEL, 0);
705 }
706 
707 void TagList::setReferenceLevel(double value)
708 {
709  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_REFERENCE_LEVEL, value, NULL);
710 }
711 
712 QString TagList::languageCode() const
713 {
714  return getStringTag(d->taglist, GST_TAG_LANGUAGE_CODE, 0);
715 }
716 
717 void TagList::setLanguageCode(const QString & value)
718 {
719  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
720  GST_TAG_LANGUAGE_CODE, QGlib::Value::create(value));
721 }
722 
723 BufferPtr TagList::image(int index) const
724 {
725  return getBufferTag(d->taglist, GST_TAG_IMAGE, index);
726 }
727 
728 void TagList::setImage(const BufferPtr & value, TagMergeMode mode)
729 {
730  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
731  GST_TAG_IMAGE, QGlib::Value::create(value));
732 }
733 
734 int TagList::imageCount() const
735 {
736  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_IMAGE);
737 }
738 
739 BufferPtr TagList::previewImage() const
740 {
741  return getBufferTag(d->taglist, GST_TAG_PREVIEW_IMAGE, 0);
742 }
743 
744 void TagList::setPreviewImage(const BufferPtr & value)
745 {
746  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
747  GST_TAG_PREVIEW_IMAGE, QGlib::Value::create(value));
748 }
749 
750 BufferPtr TagList::attachment(int index) const
751 {
752  return getBufferTag(d->taglist, GST_TAG_ATTACHMENT, index);
753 }
754 
755 void TagList::setAttachment(const BufferPtr & value, TagMergeMode mode)
756 {
757  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
758  GST_TAG_ATTACHMENT, QGlib::Value::create(value));
759 }
760 
761 int TagList::attachmentCount() const
762 {
763  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_ATTACHMENT);
764 }
765 
766 double TagList::beatsPerMinute() const
767 {
768  return getDoubleTag(d->taglist, GST_TAG_BEATS_PER_MINUTE, 0);
769 }
770 
771 void TagList::setBeatsPerMinute(double value)
772 {
773  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_BEATS_PER_MINUTE, value, NULL);
774 }
775 
776 QString TagList::keywords(int index) const
777 {
778  return getStringTag(d->taglist, GST_TAG_KEYWORDS, index);
779 }
780 
781 void TagList::setKeywords(const QString & value, TagMergeMode mode)
782 {
783  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
784  GST_TAG_KEYWORDS, QGlib::Value::create(value));
785 }
786 
787 int TagList::keywordsCount() const
788 {
789  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_KEYWORDS);
790 }
791 
792 QString TagList::geoLocationName() const
793 {
794  return getStringTag(d->taglist, GST_TAG_GEO_LOCATION_NAME, 0);
795 }
796 
797 void TagList::seGeoLocationName(const QString & value)
798 {
799  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
800  GST_TAG_GEO_LOCATION_NAME, QGlib::Value::create(value));
801 }
802 
803 double TagList::geoLocationLatitude() const
804 {
805  return getDoubleTag(d->taglist, GST_TAG_GEO_LOCATION_LATITUDE, 0);
806 }
807 
808 void TagList::setGeoLocationLatitude(double value)
809 {
810  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
811  GST_TAG_GEO_LOCATION_LATITUDE, value, NULL);
812 }
813 
814 double TagList::geoLocationLongitude() const
815 {
816  return getDoubleTag(d->taglist, GST_TAG_GEO_LOCATION_LONGITUDE, 0);
817 }
818 
819 void TagList::setGeoLocationLongitude(double value)
820 {
821  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
822  GST_TAG_GEO_LOCATION_LONGITUDE, value, NULL);
823 }
824 
825 double TagList::geoLocationElevation() const
826 {
827  return getDoubleTag(d->taglist, GST_TAG_GEO_LOCATION_ELEVATION, 0);
828 }
829 
830 void TagList::setGeoLocationElevation(double value)
831 {
832  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
833  GST_TAG_GEO_LOCATION_ELEVATION, value, NULL);
834 }
835 
836 QString TagList::geoLocationCountry() const
837 {
838  return getStringTag(d->taglist, GST_TAG_GEO_LOCATION_COUNTRY, 0);
839 }
840 
841 void TagList::setGeoLocationCountry(const QString & value)
842 {
843  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
844  GST_TAG_GEO_LOCATION_COUNTRY, QGlib::Value::create(value));
845 }
846 
847 QString TagList::geoLocationCity() const
848 {
849  return getStringTag(d->taglist, GST_TAG_GEO_LOCATION_CITY, 0);
850 }
851 
852 void TagList::setGeoLocationCity(const QString & value)
853 {
854  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
855  GST_TAG_GEO_LOCATION_CITY, QGlib::Value::create(value));
856 }
857 
858 QString TagList::geoLocationSublocation() const
859 {
860  return getStringTag(d->taglist, GST_TAG_GEO_LOCATION_SUBLOCATION, 0);
861 }
862 
863 void TagList::setGeoLocationSublocation(const QString & value)
864 {
865  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
866  GST_TAG_GEO_LOCATION_SUBLOCATION, QGlib::Value::create(value));
867 }
868 
869 double TagList::geoLocationMovementSpeed() const
870 {
871  return getDoubleTag(d->taglist, GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, 0);
872 }
873 
874 void TagList::setGeoLocationMovementSpeed(double value)
875 {
876  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
877  GST_TAG_GEO_LOCATION_MOVEMENT_SPEED, value, NULL);
878 }
879 
880 double TagList::geoLocationMovementDirection() const
881 {
882  return getDoubleTag(d->taglist, GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, 0);
883 }
884 
885 void TagList::setGeoLocationMovementDirection(double value)
886 {
887  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
888  GST_TAG_GEO_LOCATION_MOVEMENT_DIRECTION, value, NULL);
889 }
890 
891 double TagList::geoLocationCaptureDirection() const
892 {
893  return getDoubleTag(d->taglist, GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, 0);
894 }
895 
896 void TagList::setGeoLocationCaptureDirector(double value)
897 {
898  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
899  GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, value, NULL);
900 }
901 
902 QString TagList::showName(int index) const
903 {
904  return getStringTag(d->taglist, GST_TAG_SHOW_NAME, index);
905 }
906 
907 void TagList::setShowName(const QString & value, TagMergeMode mode)
908 {
909  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
910  GST_TAG_SHOW_NAME, QGlib::Value::create(value));
911 }
912 
913 int TagList::showNameCount() const
914 {
915  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_SHOW_NAME);
916 }
917 
918 QString TagList::showSortName() const
919 {
920  return getStringTag(d->taglist, GST_TAG_SHOW_SORTNAME, 0);
921 }
922 
923 void TagList::setShowSortName(const QString & value)
924 {
925  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
926  GST_TAG_SHOW_SORTNAME, QGlib::Value::create(value));
927 }
928 
929 quint32 TagList::showEpisodeNumber() const
930 {
931  return getUintTag(d->taglist, GST_TAG_SHOW_EPISODE_NUMBER, 0);
932 }
933 
934 void TagList::setShowEpisodeNumber(quint32 value)
935 {
936  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_SHOW_EPISODE_NUMBER, value, NULL);
937 }
938 
939 quint32 TagList::showSeasonNumber() const
940 {
941  return getUintTag(d->taglist, GST_TAG_SHOW_SEASON_NUMBER, 0);
942 }
943 
944 void TagList::setShowSeasonNumber(quint32 value)
945 {
946  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_SHOW_SEASON_NUMBER, value, NULL);
947 }
948 
949 QString TagList::lyrics(int index) const
950 {
951  return getStringTag(d->taglist, GST_TAG_LYRICS, index);
952 }
953 
954 void TagList::setLyrics(const QString & value, TagMergeMode mode)
955 {
956  gst_tag_list_add_value(d->taglist, static_cast<GstTagMergeMode>(mode),
957  GST_TAG_LYRICS, QGlib::Value::create(value));
958 }
959 
960 int TagList::lyricsCount() const
961 {
962  return gst_tag_list_get_tag_size(d->taglist, GST_TAG_LYRICS);
963 }
964 
965 QString TagList::composerSortName() const
966 {
967  return getStringTag(d->taglist, GST_TAG_COMPOSER_SORTNAME, 0);
968 }
969 
970 void TagList::setComposerSortName(const QString & value)
971 {
972  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
973  GST_TAG_COMPOSER_SORTNAME, QGlib::Value::create(value));
974 }
975 
976 QString TagList::grouping() const
977 {
978  return getStringTag(d->taglist, GST_TAG_GROUPING, 0);
979 }
980 
981 void TagList::setGrouping(const QString & value)
982 {
983  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
984  GST_TAG_GROUPING, QGlib::Value::create(value));
985 }
986 
987 quint32 TagList::userRating() const
988 {
989  return getUintTag(d->taglist, GST_TAG_USER_RATING, 0);
990 }
991 
992 void TagList::setUserRating(quint32 value)
993 {
994  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_USER_RATING, value, NULL);
995 }
996 
997 QString TagList::deviceManufacturer() const
998 {
999  return getStringTag(d->taglist, GST_TAG_DEVICE_MANUFACTURER, 0);
1000 }
1001 
1002 void TagList::setDeviceManufacturer(const QString & value)
1003 {
1004  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
1005  GST_TAG_DEVICE_MANUFACTURER, QGlib::Value::create(value));
1006 }
1007 
1008 QString TagList::deviceModel() const
1009 {
1010  return getStringTag(d->taglist, GST_TAG_DEVICE_MODEL, 0);
1011 }
1012 
1013 void TagList::setDeviceModel(const QString & value)
1014 {
1015  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
1016  GST_TAG_DEVICE_MODEL, QGlib::Value::create(value));
1017 }
1018 
1019 QString TagList::imageOrientation() const
1020 {
1021  return getStringTag(d->taglist, GST_TAG_IMAGE_ORIENTATION, 0);
1022 }
1023 
1024 void TagList::setImageOrientation(const QString & value)
1025 {
1026  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
1027  GST_TAG_IMAGE_ORIENTATION, QGlib::Value::create(value));
1028 }
1029 
1030 double TagList::geoLocationHorizontalError() const
1031 {
1032  return getDoubleTag(d->taglist, GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR, 0);
1033 }
1034 
1035 void TagList::setGeoLocationHorizontalError(double value)
1036 {
1037  gst_tag_list_add(d->taglist, GST_TAG_MERGE_REPLACE_ALL, GST_TAG_GEO_LOCATION_HORIZONTAL_ERROR, value, NULL);
1038 }
1039 
1040 QString TagList::applicationName() const
1041 {
1042  return getStringTag(d->taglist, GST_TAG_APPLICATION_NAME, 0);
1043 }
1044 
1045 void TagList::setApplicationName(const QString & value)
1046 {
1047  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
1048  GST_TAG_APPLICATION_NAME, QGlib::Value::create(value));
1049 }
1050 
1051 BufferPtr TagList::applicationData() const
1052 {
1053  return getBufferTag(d->taglist, GST_TAG_APPLICATION_DATA, 0);
1054 }
1055 
1056 void TagList::setApplicationData(const BufferPtr & value)
1057 {
1058  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
1059  GST_TAG_APPLICATION_DATA, QGlib::Value::create(value));
1060 }
1061 
1062 QDateTime TagList::dateTime() const
1063 {
1064  return tagValue(GST_TAG_DATE_TIME).get<QDateTime>();
1065 }
1066 
1067 void TagList::setDateTime(const QDateTime & value)
1068 {
1069  gst_tag_list_add_value(d->taglist, GST_TAG_MERGE_REPLACE_ALL,
1070  GST_TAG_DATE_TIME, QGlib::Value::create(value));
1071 }
1072 
1073 
1074 QDebug operator<<(QDebug debug, const TagList & taglist)
1075 {
1076  debug.nospace() << "QGst::TagList("
1077  << QGlib::Private::stringFromGCharPtr(gst_structure_to_string(taglist)) << ")";
1078  return debug.space();
1079 }
1080 
1081 } //namespace QGst