blob: 2f0de9e7cd8539c114cc892941e71f59d5c1c2c8 [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
//
// The contents of this file are subject to the Mozilla Public License
// Version 1.1 (the "License"); you may not use this file except in
// compliance with the License. You may obtain a copy of the License at
// http://www.mozilla.org/MPL/
//
// Software distributed under the License is distributed on an "AS IS"
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
// License for the specific language governing rights and limitations
// under the License.
//
// The Original Code is MP4v2.
//
// The Initial Developer of the Original Code is Kona Blend.
// Portions created by Kona Blend are Copyright (C) 2008.
// Portions created by David Byron are Copyright (C) 2011.
// All Rights Reserved.
//
// Contributors:
// Kona Blend, kona8lend@gmail.com
// Rouven Wessling, mp4v2@rouvenwessling.de
// David Byron, dbyron@dbyron.com
//
///////////////////////////////////////////////////////////////////////////////
#ifndef MP4V2_IMPL_ITMF_TAGS_H
#define MP4V2_IMPL_ITMF_TAGS_H
namespace mp4v2 { namespace impl { namespace itmf {
///////////////////////////////////////////////////////////////////////////////
class Tags
{
public:
static const std::string CODE_NAME;
static const std::string CODE_ARTIST;
static const std::string CODE_ALBUMARTIST;
static const std::string CODE_ALBUM;
static const std::string CODE_GROUPING;
static const std::string CODE_COMPOSER;
static const std::string CODE_COMMENTS;
static const std::string CODE_GENRE;
static const std::string CODE_GENRETYPE;
static const std::string CODE_RELEASEDATE;
static const std::string CODE_TRACK;
static const std::string CODE_DISK;
static const std::string CODE_TEMPO;
static const std::string CODE_COMPILATION;
static const std::string CODE_TVSHOW;
static const std::string CODE_TVNETWORK;
static const std::string CODE_TVEPISODEID;
static const std::string CODE_TVSEASON;
static const std::string CODE_TVEPISODE;
static const std::string CODE_DESCRIPTION;
static const std::string CODE_LONGDESCRIPTION;
static const std::string CODE_LYRICS;
static const std::string CODE_SORTNAME;
static const std::string CODE_SORTARTIST;
static const std::string CODE_SORTALBUMARTIST;
static const std::string CODE_SORTALBUM;
static const std::string CODE_SORTCOMPOSER;
static const std::string CODE_SORTTVSHOW;
static const std::string CODE_COPYRIGHT;
static const std::string CODE_ENCODINGTOOL;
static const std::string CODE_ENCODEDBY;
static const std::string CODE_PURCHASEDATE;
static const std::string CODE_PODCAST;
static const std::string CODE_KEYWORDS;
static const std::string CODE_CATEGORY;
static const std::string CODE_HDVIDEO;
static const std::string CODE_MEDIATYPE;
static const std::string CODE_CONTENTRATING;
static const std::string CODE_GAPLESS;
static const std::string CODE_ITUNESACCOUNT;
static const std::string CODE_ITUNESACCOUNTTYPE;
static const std::string CODE_ITUNESCOUNTRY;
static const std::string CODE_CONTENTID;
static const std::string CODE_ARTISTID;
static const std::string CODE_PLAYLISTID;
static const std::string CODE_GENREID;
static const std::string CODE_COMPOSERID;
static const std::string CODE_XID;
public:
std::string name;
std::string artist;
std::string albumArtist;
std::string album;
std::string grouping;
std::string composer;
std::string comments;
std::string genre;
uint16_t genreType;
std::string releaseDate;
MP4TagTrack track;
MP4TagDisk disk;
uint16_t tempo;
uint8_t compilation;
std::string tvShow;
std::string tvEpisodeID;
uint32_t tvSeason;
uint32_t tvEpisode;
std::string tvNetwork;
std::string description;
std::string longDescription;
std::string lyrics;
std::string sortName;
std::string sortArtist;
std::string sortAlbumArtist;
std::string sortAlbum;
std::string sortComposer;
std::string sortTVShow;
CoverArtBox::ItemList artwork;
std::string copyright;
std::string encodingTool;
std::string encodedBy;
std::string purchaseDate;
uint8_t podcast;
std::string keywords;
std::string category;
uint8_t hdVideo;
uint8_t mediaType;
uint8_t contentRating;
uint8_t gapless;
std::string iTunesAccount;
uint8_t iTunesAccountType;
uint32_t iTunesCountry;
uint32_t contentID;
uint32_t artistID;
uint64_t playlistID;
uint32_t genreID;
uint32_t composerID;
std::string xid;
bool hasMetadata;
public:
Tags();
~Tags();
void c_alloc ( MP4Tags*& );
void c_fetch ( MP4Tags*&, MP4FileHandle );
void c_store ( MP4Tags*&, MP4FileHandle );
void c_free ( MP4Tags*& );
void c_addArtwork ( MP4Tags*&, MP4TagArtwork& );
void c_setArtwork ( MP4Tags*&, uint32_t, MP4TagArtwork& );
void c_removeArtwork ( MP4Tags*&, uint32_t );
void c_setString ( const char*, std::string&, const char*& );
void c_setInteger ( const uint8_t*, uint8_t&, const uint8_t*& );
void c_setInteger ( const uint16_t*, uint16_t&, const uint16_t*& );
void c_setInteger ( const uint32_t*, uint32_t&, const uint32_t*& );
void c_setInteger ( const uint64_t*, uint64_t&, const uint64_t*& );
void c_setTrack ( const MP4TagTrack*, MP4TagTrack&, const MP4TagTrack*& );
void c_setDisk ( const MP4TagDisk*, MP4TagDisk&, const MP4TagDisk*& );
private:
typedef std::map<std::string,MP4ItmfItem*> CodeItemMap;
private:
void fetchString ( const CodeItemMap&, const std::string&, std::string&, const char*& );
void fetchInteger ( const CodeItemMap&, const std::string&, uint8_t&, const uint8_t*& );
void fetchInteger ( const CodeItemMap&, const std::string&, uint16_t&, const uint16_t*& );
void fetchInteger ( const CodeItemMap&, const std::string&, uint32_t&, const uint32_t*& );
void fetchInteger ( const CodeItemMap&, const std::string&, uint64_t&, const uint64_t*& );
void fetchGenre ( const CodeItemMap&, uint16_t&, const uint16_t*& );
void fetchTrack ( const CodeItemMap&, MP4TagTrack&, const MP4TagTrack*& );
void fetchDisk ( const CodeItemMap&, MP4TagDisk&, const MP4TagDisk*& );
void storeString ( MP4File&, const std::string&, const std::string&, const char* );
void storeInteger ( MP4File&, const std::string&, uint8_t, const uint8_t* );
void storeInteger ( MP4File&, const std::string&, uint16_t, const uint16_t* );
void storeInteger ( MP4File&, const std::string&, uint32_t, const uint32_t* );
void storeInteger ( MP4File&, const std::string&, uint64_t, const uint64_t* );
void storeGenre ( MP4File&, uint16_t, const uint16_t* );
void storeTrack ( MP4File&, const MP4TagTrack&, const MP4TagTrack* );
void storeDisk ( MP4File&, const MP4TagDisk&, const MP4TagDisk* );
void remove ( MP4File&, const std::string& );
void store ( MP4File&, const std::string&, MP4ItmfBasicType, const void*, uint32_t );
void updateArtworkShadow( MP4Tags*& );
};
///////////////////////////////////////////////////////////////////////////////
}}} // namespace mp4v2::impl::itmf
#endif // MP4V2_IMPL_ITMF_TAGS_H