src/itmf/Tags.h Source File
Tags.h
1 //
3 // The contents of this file are subject to the Mozilla Public License
4 // Version 1.1 (the "License"); you may not use this file except in
5 // compliance with the License. You may obtain a copy of the License at
6 // http://www.mozilla.org/MPL/
7 //
8 // Software distributed under the License is distributed on an "AS IS"
9 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
10 // License for the specific language governing rights and limitations
11 // under the License.
12 //
13 // The Original Code is MP4v2.
14 //
15 // The Initial Developer of the Original Code is Kona Blend.
16 // Portions created by Kona Blend are Copyright (C) 2008.
17 // Portions created by David Byron are Copyright (C) 2011.
18 // All Rights Reserved.
19 //
20 // Contributors:
21 // Kona Blend, kona8lend@gmail.com
22 // Rouven Wessling, mp4v2@rouvenwessling.de
23 // David Byron, dbyron@dbyron.com
24 //
26 
27 #ifndef MP4V2_IMPL_ITMF_TAGS_H
28 #define MP4V2_IMPL_ITMF_TAGS_H
29 
30 namespace mp4v2 { namespace impl { namespace itmf {
31 
33 
34 class Tags
35 {
36 public:
37  static const string CODE_NAME;
38  static const string CODE_ARTIST;
39  static const string CODE_ALBUMARTIST;
40  static const string CODE_ALBUM;
41  static const string CODE_GROUPING;
42  static const string CODE_COMPOSER;
43  static const string CODE_COMMENTS;
44  static const string CODE_GENRE;
45  static const string CODE_GENRETYPE;
46  static const string CODE_RELEASEDATE;
47  static const string CODE_TRACK;
48  static const string CODE_DISK;
49  static const string CODE_TEMPO;
50  static const string CODE_COMPILATION;
51 
52  static const string CODE_TVSHOW;
53  static const string CODE_TVNETWORK;
54  static const string CODE_TVEPISODEID;
55  static const string CODE_TVSEASON;
56  static const string CODE_TVEPISODE;
57 
58  static const string CODE_DESCRIPTION;
59  static const string CODE_LONGDESCRIPTION;
60  static const string CODE_LYRICS;
61 
62  static const string CODE_SORTNAME;
63  static const string CODE_SORTARTIST;
64  static const string CODE_SORTALBUMARTIST;
65  static const string CODE_SORTALBUM;
66  static const string CODE_SORTCOMPOSER;
67  static const string CODE_SORTTVSHOW;
68 
69  static const string CODE_COPYRIGHT;
70  static const string CODE_ENCODINGTOOL;
71  static const string CODE_ENCODEDBY;
72  static const string CODE_PURCHASEDATE;
73 
74  static const string CODE_PODCAST;
75  static const string CODE_KEYWORDS;
76  static const string CODE_CATEGORY;
77 
78  static const string CODE_HDVIDEO;
79  static const string CODE_MEDIATYPE;
80  static const string CODE_CONTENTRATING;
81  static const string CODE_GAPLESS;
82 
83  static const string CODE_ITUNESACCOUNT;
84  static const string CODE_ITUNESACCOUNTTYPE;
85  static const string CODE_ITUNESCOUNTRY;
86  static const string CODE_CONTENTID;
87  static const string CODE_ARTISTID;
88  static const string CODE_PLAYLISTID;
89  static const string CODE_GENREID;
90  static const string CODE_COMPOSERID;
91  static const string CODE_XID;
92 
93 public:
94  string name;
95  string artist;
96  string albumArtist;
97  string album;
98  string grouping;
99  string composer;
100  string comments;
101  string genre;
102  uint16_t genreType;
103  string releaseDate;
104  MP4TagTrack track;
105  MP4TagDisk disk;
106  uint16_t tempo;
107  uint8_t compilation;
108 
109  string tvShow;
110  string tvEpisodeID;
111  uint32_t tvSeason;
112  uint32_t tvEpisode;
113  string tvNetwork;
114 
115  string description;
116  string longDescription;
117  string lyrics;
118 
119  string sortName;
120  string sortArtist;
121  string sortAlbumArtist;
122  string sortAlbum;
123  string sortComposer;
124  string sortTVShow;
125 
126  CoverArtBox::ItemList artwork;
127 
128  string copyright;
129  string encodingTool;
130  string encodedBy;
131  string purchaseDate;
132 
133  uint8_t podcast;
134  string keywords;
135  string category;
136 
137  uint8_t hdVideo;
138  uint8_t mediaType;
139  uint8_t contentRating;
140  uint8_t gapless;
141 
142  string iTunesAccount;
143  uint8_t iTunesAccountType;
144  uint32_t iTunesCountry;
145  uint32_t contentID;
146  uint32_t artistID;
147  uint64_t playlistID;
148  uint32_t genreID;
149  uint32_t composerID;
150  string xid;
151 
152  bool hasMetadata;
153 
154 public:
155  Tags();
156  ~Tags();
157 
158  void c_alloc ( MP4Tags*& );
159  void c_fetch ( MP4Tags*&, MP4FileHandle );
160  void c_store ( MP4Tags*&, MP4FileHandle );
161  void c_free ( MP4Tags*& );
162 
163  void c_addArtwork ( MP4Tags*&, MP4TagArtwork& );
164  void c_setArtwork ( MP4Tags*&, uint32_t, MP4TagArtwork& );
165  void c_removeArtwork ( MP4Tags*&, uint32_t );
166 
167  void c_setString ( const char*, string&, const char*& );
168  void c_setInteger ( const uint8_t*, uint8_t&, const uint8_t*& );
169  void c_setInteger ( const uint16_t*, uint16_t&, const uint16_t*& );
170  void c_setInteger ( const uint32_t*, uint32_t&, const uint32_t*& );
171  void c_setInteger ( const uint64_t*, uint64_t&, const uint64_t*& );
172 
173  void c_setTrack ( const MP4TagTrack*, MP4TagTrack&, const MP4TagTrack*& );
174  void c_setDisk ( const MP4TagDisk*, MP4TagDisk&, const MP4TagDisk*& );
175 
176 private:
177  typedef map<string,MP4ItmfItem*> CodeItemMap;
178 
179 private:
180  void fetchString ( const CodeItemMap&, const string&, string&, const char*& );
181  void fetchInteger ( const CodeItemMap&, const string&, uint8_t&, const uint8_t*& );
182  void fetchInteger ( const CodeItemMap&, const string&, uint16_t&, const uint16_t*& );
183  void fetchInteger ( const CodeItemMap&, const string&, uint32_t&, const uint32_t*& );
184  void fetchInteger ( const CodeItemMap&, const string&, uint64_t&, const uint64_t*& );
185 
186  void fetchGenre ( const CodeItemMap&, uint16_t&, const uint16_t*& );
187  void fetchTrack ( const CodeItemMap&, MP4TagTrack&, const MP4TagTrack*& );
188  void fetchDisk ( const CodeItemMap&, MP4TagDisk&, const MP4TagDisk*& );
189 
190  void storeString ( MP4File&, const string&, const string&, const char* );
191  void storeInteger ( MP4File&, const string&, uint8_t, const uint8_t* );
192  void storeInteger ( MP4File&, const string&, uint16_t, const uint16_t* );
193  void storeInteger ( MP4File&, const string&, uint32_t, const uint32_t* );
194  void storeInteger ( MP4File&, const string&, uint64_t, const uint64_t* );
195 
196  void storeGenre ( MP4File&, uint16_t, const uint16_t* );
197  void storeTrack ( MP4File&, const MP4TagTrack&, const MP4TagTrack* );
198  void storeDisk ( MP4File&, const MP4TagDisk&, const MP4TagDisk* );
199 
200  void remove ( MP4File&, const string& );
201  void store ( MP4File&, const string&, MP4ItmfBasicType, const void*, uint32_t );
202 
203  void updateArtworkShadow( MP4Tags*& );
204 };
205 
207 
208 }}} // namespace mp4v2::impl::itmf
209 
210 #endif // MP4V2_IMPL_ITMF_TAGS_H
MP4TagDisk_s
Definition: itmf_tags.h:80
MP4TagArtwork_s
Data object representing a single piece of artwork.
Definition: itmf_tags.h:67
MP4ItmfBasicType
enum MP4ItmfBasicType_e MP4ItmfBasicType
Basic types of value data as enumerated in spec.
MP4Tags_s
Tags convenience structure.
Definition: itmf_tags.h:98
MP4TagTrack_s
Definition: itmf_tags.h:74
mp4v2::impl::itmf::CoverArtBox::ItemList
vector< Item > ItemList
Object representing a list of covr-box items.
Definition: CoverArtBox.h:61
mp4v2::impl::itmf::Tags
Definition: Tags.h:34