00001
00002
00003 #ifndef _GSTREAMERMM_TAGLIST_H
00004 #define _GSTREAMERMM_TAGLIST_H
00005
00006
00007 #include <glibmm.h>
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <gst/gsttaglist.h>
00031 #include <gstreamermm/structure.h>
00032
00033 namespace Gst
00034 {
00035
00041 enum TagMergeMode
00042 {
00043 TAG_MERGE_UNDEFINED,
00044 TAG_MERGE_REPLACE_ALL,
00045 TAG_MERGE_REPLACE,
00046 TAG_MERGE_APPEND,
00047 TAG_MERGE_PREPEND,
00048 TAG_MERGE_KEEP,
00049 TAG_MERGE_KEEP_ALL,
00050 TAG_MERGE_COUNT
00051 };
00052
00053 }
00054
00055
00056 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00057 namespace Glib
00058 {
00059
00060 template <>
00061 class Value<Gst::TagMergeMode> : public Glib::Value_Enum<Gst::TagMergeMode>
00062 {
00063 public:
00064 static GType value_type() G_GNUC_CONST;
00065 };
00066
00067 }
00068 #endif
00069
00070
00071 namespace Gst
00072 {
00073
00077 enum TagFlag
00078 {
00079 TAG_FLAG_UNDEFINED,
00080 TAG_FLAG_META,
00081 TAG_FLAG_ENCODED,
00082 TAG_FLAG_DECODED,
00083 TAG_FLAG_COUNT
00084 };
00085
00086 }
00087
00088
00089 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00090 namespace Glib
00091 {
00092
00093 template <>
00094 class Value<Gst::TagFlag> : public Glib::Value_Enum<Gst::TagFlag>
00095 {
00096 public:
00097 static GType value_type() G_GNUC_CONST;
00098 };
00099
00100 }
00101 #endif
00102
00103
00104 namespace Gst
00105 {
00106
00107
00108 namespace Tag
00109 {
00110
00114 const Glib::ustring TITLE = GST_TAG_TITLE;
00115
00121 const Glib::ustring TITLE_SORTNAME = GST_TAG_TITLE_SORTNAME;
00122
00127 const Glib::ustring ARTIST = GST_TAG_ARTIST;
00128
00135 const Glib::ustring ARTIST_SORTNAME = GST_TAG_ARTIST_SORTNAME;
00136
00140 const Glib::ustring ALBUM = GST_TAG_ALBUM;
00141
00147 const Glib::ustring ALBUM_SORTNAME = GST_TAG_ALBUM_SORTNAME;
00148
00151 const Glib::ustring DATE = GST_TAG_DATE;
00152
00155 const Glib::ustring GENRE = GST_TAG_GENRE;
00156
00159 const Glib::ustring COMMENT = GST_TAG_COMMENT;
00160
00170 const Glib::ustring EXTENDED_COMMENT = GST_TAG_EXTENDED_COMMENT;
00171
00174 const Glib::ustring TRACK_NUMBER = GST_TAG_TRACK_NUMBER;
00175
00178 const Glib::ustring TRACK_COUNT = GST_TAG_TRACK_COUNT;
00179
00182 const Glib::ustring ALBUM_VOLUME_NUMBER = GST_TAG_ALBUM_VOLUME_NUMBER;
00183
00186 const Glib::ustring ALBUM_VOLUME_COUNT = GST_TAG_ALBUM_VOLUME_COUNT;
00187
00190 const Glib::ustring LOCATION = GST_TAG_LOCATION;
00191
00194 const Glib::ustring DESCRIPTION = GST_TAG_DESCRIPTION;
00195
00198 const Glib::ustring VERSION = GST_TAG_VERSION;
00199
00203 const Glib::ustring ISRC = GST_TAG_ISRC;
00204
00207 const Glib::ustring ORGANIZATION = GST_TAG_ORGANIZATION;
00208
00211 const Glib::ustring COPYRIGHT = GST_TAG_COPYRIGHT;
00212
00216 const Glib::ustring COPYRIGHT_URI = GST_TAG_COPYRIGHT_URI;
00217
00221 const Glib::ustring COMPOSER = GST_TAG_COMPOSER;
00222
00225 const Glib::ustring CONTACT = GST_TAG_CONTACT;
00226
00229 const Glib::ustring LICENSE = GST_TAG_LICENSE;
00230
00234 const Glib::ustring LICENSE_URI = GST_TAG_LICENSE_URI;
00235
00238 const Glib::ustring PERFORMER = GST_TAG_PERFORMER;
00239
00242 const Glib::ustring DURATION = GST_TAG_DURATION;
00243
00246 const Glib::ustring CODEC = GST_TAG_CODEC;
00247
00250 const Glib::ustring VIDEO_CODEC = GST_TAG_VIDEO_CODEC;
00251
00254 const Glib::ustring AUDIO_CODEC = GST_TAG_AUDIO_CODEC;
00255
00258 const Glib::ustring BITRATE = GST_TAG_BITRATE;
00259
00262 const Glib::ustring NOMINAL_BITRATE = GST_TAG_NOMINAL_BITRATE;
00263
00266 const Glib::ustring MINIMUM_BITRATE = GST_TAG_MINIMUM_BITRATE;
00267
00270 const Glib::ustring MAXIMUM_BITRATE = GST_TAG_MAXIMUM_BITRATE;
00271
00274 const Glib::ustring SERIAL = GST_TAG_SERIAL;
00275
00278 const Glib::ustring ENCODER = GST_TAG_ENCODER;
00279
00282 const Glib::ustring ENCODER_VERSION = GST_TAG_ENCODER_VERSION;
00283
00286 const Glib::ustring TRACK_GAIN = GST_TAG_TRACK_GAIN;
00287
00290 const Glib::ustring TRACK_PEAK = GST_TAG_TRACK_PEAK;
00291
00294 const Glib::ustring ALBUM_GAIN = GST_TAG_ALBUM_GAIN;
00295
00298 const Glib::ustring ALBUM_PEAK = GST_TAG_ALBUM_PEAK;
00299
00303 const Glib::ustring REFERENCE_LEVEL = GST_TAG_REFERENCE_LEVEL;
00304
00307 const Glib::ustring LANGUAGE_CODE = GST_TAG_LANGUAGE_CODE;
00308
00313 const Glib::ustring IMAGE = GST_TAG_IMAGE;
00314
00319 const Glib::ustring PREVIEW_IMAGE = GST_TAG_PREVIEW_IMAGE;
00320
00324 const Glib::ustring BEATS_PER_MINUTE = GST_TAG_BEATS_PER_MINUTE;
00325
00326 }
00327
00344 class TagList : public Structure
00345 {
00346 public:
00347 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00348 typedef TagList CppObjectType;
00349 typedef GstTagList BaseObjectType;
00350
00351 static GType get_type() G_GNUC_CONST;
00352 #endif
00353
00354 TagList();
00355
00356 explicit TagList(GstTagList* gobject, bool make_a_copy = true);
00357
00358 TagList(const TagList& other);
00359 TagList& operator=(const TagList& other);
00360
00361 ~TagList();
00362
00363 void swap(TagList& other);
00364
00366 GstTagList* gobj() { return gobject_; }
00367
00369 const GstTagList* gobj() const { return gobject_; }
00370
00372 GstTagList* gobj_copy() const;
00373
00374 protected:
00375 GstTagList* gobject_;
00376
00377 private:
00378
00379
00380 public:
00381
00386 static bool exists(const Glib::ustring& tag);
00387
00392 static GType get_type(const Glib::ustring& tag);
00393
00398 static Glib::ustring get_nick(const Glib::ustring& tag);
00399
00404 static Glib::ustring get_description(const Glib::ustring& tag);
00405
00410 static TagFlag get_flag(const Glib::ustring& tag);
00411
00417 static bool is_fixed(const Glib::ustring& tag);
00418
00424 bool is_empty() const;
00425
00430 void insert(const Gst::TagList& other, TagMergeMode mode=TAG_MERGE_PREPEND);
00431
00438 Gst::TagList merge(const Gst::TagList& other, TagMergeMode mode=TAG_MERGE_PREPEND);
00439
00444 guint size(const Glib::ustring& tag) const;
00445
00452 void add(const Glib::ustring& tag, const Glib::ValueBase& value, TagMergeMode mode=TAG_MERGE_PREPEND);
00453
00461 void add(const Glib::ustring& tag, const char* data, TagMergeMode mode=TAG_MERGE_PREPEND);
00462
00470 template <class DataType>
00471 void add(const Glib::ustring& tag, const DataType& data, TagMergeMode mode=TAG_MERGE_PREPEND);
00472
00473
00477 void remove_tag(const Glib::ustring& tag);
00478
00482 typedef sigc::slot<void, const Glib::ustring&> SlotForeach;
00483
00489 void foreach(const SlotForeach& slot);
00490
00491
00500 bool get(const Glib::ustring& tag, Glib::ValueBase& dest);
00501
00502
00511 bool get(const Glib::ustring& tag, guint index, Glib::ValueBase& dest);
00512
00513
00521 template<class DataType> bool get(const Glib::ustring& tag, DataType& value);
00522
00523
00531 template<class DataType> bool get(const Glib::ustring& tag, guint index, DataType& value);
00532
00533
00534
00535
00536
00537 };
00538
00539 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00540
00541
00542
00543 template <class DataType>
00544 void TagList::add(const Glib::ustring& tag, const DataType& data, TagMergeMode mode)
00545 {
00546 typedef Glib::Value<DataType> ValueType;
00547
00548 ValueType value;
00549 value.init(ValueType::value_type());
00550 value.set(data);
00551 this->add(tag, (Glib::ValueBase) value, mode);
00552 }
00553
00554 template<class DataType>
00555 bool TagList::get(const Glib::ustring& tag, DataType& data)
00556 {
00557 Glib::Value<DataType> value;
00558 bool result = this->get(tag, (Glib::ValueBase&) value);
00559
00560 if (result)
00561 data = value.get();
00562
00563 return result;
00564 }
00565
00566 template<class DataType>
00567 bool TagList::get(const Glib::ustring& tag, guint index, DataType& data)
00568 {
00569 Glib::Value<DataType> value;
00570 bool result = this->get(tag, index, (Glib::ValueBase&) value);
00571
00572 if (result)
00573 data = value.get();
00574
00575 return result;
00576 }
00577
00578 #endif
00579
00580
00581 }
00582
00583
00584 namespace Gst
00585 {
00586
00591 inline void swap(TagList& lhs, TagList& rhs)
00592 { lhs.swap(rhs); }
00593
00594 }
00595
00596 namespace Glib
00597 {
00598
00608 Gst::TagList wrap(GstTagList* object, int dummy, bool take_copy = false);
00609
00610 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00611 template <>
00612 class Value<Gst::TagList> : public Glib::Value_Boxed<Gst::TagList>
00613 {};
00614 #endif
00615
00616 }
00617
00618
00619 #endif
00620