annotate src/libid3tag-0.15.1b/id3tag.h @ 169:223a55898ab9 tip default

Add null config files
author Chris Cannam <cannam@all-day-breakfast.com>
date Mon, 02 Mar 2020 14:03:47 +0000
parents 545efbb81310
children
rev   line source
cannam@85 1 /*
cannam@85 2 * libid3tag - ID3 tag manipulation library
cannam@85 3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
cannam@85 4 *
cannam@85 5 * This program is free software; you can redistribute it and/or modify
cannam@85 6 * it under the terms of the GNU General Public License as published by
cannam@85 7 * the Free Software Foundation; either version 2 of the License, or
cannam@85 8 * (at your option) any later version.
cannam@85 9 *
cannam@85 10 * This program is distributed in the hope that it will be useful,
cannam@85 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cannam@85 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cannam@85 13 * GNU General Public License for more details.
cannam@85 14 *
cannam@85 15 * You should have received a copy of the GNU General Public License
cannam@85 16 * along with this program; if not, write to the Free Software
cannam@85 17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
cannam@85 18 *
cannam@85 19 * If you would like to negotiate alternate licensing terms, you may do
cannam@85 20 * so by contacting: Underbit Technologies, Inc. <info@underbit.com>
cannam@85 21 *
cannam@85 22 * $Id: id3tag.h,v 1.17 2004/01/23 23:22:46 rob Exp $
cannam@85 23 */
cannam@85 24
cannam@85 25 # ifndef LIBID3TAG_ID3TAG_H
cannam@85 26 # define LIBID3TAG_ID3TAG_H
cannam@85 27
cannam@85 28 # ifdef __cplusplus
cannam@85 29 extern "C" {
cannam@85 30 # endif
cannam@85 31
cannam@85 32 # define ID3_TAG_VERSION 0x0400
cannam@85 33 # define ID3_TAG_VERSION_MAJOR(x) (((x) >> 8) & 0xff)
cannam@85 34 # define ID3_TAG_VERSION_MINOR(x) (((x) >> 0) & 0xff)
cannam@85 35
cannam@85 36 typedef unsigned char id3_byte_t;
cannam@85 37 typedef unsigned long id3_length_t;
cannam@85 38
cannam@85 39 typedef unsigned long id3_ucs4_t;
cannam@85 40
cannam@85 41 typedef unsigned char id3_latin1_t;
cannam@85 42 typedef unsigned short id3_utf16_t;
cannam@85 43 typedef signed char id3_utf8_t;
cannam@85 44
cannam@85 45 struct id3_tag {
cannam@85 46 unsigned int refcount;
cannam@85 47 unsigned int version;
cannam@85 48 int flags;
cannam@85 49 int extendedflags;
cannam@85 50 int restrictions;
cannam@85 51 int options;
cannam@85 52 unsigned int nframes;
cannam@85 53 struct id3_frame **frames;
cannam@85 54 id3_length_t paddedsize;
cannam@85 55 };
cannam@85 56
cannam@85 57 # define ID3_TAG_QUERYSIZE 10
cannam@85 58
cannam@85 59 /* ID3v1 field frames */
cannam@85 60
cannam@85 61 # define ID3_FRAME_TITLE "TIT2"
cannam@85 62 # define ID3_FRAME_ARTIST "TPE1"
cannam@85 63 # define ID3_FRAME_ALBUM "TALB"
cannam@85 64 # define ID3_FRAME_TRACK "TRCK"
cannam@85 65 # define ID3_FRAME_YEAR "TDRC"
cannam@85 66 # define ID3_FRAME_GENRE "TCON"
cannam@85 67 # define ID3_FRAME_COMMENT "COMM"
cannam@85 68
cannam@85 69 /* special frames */
cannam@85 70
cannam@85 71 # define ID3_FRAME_OBSOLETE "ZOBS" /* with apologies to the French */
cannam@85 72
cannam@85 73 /* tag flags */
cannam@85 74
cannam@85 75 enum {
cannam@85 76 ID3_TAG_FLAG_UNSYNCHRONISATION = 0x80,
cannam@85 77 ID3_TAG_FLAG_EXTENDEDHEADER = 0x40,
cannam@85 78 ID3_TAG_FLAG_EXPERIMENTALINDICATOR = 0x20,
cannam@85 79 ID3_TAG_FLAG_FOOTERPRESENT = 0x10,
cannam@85 80
cannam@85 81 ID3_TAG_FLAG_KNOWNFLAGS = 0xf0
cannam@85 82 };
cannam@85 83
cannam@85 84 /* tag extended flags */
cannam@85 85
cannam@85 86 enum {
cannam@85 87 ID3_TAG_EXTENDEDFLAG_TAGISANUPDATE = 0x40,
cannam@85 88 ID3_TAG_EXTENDEDFLAG_CRCDATAPRESENT = 0x20,
cannam@85 89 ID3_TAG_EXTENDEDFLAG_TAGRESTRICTIONS = 0x10,
cannam@85 90
cannam@85 91 ID3_TAG_EXTENDEDFLAG_KNOWNFLAGS = 0x70
cannam@85 92 };
cannam@85 93
cannam@85 94 /* tag restrictions */
cannam@85 95
cannam@85 96 enum {
cannam@85 97 ID3_TAG_RESTRICTION_TAGSIZE_MASK = 0xc0,
cannam@85 98 ID3_TAG_RESTRICTION_TAGSIZE_128_FRAMES_1_MB = 0x00,
cannam@85 99 ID3_TAG_RESTRICTION_TAGSIZE_64_FRAMES_128_KB = 0x40,
cannam@85 100 ID3_TAG_RESTRICTION_TAGSIZE_32_FRAMES_40_KB = 0x80,
cannam@85 101 ID3_TAG_RESTRICTION_TAGSIZE_32_FRAMES_4_KB = 0xc0
cannam@85 102 };
cannam@85 103
cannam@85 104 enum {
cannam@85 105 ID3_TAG_RESTRICTION_TEXTENCODING_MASK = 0x20,
cannam@85 106 ID3_TAG_RESTRICTION_TEXTENCODING_NONE = 0x00,
cannam@85 107 ID3_TAG_RESTRICTION_TEXTENCODING_LATIN1_UTF8 = 0x20
cannam@85 108 };
cannam@85 109
cannam@85 110 enum {
cannam@85 111 ID3_TAG_RESTRICTION_TEXTSIZE_MASK = 0x18,
cannam@85 112 ID3_TAG_RESTRICTION_TEXTSIZE_NONE = 0x00,
cannam@85 113 ID3_TAG_RESTRICTION_TEXTSIZE_1024_CHARS = 0x08,
cannam@85 114 ID3_TAG_RESTRICTION_TEXTSIZE_128_CHARS = 0x10,
cannam@85 115 ID3_TAG_RESTRICTION_TEXTSIZE_30_CHARS = 0x18
cannam@85 116 };
cannam@85 117
cannam@85 118 enum {
cannam@85 119 ID3_TAG_RESTRICTION_IMAGEENCODING_MASK = 0x04,
cannam@85 120 ID3_TAG_RESTRICTION_IMAGEENCODING_NONE = 0x00,
cannam@85 121 ID3_TAG_RESTRICTION_IMAGEENCODING_PNG_JPEG = 0x04
cannam@85 122 };
cannam@85 123
cannam@85 124 enum {
cannam@85 125 ID3_TAG_RESTRICTION_IMAGESIZE_MASK = 0x03,
cannam@85 126 ID3_TAG_RESTRICTION_IMAGESIZE_NONE = 0x00,
cannam@85 127 ID3_TAG_RESTRICTION_IMAGESIZE_256_256 = 0x01,
cannam@85 128 ID3_TAG_RESTRICTION_IMAGESIZE_64_64 = 0x02,
cannam@85 129 ID3_TAG_RESTRICTION_IMAGESIZE_64_64_EXACT = 0x03
cannam@85 130 };
cannam@85 131
cannam@85 132 /* library options */
cannam@85 133
cannam@85 134 enum {
cannam@85 135 ID3_TAG_OPTION_UNSYNCHRONISATION = 0x0001, /* use unsynchronisation */
cannam@85 136 ID3_TAG_OPTION_COMPRESSION = 0x0002, /* use compression */
cannam@85 137 ID3_TAG_OPTION_CRC = 0x0004, /* use CRC */
cannam@85 138
cannam@85 139 ID3_TAG_OPTION_APPENDEDTAG = 0x0010, /* tag will be appended */
cannam@85 140 ID3_TAG_OPTION_FILEALTERED = 0x0020, /* audio data was altered */
cannam@85 141
cannam@85 142 ID3_TAG_OPTION_ID3V1 = 0x0100 /* render ID3v1/ID3v1.1 tag */
cannam@85 143 };
cannam@85 144
cannam@85 145 struct id3_frame {
cannam@85 146 char id[5];
cannam@85 147 char const *description;
cannam@85 148 unsigned int refcount;
cannam@85 149 int flags;
cannam@85 150 int group_id;
cannam@85 151 int encryption_method;
cannam@85 152 id3_byte_t *encoded;
cannam@85 153 id3_length_t encoded_length;
cannam@85 154 id3_length_t decoded_length;
cannam@85 155 unsigned int nfields;
cannam@85 156 union id3_field *fields;
cannam@85 157 };
cannam@85 158
cannam@85 159 enum {
cannam@85 160 /* frame status flags */
cannam@85 161 ID3_FRAME_FLAG_TAGALTERPRESERVATION = 0x4000,
cannam@85 162 ID3_FRAME_FLAG_FILEALTERPRESERVATION = 0x2000,
cannam@85 163 ID3_FRAME_FLAG_READONLY = 0x1000,
cannam@85 164
cannam@85 165 ID3_FRAME_FLAG_STATUSFLAGS = 0xff00,
cannam@85 166
cannam@85 167 /* frame format flags */
cannam@85 168 ID3_FRAME_FLAG_GROUPINGIDENTITY = 0x0040,
cannam@85 169 ID3_FRAME_FLAG_COMPRESSION = 0x0008,
cannam@85 170 ID3_FRAME_FLAG_ENCRYPTION = 0x0004,
cannam@85 171 ID3_FRAME_FLAG_UNSYNCHRONISATION = 0x0002,
cannam@85 172 ID3_FRAME_FLAG_DATALENGTHINDICATOR = 0x0001,
cannam@85 173
cannam@85 174 ID3_FRAME_FLAG_FORMATFLAGS = 0x00ff,
cannam@85 175
cannam@85 176 ID3_FRAME_FLAG_KNOWNFLAGS = 0x704f
cannam@85 177 };
cannam@85 178
cannam@85 179 enum id3_field_type {
cannam@85 180 ID3_FIELD_TYPE_TEXTENCODING,
cannam@85 181 ID3_FIELD_TYPE_LATIN1,
cannam@85 182 ID3_FIELD_TYPE_LATIN1FULL,
cannam@85 183 ID3_FIELD_TYPE_LATIN1LIST,
cannam@85 184 ID3_FIELD_TYPE_STRING,
cannam@85 185 ID3_FIELD_TYPE_STRINGFULL,
cannam@85 186 ID3_FIELD_TYPE_STRINGLIST,
cannam@85 187 ID3_FIELD_TYPE_LANGUAGE,
cannam@85 188 ID3_FIELD_TYPE_FRAMEID,
cannam@85 189 ID3_FIELD_TYPE_DATE,
cannam@85 190 ID3_FIELD_TYPE_INT8,
cannam@85 191 ID3_FIELD_TYPE_INT16,
cannam@85 192 ID3_FIELD_TYPE_INT24,
cannam@85 193 ID3_FIELD_TYPE_INT32,
cannam@85 194 ID3_FIELD_TYPE_INT32PLUS,
cannam@85 195 ID3_FIELD_TYPE_BINARYDATA
cannam@85 196 };
cannam@85 197
cannam@85 198 enum id3_field_textencoding {
cannam@85 199 ID3_FIELD_TEXTENCODING_ISO_8859_1 = 0x00,
cannam@85 200 ID3_FIELD_TEXTENCODING_UTF_16 = 0x01,
cannam@85 201 ID3_FIELD_TEXTENCODING_UTF_16BE = 0x02,
cannam@85 202 ID3_FIELD_TEXTENCODING_UTF_8 = 0x03
cannam@85 203 };
cannam@85 204
cannam@85 205 union id3_field {
cannam@85 206 enum id3_field_type type;
cannam@85 207 struct {
cannam@85 208 enum id3_field_type type;
cannam@85 209 signed long value;
cannam@85 210 } number;
cannam@85 211 struct {
cannam@85 212 enum id3_field_type type;
cannam@85 213 id3_latin1_t *ptr;
cannam@85 214 } latin1;
cannam@85 215 struct {
cannam@85 216 enum id3_field_type type;
cannam@85 217 unsigned int nstrings;
cannam@85 218 id3_latin1_t **strings;
cannam@85 219 } latin1list;
cannam@85 220 struct {
cannam@85 221 enum id3_field_type type;
cannam@85 222 id3_ucs4_t *ptr;
cannam@85 223 } string;
cannam@85 224 struct {
cannam@85 225 enum id3_field_type type;
cannam@85 226 unsigned int nstrings;
cannam@85 227 id3_ucs4_t **strings;
cannam@85 228 } stringlist;
cannam@85 229 struct {
cannam@85 230 enum id3_field_type type;
cannam@85 231 char value[9];
cannam@85 232 } immediate;
cannam@85 233 struct {
cannam@85 234 enum id3_field_type type;
cannam@85 235 id3_byte_t *data;
cannam@85 236 id3_length_t length;
cannam@85 237 } binary;
cannam@85 238 };
cannam@85 239
cannam@85 240 /* file interface */
cannam@85 241
cannam@85 242 enum id3_file_mode {
cannam@85 243 ID3_FILE_MODE_READONLY = 0,
cannam@85 244 ID3_FILE_MODE_READWRITE
cannam@85 245 };
cannam@85 246
cannam@85 247 struct id3_file *id3_file_open(char const *, enum id3_file_mode);
cannam@85 248 struct id3_file *id3_file_fdopen(int, enum id3_file_mode);
cannam@85 249 int id3_file_close(struct id3_file *);
cannam@85 250
cannam@85 251 struct id3_tag *id3_file_tag(struct id3_file const *);
cannam@85 252
cannam@85 253 int id3_file_update(struct id3_file *);
cannam@85 254
cannam@85 255 /* tag interface */
cannam@85 256
cannam@85 257 struct id3_tag *id3_tag_new(void);
cannam@85 258 void id3_tag_delete(struct id3_tag *);
cannam@85 259
cannam@85 260 unsigned int id3_tag_version(struct id3_tag const *);
cannam@85 261
cannam@85 262 int id3_tag_options(struct id3_tag *, int, int);
cannam@85 263 void id3_tag_setlength(struct id3_tag *, id3_length_t);
cannam@85 264
cannam@85 265 void id3_tag_clearframes(struct id3_tag *);
cannam@85 266
cannam@85 267 int id3_tag_attachframe(struct id3_tag *, struct id3_frame *);
cannam@85 268 int id3_tag_detachframe(struct id3_tag *, struct id3_frame *);
cannam@85 269
cannam@85 270 struct id3_frame *id3_tag_findframe(struct id3_tag const *,
cannam@85 271 char const *, unsigned int);
cannam@85 272
cannam@85 273 signed long id3_tag_query(id3_byte_t const *, id3_length_t);
cannam@85 274
cannam@85 275 struct id3_tag *id3_tag_parse(id3_byte_t const *, id3_length_t);
cannam@85 276 id3_length_t id3_tag_render(struct id3_tag const *, id3_byte_t *);
cannam@85 277
cannam@85 278 /* frame interface */
cannam@85 279
cannam@85 280 struct id3_frame *id3_frame_new(char const *);
cannam@85 281 void id3_frame_delete(struct id3_frame *);
cannam@85 282
cannam@85 283 union id3_field *id3_frame_field(struct id3_frame const *, unsigned int);
cannam@85 284
cannam@85 285 /* field interface */
cannam@85 286
cannam@85 287 enum id3_field_type id3_field_type(union id3_field const *);
cannam@85 288
cannam@85 289 int id3_field_setint(union id3_field *, signed long);
cannam@85 290 int id3_field_settextencoding(union id3_field *, enum id3_field_textencoding);
cannam@85 291 int id3_field_setstrings(union id3_field *, unsigned int, id3_ucs4_t **);
cannam@85 292 int id3_field_addstring(union id3_field *, id3_ucs4_t const *);
cannam@85 293 int id3_field_setlanguage(union id3_field *, char const *);
cannam@85 294 int id3_field_setlatin1(union id3_field *, id3_latin1_t const *);
cannam@85 295 int id3_field_setfulllatin1(union id3_field *, id3_latin1_t const *);
cannam@85 296 int id3_field_setstring(union id3_field *, id3_ucs4_t const *);
cannam@85 297 int id3_field_setfullstring(union id3_field *, id3_ucs4_t const *);
cannam@85 298 int id3_field_setframeid(union id3_field *, char const *);
cannam@85 299 int id3_field_setbinarydata(union id3_field *,
cannam@85 300 id3_byte_t const *, id3_length_t);
cannam@85 301
cannam@85 302 signed long id3_field_getint(union id3_field const *);
cannam@85 303 enum id3_field_textencoding id3_field_gettextencoding(union id3_field const *);
cannam@85 304 id3_latin1_t const *id3_field_getlatin1(union id3_field const *);
cannam@85 305 id3_latin1_t const *id3_field_getfulllatin1(union id3_field const *);
cannam@85 306 id3_ucs4_t const *id3_field_getstring(union id3_field const *);
cannam@85 307 id3_ucs4_t const *id3_field_getfullstring(union id3_field const *);
cannam@85 308 unsigned int id3_field_getnstrings(union id3_field const *);
cannam@85 309 id3_ucs4_t const *id3_field_getstrings(union id3_field const *,
cannam@85 310 unsigned int);
cannam@85 311 char const *id3_field_getframeid(union id3_field const *);
cannam@85 312 id3_byte_t const *id3_field_getbinarydata(union id3_field const *,
cannam@85 313 id3_length_t *);
cannam@85 314
cannam@85 315 /* genre interface */
cannam@85 316
cannam@85 317 id3_ucs4_t const *id3_genre_index(unsigned int);
cannam@85 318 id3_ucs4_t const *id3_genre_name(id3_ucs4_t const *);
cannam@85 319 int id3_genre_number(id3_ucs4_t const *);
cannam@85 320
cannam@85 321 /* ucs4 interface */
cannam@85 322
cannam@85 323 id3_latin1_t *id3_ucs4_latin1duplicate(id3_ucs4_t const *);
cannam@85 324 id3_utf16_t *id3_ucs4_utf16duplicate(id3_ucs4_t const *);
cannam@85 325 id3_utf8_t *id3_ucs4_utf8duplicate(id3_ucs4_t const *);
cannam@85 326
cannam@85 327 void id3_ucs4_putnumber(id3_ucs4_t *, unsigned long);
cannam@85 328 unsigned long id3_ucs4_getnumber(id3_ucs4_t const *);
cannam@85 329
cannam@85 330 /* latin1/utf16/utf8 interfaces */
cannam@85 331
cannam@85 332 id3_ucs4_t *id3_latin1_ucs4duplicate(id3_latin1_t const *);
cannam@85 333 id3_ucs4_t *id3_utf16_ucs4duplicate(id3_utf16_t const *);
cannam@85 334 id3_ucs4_t *id3_utf8_ucs4duplicate(id3_utf8_t const *);
cannam@85 335
cannam@85 336 /* version interface */
cannam@85 337
cannam@85 338 # define ID3_VERSION_MAJOR 0
cannam@85 339 # define ID3_VERSION_MINOR 15
cannam@85 340 # define ID3_VERSION_PATCH 1
cannam@85 341 # define ID3_VERSION_EXTRA " (beta)"
cannam@85 342
cannam@85 343 # define ID3_VERSION_STRINGIZE(str) #str
cannam@85 344 # define ID3_VERSION_STRING(num) ID3_VERSION_STRINGIZE(num)
cannam@85 345
cannam@85 346 # define ID3_VERSION ID3_VERSION_STRING(ID3_VERSION_MAJOR) "." \
cannam@85 347 ID3_VERSION_STRING(ID3_VERSION_MINOR) "." \
cannam@85 348 ID3_VERSION_STRING(ID3_VERSION_PATCH) \
cannam@85 349 ID3_VERSION_EXTRA
cannam@85 350
cannam@85 351 # define ID3_PUBLISHYEAR "2000-2004"
cannam@85 352 # define ID3_AUTHOR "Underbit Technologies, Inc."
cannam@85 353 # define ID3_EMAIL "info@underbit.com"
cannam@85 354
cannam@85 355 extern char const id3_version[];
cannam@85 356 extern char const id3_copyright[];
cannam@85 357 extern char const id3_author[];
cannam@85 358 extern char const id3_build[];
cannam@85 359
cannam@85 360 # ifdef __cplusplus
cannam@85 361 }
cannam@85 362 # endif
cannam@85 363
cannam@85 364 # endif