Blame include/cdio/cdtext.h

Packit dd8086
/*
Packit dd8086
    Copyright (C) 2004, 2005, 2008, 2012 Rocky Bernstein <rocky@gnu.org>
Packit dd8086
    adapted from cuetools
Packit dd8086
    Copyright (C) 2003 Svend Sanjay Sorensen <ssorensen@fastmail.fm>
Packit dd8086
Packit dd8086
    This program is free software: you can redistribute it and/or modify
Packit dd8086
    it under the terms of the GNU General Public License as published by
Packit dd8086
    the Free Software Foundation, either version 3 of the License, or
Packit dd8086
    (at your option) any later version.
Packit dd8086
Packit dd8086
    This program is distributed in the hope that it will be useful,
Packit dd8086
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
    GNU General Public License for more details.
Packit dd8086
Packit dd8086
    You should have received a copy of the GNU General Public License
Packit dd8086
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086
/*!
Packit dd8086
 * \file cdtext.h 
Packit dd8086
 *
Packit dd8086
 * \brief The top-level header for CD-Text information. Applications
Packit dd8086
 *  include this for CD-Text access.
Packit dd8086
*/
Packit dd8086
Packit dd8086

Packit dd8086
#ifndef CDIO_CDTEXT_H_
Packit dd8086
#define CDIO_CDTEXT_H_
Packit dd8086
Packit dd8086
#include <cdio/types.h>
Packit dd8086
Packit dd8086
#ifdef __cplusplus
Packit dd8086
extern "C" {
Packit dd8086
#endif /* __cplusplus */
Packit dd8086
Packit dd8086
#define MIN_CDTEXT_FIELD          0
Packit dd8086
#define MAX_CDTEXT_FIELDS         10
Packit dd8086
Packit dd8086
/*! Enumeration of CD-TEXT text fields. */
Packit dd8086
typedef enum {
Packit dd8086
  CDTEXT_FIELD_TITLE          =  0,   /**< title of album name or track titles */
Packit dd8086
  CDTEXT_FIELD_PERFORMER      =  1,   /**< name(s) of the performer(s) */
Packit dd8086
  CDTEXT_FIELD_SONGWRITER     =  2,   /**< name(s) of the songwriter(s) */
Packit dd8086
  CDTEXT_FIELD_COMPOSER       =  3,   /**< name(s) of the composer(s) */
Packit dd8086
  CDTEXT_FIELD_MESSAGE        =  4,   /**< message(s) from content provider or artist, ISO-8859-1 encoded*/
Packit dd8086
  CDTEXT_FIELD_ARRANGER       =  5,   /**< name(s) of the arranger(s) */
Packit dd8086
  CDTEXT_FIELD_ISRC           =  6,   /**< ISRC code of each track */
Packit dd8086
  CDTEXT_FIELD_UPC_EAN        =  7,   /**< upc/european article number of disc, ISO-8859-1 encoded */
Packit dd8086
  CDTEXT_FIELD_GENRE          =  8,   /**< genre identification and genre information, ASCII encoded */
Packit dd8086
  CDTEXT_FIELD_DISCID         =  9,   /**< disc identification, ASCII encoded (may be non-printable) */
Packit dd8086
  CDTEXT_FIELD_INVALID        =  MAX_CDTEXT_FIELDS /**< INVALID FIELD*/
Packit dd8086
} cdtext_field_t;
Packit dd8086
Packit dd8086
/*! Enumeration of possible genre codes. */
Packit dd8086
typedef enum {
Packit dd8086
  CDTEXT_GENRE_UNUSED         =  0,   /**< field is not used. default */
Packit dd8086
  CDTEXT_GENRE_UNDEFINED      =  1,   /**< not defined */
Packit dd8086
  CDTEXT_GENRE_ADULT_CONTEMP  =  2,   /**< Adult Contemporary */
Packit dd8086
  CDTEXT_GENRE_ALT_ROCK       =  3,   /**< Alternative Rock */
Packit dd8086
  CDTEXT_GENRE_CHILDRENS      =  4,   /**< Childrens Music */
Packit dd8086
  CDTEXT_GENRE_CLASSIC        =  5,   /**< Classical */
Packit dd8086
  CDTEXT_GENRE_CHRIST_CONTEMP =  6,   /**< Contemporary Christian */
Packit dd8086
  CDTEXT_GENRE_COUNTRY        =  7,   /**< Country */
Packit dd8086
  CDTEXT_GENRE_DANCE          =  8,   /**< Dance */
Packit dd8086
  CDTEXT_GENRE_EASY_LISTENING =  9,   /**< Easy Listening */
Packit dd8086
  CDTEXT_GENRE_EROTIC         = 10,   /**< Erotic */
Packit dd8086
  CDTEXT_GENRE_FOLK           = 11,   /**< Folk */
Packit dd8086
  CDTEXT_GENRE_GOSPEL         = 12,   /**< Gospel */
Packit dd8086
  CDTEXT_GENRE_HIPHOP         = 13,   /**< Hip Hop */
Packit dd8086
  CDTEXT_GENRE_JAZZ           = 14,   /**< Jazz */
Packit dd8086
  CDTEXT_GENRE_LATIN          = 15,   /**< Latin */
Packit dd8086
  CDTEXT_GENRE_MUSICAL        = 16,   /**< Musical */
Packit dd8086
  CDTEXT_GENRE_NEWAGE         = 17,   /**< New Age */
Packit dd8086
  CDTEXT_GENRE_OPERA          = 18,   /**< Opera */
Packit dd8086
  CDTEXT_GENRE_OPERETTA       = 19,   /**< Operetta */
Packit dd8086
  CDTEXT_GENRE_POP            = 20,   /**< Pop Music */
Packit dd8086
  CDTEXT_GENRE_RAP            = 21,   /**< RAP */
Packit dd8086
  CDTEXT_GENRE_REGGAE         = 22,   /**< Reggae */
Packit dd8086
  CDTEXT_GENRE_ROCK           = 23,   /**< Rock Music */
Packit dd8086
  CDTEXT_GENRE_RYTHMANDBLUES  = 24,   /**< Rhythm & Blues */
Packit dd8086
  CDTEXT_GENRE_SOUNDEFFECTS   = 25,   /**< Sound Effects */
Packit dd8086
  CDTEXT_GENRE_SOUNDTRACK     = 26,   /**< Soundtrack */
Packit dd8086
  CDTEXT_GENRE_SPOKEN_WORD    = 27,   /**< Spoken Word */
Packit dd8086
  CDTEXT_GENRE_WORLD_MUSIC    = 28    /**< World Music */
Packit dd8086
} cdtext_genre_t;
Packit dd8086
Packit dd8086
/*! Enumeration of possible CD-TEXT languages.
Packit dd8086
 * 
Packit dd8086
 * The language code is encoded as specified in ANNEX 1 to part 5 of EBU
Packit dd8086
 * Tech 32 58 -E (1991).
Packit dd8086
 */
Packit dd8086
typedef enum {
Packit dd8086
  CDTEXT_LANGUAGE_UNKNOWN     = 0x00,
Packit dd8086
  CDTEXT_LANGUAGE_ALBANIAN    = 0x01,
Packit dd8086
  CDTEXT_LANGUAGE_BRETON      = 0x02,
Packit dd8086
  CDTEXT_LANGUAGE_CATALAN     = 0x03,
Packit dd8086
  CDTEXT_LANGUAGE_CROATIAN    = 0x04,
Packit dd8086
  CDTEXT_LANGUAGE_WELSH       = 0x05,
Packit dd8086
  CDTEXT_LANGUAGE_CZECH       = 0x06,
Packit dd8086
  CDTEXT_LANGUAGE_DANISH      = 0x07,
Packit dd8086
  CDTEXT_LANGUAGE_GERMAN      = 0x08,
Packit dd8086
  CDTEXT_LANGUAGE_ENGLISH     = 0x09,
Packit dd8086
  CDTEXT_LANGUAGE_SPANISH     = 0x0A,
Packit dd8086
  CDTEXT_LANGUAGE_ESPERANTO   = 0x0B,
Packit dd8086
  CDTEXT_LANGUAGE_ESTONIAN    = 0x0C,
Packit dd8086
  CDTEXT_LANGUAGE_BASQUE      = 0x0D,
Packit dd8086
  CDTEXT_LANGUAGE_FAROESE     = 0x0E,
Packit dd8086
  CDTEXT_LANGUAGE_FRENCH      = 0x0F,
Packit dd8086
  CDTEXT_LANGUAGE_FRISIAN     = 0x10,
Packit dd8086
  CDTEXT_LANGUAGE_IRISH       = 0x11,
Packit dd8086
  CDTEXT_LANGUAGE_GAELIC      = 0x12,
Packit dd8086
  CDTEXT_LANGUAGE_GALICIAN    = 0x13,
Packit dd8086
  CDTEXT_LANGUAGE_ICELANDIC   = 0x14,
Packit dd8086
  CDTEXT_LANGUAGE_ITALIAN     = 0x15,
Packit dd8086
  CDTEXT_LANGUAGE_LAPPISH     = 0x16,
Packit dd8086
  CDTEXT_LANGUAGE_LATIN       = 0x17,
Packit dd8086
  CDTEXT_LANGUAGE_LATVIAN     = 0x18,
Packit dd8086
  CDTEXT_LANGUAGE_LUXEMBOURGIAN = 0x19,
Packit dd8086
  CDTEXT_LANGUAGE_LITHUANIAN  = 0x1A,
Packit dd8086
  CDTEXT_LANGUAGE_HUNGARIAN   = 0x1B,
Packit dd8086
  CDTEXT_LANGUAGE_MALTESE     = 0x1C,
Packit dd8086
  CDTEXT_LANGUAGE_DUTCH       = 0x1D,
Packit dd8086
  CDTEXT_LANGUAGE_NORWEGIAN   = 0x1E,
Packit dd8086
  CDTEXT_LANGUAGE_OCCITAN     = 0x1F,
Packit dd8086
  CDTEXT_LANGUAGE_POLISH      = 0x20,
Packit dd8086
  CDTEXT_LANGUAGE_PORTUGUESE  = 0x21,
Packit dd8086
  CDTEXT_LANGUAGE_ROMANIAN    = 0x22,
Packit dd8086
  CDTEXT_LANGUAGE_ROMANSH     = 0x23,
Packit dd8086
  CDTEXT_LANGUAGE_SERBIAN     = 0x24,
Packit dd8086
  CDTEXT_LANGUAGE_SLOVAK      = 0x25,
Packit dd8086
  CDTEXT_LANGUAGE_SLOVENIAN   = 0x26,
Packit dd8086
  CDTEXT_LANGUAGE_FINNISH     = 0x27,
Packit dd8086
  CDTEXT_LANGUAGE_SWEDISH     = 0x28,
Packit dd8086
  CDTEXT_LANGUAGE_TURKISH     = 0x29,
Packit dd8086
  CDTEXT_LANGUAGE_FLEMISH     = 0x2A,
Packit dd8086
  CDTEXT_LANGUAGE_WALLON      = 0x2B,
Packit dd8086
  CDTEXT_LANGUAGE_ZULU        = 0x45,
Packit dd8086
  CDTEXT_LANGUAGE_VIETNAMESE  = 0x46,
Packit dd8086
  CDTEXT_LANGUAGE_UZBEK       = 0x47,
Packit dd8086
  CDTEXT_LANGUAGE_URDU        = 0x48,
Packit dd8086
  CDTEXT_LANGUAGE_UKRAINIAN   = 0x49,
Packit dd8086
  CDTEXT_LANGUAGE_THAI        = 0x4A,
Packit dd8086
  CDTEXT_LANGUAGE_TELUGU      = 0x4B,
Packit dd8086
  CDTEXT_LANGUAGE_TATAR       = 0x4C,
Packit dd8086
  CDTEXT_LANGUAGE_TAMIL       = 0x4D,
Packit dd8086
  CDTEXT_LANGUAGE_TADZHIK     = 0x4E,
Packit dd8086
  CDTEXT_LANGUAGE_SWAHILI     = 0x4F,
Packit dd8086
  CDTEXT_LANGUAGE_SRANANTONGO = 0x50,
Packit dd8086
  CDTEXT_LANGUAGE_SOMALI      = 0x51,
Packit dd8086
  CDTEXT_LANGUAGE_SINHALESE   = 0x52,
Packit dd8086
  CDTEXT_LANGUAGE_SHONA       = 0x53,
Packit dd8086
  CDTEXT_LANGUAGE_SERBO_CROAT = 0x54,
Packit dd8086
  CDTEXT_LANGUAGE_RUTHENIAN   = 0x55,
Packit dd8086
  CDTEXT_LANGUAGE_RUSSIAN     = 0x56,
Packit dd8086
  CDTEXT_LANGUAGE_QUECHUA     = 0x57,
Packit dd8086
  CDTEXT_LANGUAGE_PUSHTU      = 0x58,
Packit dd8086
  CDTEXT_LANGUAGE_PUNJABI     = 0x59,
Packit dd8086
  CDTEXT_LANGUAGE_PERSIAN     = 0x5A,
Packit dd8086
  CDTEXT_LANGUAGE_PAPAMIENTO  = 0x5B,
Packit dd8086
  CDTEXT_LANGUAGE_ORIYA       = 0x5C,
Packit dd8086
  CDTEXT_LANGUAGE_NEPALI      = 0x5D,
Packit dd8086
  CDTEXT_LANGUAGE_NDEBELE     = 0x5E,
Packit dd8086
  CDTEXT_LANGUAGE_MARATHI     = 0x5F,
Packit dd8086
  CDTEXT_LANGUAGE_MOLDAVIAN   = 0x60,
Packit dd8086
  CDTEXT_LANGUAGE_MALAYSIAN   = 0x61,
Packit dd8086
  CDTEXT_LANGUAGE_MALAGASAY   = 0x62,
Packit dd8086
  CDTEXT_LANGUAGE_MACEDONIAN  = 0x63,
Packit dd8086
  CDTEXT_LANGUAGE_LAOTIAN     = 0x64,
Packit dd8086
  CDTEXT_LANGUAGE_KOREAN      = 0x65,
Packit dd8086
  CDTEXT_LANGUAGE_KHMER       = 0x66,
Packit dd8086
  CDTEXT_LANGUAGE_KAZAKH      = 0x67,
Packit dd8086
  CDTEXT_LANGUAGE_KANNADA     = 0x68,
Packit dd8086
  CDTEXT_LANGUAGE_JAPANESE    = 0x69,
Packit dd8086
  CDTEXT_LANGUAGE_INDONESIAN  = 0x6A,
Packit dd8086
  CDTEXT_LANGUAGE_HINDI       = 0x6B,
Packit dd8086
  CDTEXT_LANGUAGE_HEBREW      = 0x6C,
Packit dd8086
  CDTEXT_LANGUAGE_HAUSA       = 0x6D,
Packit dd8086
  CDTEXT_LANGUAGE_GURANI      = 0x6E,
Packit dd8086
  CDTEXT_LANGUAGE_GUJURATI    = 0x6F,
Packit dd8086
  CDTEXT_LANGUAGE_GREEK       = 0x70,
Packit dd8086
  CDTEXT_LANGUAGE_GEORGIAN    = 0x71,
Packit dd8086
  CDTEXT_LANGUAGE_FULANI      = 0x72,
Packit dd8086
  CDTEXT_LANGUAGE_DARI        = 0x73,
Packit dd8086
  CDTEXT_LANGUAGE_CHURASH     = 0x74,
Packit dd8086
  CDTEXT_LANGUAGE_CHINESE     = 0x75,
Packit dd8086
  CDTEXT_LANGUAGE_BURMESE     = 0x76,
Packit dd8086
  CDTEXT_LANGUAGE_BULGARIAN   = 0x77,
Packit dd8086
  CDTEXT_LANGUAGE_BENGALI     = 0x78,
Packit dd8086
  CDTEXT_LANGUAGE_BIELORUSSIAN = 0x79,
Packit dd8086
  CDTEXT_LANGUAGE_BAMBORA     = 0x7A,
Packit dd8086
  CDTEXT_LANGUAGE_AZERBAIJANI = 0x7B,
Packit dd8086
  CDTEXT_LANGUAGE_ASSAMESE    = 0x7C,
Packit dd8086
  CDTEXT_LANGUAGE_ARMENIAN    = 0x7D,
Packit dd8086
  CDTEXT_LANGUAGE_ARABIC      = 0x7E,
Packit dd8086
  CDTEXT_LANGUAGE_AMHARIC     = 0x7F
Packit dd8086
} cdtext_lang_t;
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Opaque type for CD-Text.
Packit dd8086
*/
Packit dd8086
typedef struct cdtext_s cdtext_t;
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Return string representation of the given genre code.
Packit dd8086
*/
Packit dd8086
const char *cdtext_genre2str (cdtext_genre_t i);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Return string representation of the given language code.
Packit dd8086
*/
Packit dd8086
const char *cdtext_lang2str (cdtext_lang_t i);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Return string representation of given field type.
Packit dd8086
*/
Packit dd8086
const char *cdtext_field2str (cdtext_field_t i);
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
  Initialize a new cdtext structure.
Packit dd8086
Packit dd8086
  When the structure is no longer needed, release the 
Packit dd8086
  resources using cdtext_delete.
Packit dd8086
*/
Packit dd8086
cdtext_t *cdtext_init (void);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Read a binary CD-TEXT and fill a cdtext struct.
Packit dd8086
Packit dd8086
  @param p_cdtext the CD-TEXT object
Packit dd8086
  @param wdata the data
Packit dd8086
  @param i_data size of wdata
Packit dd8086
Packit dd8086
  @returns 0 on success, non-zero on failure
Packit dd8086
*/       
Packit dd8086
int cdtext_data_init(cdtext_t *p_cdtext, uint8_t *wdata, size_t i_data);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Free memory associated with the given cdtext_t object.
Packit dd8086
Packit dd8086
  @param p_cdtext the CD-TEXT object 
Packit dd8086
*/
Packit dd8086
void cdtext_destroy (cdtext_t *p_cdtext);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Returns a copy of the return value of cdtext_get_const or NULL.
Packit dd8086
Packit dd8086
  Must be freed using cdio_free() when done.
Packit dd8086
  @see cdtext_get_const
Packit dd8086
*/
Packit dd8086
char *cdtext_get (const cdtext_t *p_cdtext, cdtext_field_t key, track_t track);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Returns value of the given field.
Packit dd8086
Packit dd8086
  NULL is returned if key is CDTEXT_INVALID or the field is not set.
Packit dd8086
  Strings are encoded in UTF-8.
Packit dd8086
Packit dd8086
  @param p_cdtext the CD-TEXT object
Packit dd8086
  @param field type of the field to return
Packit dd8086
  @param track specifies the track, 0 stands for disc
Packit dd8086
*/
Packit dd8086
const char *cdtext_get_const (const cdtext_t *p_cdtext, cdtext_field_t field, 
Packit dd8086
                              track_t track);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Returns the discs genre code.
Packit dd8086
Packit dd8086
  @param p_cdtext the CD-TEXT object
Packit dd8086
*/
Packit dd8086
cdtext_genre_t cdtext_get_genre (const cdtext_t *p_cdtext);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Returns the currently active language.
Packit dd8086
Packit dd8086
  @param p_cdtext the CD-TEXT object
Packit dd8086
*/
Packit dd8086
cdtext_lang_t cdtext_get_language (const cdtext_t *p_cdtext);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Returns the first track number.
Packit dd8086
Packit dd8086
  @param p_cdtext the CD-TEXT object
Packit dd8086
*/
Packit dd8086
track_t cdtext_get_first_track(const cdtext_t *p_cdtext);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Returns the last track number.
Packit dd8086
Packit dd8086
  @param p_cdtext the CD-TEXT object
Packit dd8086
*/
Packit dd8086
track_t cdtext_get_last_track(const cdtext_t *p_cdtext);
Packit dd8086
Packit dd8086
/*!
Packit dd8086
  Try to select the given language.
Packit dd8086
Packit dd8086
  @param p_cdtext the CD-TEXT object
Packit dd8086
  @param language string representation of the language
Packit dd8086
Packit dd8086
  @return true on success, false if language is not available
Packit dd8086
*/
Packit dd8086
bool cdtext_select_language(cdtext_t *p_cdtext, cdtext_lang_t language);
Packit dd8086
Packit dd8086
/*
Packit dd8086
  Returns a list of available languages or NULL.
Packit dd8086
Packit dd8086
  Internally the list is stored in a static array.
Packit dd8086
Packit dd8086
  @param p_cdtext the CD-TEXT object
Packit dd8086
*/
Packit dd8086
cdtext_lang_t *cdtext_list_languages (const cdtext_t *p_cdtext);
Packit dd8086
Packit dd8086
/*! 
Packit dd8086
  Sets the given field at the given track to the given value.
Packit dd8086
  
Packit dd8086
  Recodes to UTF-8 if charset is not NULL.
Packit dd8086
  
Packit dd8086
  @param p_cdtext the CD-TEXT object
Packit dd8086
  @param key field to set
Packit dd8086
  @param value value to set
Packit dd8086
  @param track track to work on
Packit dd8086
  @param charset charset to convert from
Packit dd8086
 */
Packit dd8086
void cdtext_set (cdtext_t *p_cdtext, cdtext_field_t key, const uint8_t *value, track_t track, const char *charset);
Packit dd8086
Packit dd8086
#ifdef __cplusplus
Packit dd8086
}
Packit dd8086
#endif /* __cplusplus */
Packit dd8086
Packit dd8086
#endif /* CDIO_CDTEXT_H_ */
Packit dd8086

Packit dd8086
/* 
Packit dd8086
 * Local variables:
Packit dd8086
 *  c-file-style: "gnu"
Packit dd8086
 *  tab-width: 8
Packit dd8086
 *  indent-tabs-mode: nil
Packit dd8086
 * End:
Packit dd8086
 */