taglist.h

Go to the documentation of this file.
00001 // -*- c++ -*-
00002 // Generated by gtkmmproc -- DO NOT MODIFY!
00003 #ifndef _GSTREAMERMM_TAGLIST_H
00004 #define _GSTREAMERMM_TAGLIST_H
00005 
00006 
00007 #include <glibmm.h>
00008 
00009 /* gstreamermm - a C++ wrapper for gstreamer
00010  *
00011  * Copyright 2008 The gstreamermm Development Team
00012  *
00013  * This library is free software; you can redistribute it and/or
00014  * modify it under the terms of the GNU Lesser General Public
00015  * License as published by the Free Software Foundation; either
00016  * version 2.1 of the License, or (at your option) any later version.
00017  *
00018  * This library is distributed in the hope that it will be useful,
00019  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00020  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00021  * Lesser General Public License for more details.
00022  *
00023  * You should have received a copy of the GNU Lesser General Public
00024  * License along with this library; if not, write to the Free
00025  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00026  */
00027 
00028 #include <gst/gsttaglist.h>
00029 #include <gstreamermm/structure.h>
00030 
00031 namespace Gst
00032 {
00033 
00039 enum TagMergeMode
00040 {
00041   TAG_MERGE_UNDEFINED,
00042   TAG_MERGE_REPLACE_ALL,
00043   TAG_MERGE_REPLACE,
00044   TAG_MERGE_APPEND,
00045   TAG_MERGE_PREPEND,
00046   TAG_MERGE_KEEP,
00047   TAG_MERGE_KEEP_ALL,
00048   TAG_MERGE_COUNT
00049 };
00050 
00051 } // namespace Gst
00052 
00053 
00054 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00055 namespace Glib
00056 {
00057 
00058 template <>
00059 class Value<Gst::TagMergeMode> : public Glib::Value_Enum<Gst::TagMergeMode>
00060 {
00061 public:
00062   static GType value_type() G_GNUC_CONST;
00063 };
00064 
00065 } // namespace Glib
00066 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00067 
00068 
00069 namespace Gst
00070 {
00071 
00075 enum TagFlag
00076 {
00077   TAG_FLAG_UNDEFINED,
00078   TAG_FLAG_META,
00079   TAG_FLAG_ENCODED,
00080   TAG_FLAG_DECODED,
00081   TAG_FLAG_COUNT
00082 };
00083 
00084 } // namespace Gst
00085 
00086 
00087 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00088 namespace Glib
00089 {
00090 
00091 template <>
00092 class Value<Gst::TagFlag> : public Glib::Value_Enum<Gst::TagFlag>
00093 {
00094 public:
00095   static GType value_type() G_GNUC_CONST;
00096 };
00097 
00098 } // namespace Glib
00099 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00100 
00101 
00102 namespace Gst
00103 {
00104 
00105 
00106 // When adding tags, make sure that they are added to this enum and then in the
00107 // ccg file in the correct order.  Also make sure that the size of the array of
00108 // strings is updated in the declaration below and in the ccg file.
00109 enum Tag
00110 {
00114 TAG_TITLE,
00115 
00121 TAG_TITLE_SORTNAME,
00122 
00127 TAG_ARTIST,
00128 
00135 TAG_ARTIST_SORTNAME,
00136 
00140 TAG_ALBUM,
00141 
00147 TAG_ALBUM_SORTNAME,
00148 
00151 TAG_DATE,
00152 
00155 TAG_GENRE,
00156 
00159 TAG_COMMENT,
00160 
00170 TAG_EXTENDED_COMMENT,
00171 
00174 TAG_TRACK_NUMBER,
00175 
00178 TAG_TRACK_COUNT,
00179 
00182 TAG_ALBUM_VOLUME_NUMBER,
00183 
00186 TAG_ALBUM_VOLUME_COUNT,
00187 
00190 TAG_LOCATION,
00191 
00194 TAG_DESCRIPTION,
00195 
00198 TAG_VERSION,
00199 
00203 TAG_ISRC,
00204 
00207 TAG_ORGANIZATION,
00208 
00211 TAG_COPYRIGHT,
00212 
00216 TAG_COPYRIGHT_URI,
00217 
00221 TAG_COMPOSER,
00222 
00225 TAG_CONTACT,
00226 
00229 TAG_LICENSE,
00230 
00234 TAG_LICENSE_URI,
00235 
00238 TAG_PERFORMER,
00239 
00242 TAG_DURATION,
00243 
00246 TAG_CODEC,
00247 
00250 TAG_VIDEO_CODEC,
00251 
00254 TAG_AUDIO_CODEC,
00255 
00258 TAG_BITRATE,
00259 
00262 TAG_NOMINAL_BITRATE,
00263 
00266 TAG_MINIMUM_BITRATE,
00267 
00270 TAG_MAXIMUM_BITRATE,
00271 
00274 TAG_SERIAL,
00275 
00278 TAG_ENCODER,
00279 
00282 TAG_ENCODER_VERSION,
00283 
00286 TAG_TRACK_GAIN,
00287 
00290 TAG_TRACK_PEAK,
00291 
00294 TAG_ALBUM_GAIN,
00295 
00298 TAG_ALBUM_PEAK,
00299 
00303 TAG_REFERENCE_LEVEL,
00304 
00307 TAG_LANGUAGE_CODE,
00308 
00313 TAG_IMAGE,
00314 
00319 TAG_PREVIEW_IMAGE,
00320 
00326 TAG_ATTACHMENT,
00327 
00331 TAG_BEATS_PER_MINUTE,
00332 
00337 TAG_KEYWORDS,
00338 
00344 TAG_GEO_LOCATION_NAME,
00345 
00352 TAG_GEO_LOCATION_LATITUDE,
00353 
00360 TAG_GEO_LOCATION_LONGITUDE,
00361 
00367 TAG_GEO_LOCATION_ELEVATION
00368 };
00369 
00372 std::ostream& operator<<(std::ostream& stream, Tag tag);
00373 
00374 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00375 // The size should be the last enum of Gst::Tag (above) + 1.
00376 extern const char* tagStrings[TAG_GEO_LOCATION_ELEVATION + 1];
00377 #endif
00378 
00395 class TagList : public Structure
00396 {
00397   public:
00398 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00399   typedef TagList CppObjectType;
00400   typedef GstTagList BaseObjectType;
00401 
00402   static GType get_type() G_GNUC_CONST;
00403 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00404 
00405   TagList();
00406 
00407   explicit TagList(GstTagList* gobject, bool make_a_copy = true);
00408 
00409   TagList(const TagList& other);
00410   TagList& operator=(const TagList& other);
00411 
00412   ~TagList();
00413 
00414   void swap(TagList& other);
00415 
00417   GstTagList*       gobj()       { return gobject_; }
00418 
00420   const GstTagList* gobj() const { return gobject_; }
00421 
00423   GstTagList* gobj_copy() const;
00424 
00425 protected:
00426   GstTagList* gobject_;
00427 
00428 private:
00429 
00430   
00431 public:
00432   
00437   static bool exists(const Glib::ustring& tag);
00438   
00443   static GType get_type(const Glib::ustring& tag);
00444   
00449   static Glib::ustring get_nick(const Glib::ustring& tag);
00450   
00455   static Glib::ustring get_description(const Glib::ustring& tag);
00456   
00461   static TagFlag get_flag(const Glib::ustring& tag);
00462   
00468   static bool is_fixed(const Glib::ustring& tag);
00469   
00475   bool is_empty() const;
00476   
00481   void insert(const Gst::TagList& other, TagMergeMode mode=TAG_MERGE_PREPEND);
00482   
00489   Gst::TagList merge(const Gst::TagList& other, TagMergeMode mode=TAG_MERGE_PREPEND);
00490   
00495   guint size(const Glib::ustring& tag) const;
00496 
00503   void add(Tag tag, const Glib::ValueBase& value, TagMergeMode mode=TAG_MERGE_PREPEND);
00504 
00512   void add(Tag tag, const char* data, TagMergeMode mode=TAG_MERGE_PREPEND);
00513 
00521   template <class DataType>
00522   void add(Tag tag, const DataType& data, TagMergeMode mode=TAG_MERGE_PREPEND);
00523   
00524 
00528   void remove_tag(Tag tag);
00529 
00533   typedef sigc::slot<void, const Glib::ustring&> SlotForeach;
00534 
00540   void foreach(const SlotForeach& slot);
00541   
00542 
00551   bool get(Tag tag, Glib::ValueBase& dest) const;
00552   
00553 
00562   bool get(Tag tag, guint index, Glib::ValueBase& dest) const;
00563   
00564 
00572   template<class DataType>
00573   bool get(Tag tag, DataType& value) const;
00574   
00575 
00583   template<class DataType>
00584   bool get(Tag tag, guint index, DataType& value) const;
00585   
00586 
00587   //Variable argument functions are ignored.
00588   
00589 
00590 };
00591 
00592 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00593 
00594 /***************************** Gst::TagList *****************************/
00595 
00596 template <class DataType>
00597 void TagList::add(Tag tag, const DataType& data, TagMergeMode mode)
00598 {
00599   typedef Glib::Value<DataType> ValueType;
00600 
00601   ValueType value;
00602   value.init(ValueType::value_type());
00603   value.set(data);
00604   this->add(tag, (Glib::ValueBase) value, mode);
00605 }
00606 
00607 template<class DataType>
00608 bool TagList::get(Tag tag, DataType& data) const
00609 {
00610   Glib::Value<DataType> value;
00611   bool result = this->get(tag, (Glib::ValueBase&) value);
00612 
00613   if(result)
00614     data = value.get();
00615 
00616   return result;
00617 }
00618 
00619 template<class DataType>
00620 bool TagList::get(Tag tag, guint index, DataType& data) const
00621 {
00622   Glib::Value<DataType> value;
00623   bool result = this->get(tag, index, (Glib::ValueBase&) value);
00624 
00625   if(result)
00626     data = value.get();
00627 
00628   return result;
00629 }
00630 
00631 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00632 
00633 } //namespace Gst
00634 
00635 
00636 namespace Gst
00637 {
00638 
00643 inline void swap(TagList& lhs, TagList& rhs)
00644   { lhs.swap(rhs); }
00645 
00646 } // namespace Gst
00647 
00648 namespace Glib
00649 {
00650 
00660 Gst::TagList wrap(GstTagList* object, int dummy, bool take_copy = false);
00661 
00662 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00663 template <>
00664 class Value<Gst::TagList> : public Glib::Value_Boxed<Gst::TagList>
00665 {};
00666 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00667 
00668 } // namespace Glib
00669 
00670 
00671 #endif /* _GSTREAMERMM_TAGLIST_H */
00672 

Generated on Wed Aug 19 15:53:29 2009 for gstreamermm by  doxygen 1.5.4