Mercurial > audlegacy
annotate Plugins/Input/mpg123/xmms-id3.h @ 801:ec9ba0ad38a8 trunk
[svn] - use OBJECTIVE_DATA instead of a kludge in the posthook here
author | nenolod |
---|---|
date | Sat, 04 Mar 2006 14:34:04 -0800 |
parents | 18cb7405b5e9 |
children | f12d7e208b43 |
rev | line source |
---|---|
61 | 1 /********************************************************************* |
2 * | |
3 * Copyright (C) 1998, 1999, 2002, Espen Skoglund | |
4 * Department of Computer Science, University of Tromsų | |
5 * | |
6 * Filename: id3.h | |
7 * Description: Include file for accessing the ID3 library. | |
8 * Author: Espen Skoglund <espensk@stud.cs.uit.no> | |
9 * Created at: Thu Nov 5 15:55:10 1998 | |
10 * | |
11 * $Id: xmms-id3.h,v 1.1 2004/07/20 21:47:22 descender Exp $ | |
12 * | |
13 * This program is free software; you can redistribute it and/or | |
14 * modify it under the terms of the GNU General Public License | |
15 * as published by the Free Software Foundation; either version 2 | |
16 * of the License, or (at your option) any later version. | |
17 * | |
18 * This program is distributed in the hope that it will be useful, | |
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 * GNU General Public License for more details. | |
22 * | |
23 * You should have received a copy of the GNU General Public License | |
24 * along with this program; if not, write to the Free Software | |
25 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
26 * | |
27 ********************************************************************/ | |
28 #ifndef ID3_H | |
29 #define ID3_H | |
30 | |
31 #include <glib.h> | |
32 #include <libaudacious/vfs.h> | |
33 | |
34 /* | |
35 * Option flags to id3_open_*(). | |
36 */ | |
37 #define ID3_OPENF_NONE 0x0000 | |
38 #define ID3_OPENF_NOCHK 0x0001 | |
39 #define ID3_OPENF_CREATE 0x0002 | |
40 | |
41 | |
42 /* | |
43 * The size of the read buffer used by file operations. | |
44 */ | |
45 #define ID3_FD_BUFSIZE 8192 | |
46 | |
47 | |
48 /* | |
49 * Structure describing the ID3 tag. | |
50 */ | |
51 struct id3_tag { | |
52 int id3_type; /* Memory or file desriptor */ | |
53 int id3_oflags; /* Flags from open call */ | |
54 int id3_flags; /* Flags from tag header */ | |
55 int id3_altered; /* Set when tag has been altered */ | |
56 int id3_newtag; /* Set if this is a new tag */ | |
57 | |
58 int id3_version; /* Major ID3 version number */ | |
59 int id3_revision; /* ID3 revision number */ | |
60 | |
61 int id3_tagsize; /* Total size of ID3 tag */ | |
62 int id3_pos; /* Current position within tag */ | |
63 | |
64 char *id3_error_msg; /* Last error message */ | |
65 | |
66 char id3_buffer[256]; /* Used for various strings */ | |
67 | |
68 union { | |
69 /* | |
70 * Memory specific fields. | |
71 */ | |
72 struct { | |
73 void *id3_ptr; | |
74 } me; | |
75 | |
76 /* | |
77 * File desc. specific fields. | |
78 */ | |
79 struct { | |
80 int id3_fd; | |
81 void *id3_buf; | |
82 } fd; | |
83 | |
84 /* | |
85 * File ptr. specific fields. | |
86 */ | |
87 struct { | |
88 VFSFile *id3_fp; | |
89 void *id3_buf; | |
90 } fp; | |
91 } s; | |
92 | |
93 /* | |
94 * Functions for doing operations within ID3 tag. | |
95 */ | |
96 int (*id3_seek) (struct id3_tag *, int); | |
97 void *(*id3_read) (struct id3_tag *, void *, int); | |
98 | |
99 /* | |
100 * Linked list of ID3 frames. | |
101 */ | |
102 GList *id3_frame; | |
103 }; | |
104 | |
105 #define ID3_TYPE_NONE 0 | |
106 #define ID3_TYPE_MEM 1 | |
107 #define ID3_TYPE_FD 2 | |
108 #define ID3_TYPE_FP 3 | |
109 | |
110 | |
111 /* | |
112 * Structure describing an ID3 frame. | |
113 */ | |
114 struct id3_frame { | |
115 struct id3_tag *fr_owner; | |
116 struct id3_framedesc *fr_desc; | |
117 int fr_flags; | |
118 unsigned char fr_encryption; | |
119 unsigned char fr_grouping; | |
120 unsigned char fr_altered; | |
121 | |
122 void *fr_data; /* Pointer to frame data, excluding headers */ | |
123 int fr_size; /* Size of uncompressed frame */ | |
124 | |
125 void *fr_raw_data; /* Frame data */ | |
126 int fr_raw_size; /* Frame size */ | |
127 | |
128 void *fr_data_z; /* The decompressed compressed frame */ | |
129 int fr_size_z; /* Size of decompressed compressed frame */ | |
130 }; | |
131 | |
132 | |
133 /* | |
134 * Structure describing an ID3 frame type. | |
135 */ | |
136 struct id3_framedesc { | |
137 guint32 fd_id; | |
138 char fd_idstr[4]; | |
139 char *fd_description; | |
140 }; | |
141 | |
142 | |
143 /* | |
144 * Text encodings. | |
145 */ | |
146 #define ID3_ENCODING_ISO_8859_1 0x00 | |
147 #define ID3_ENCODING_UTF16 0x01 | |
148 #define ID3_ENCODING_UTF16BE 0x02 | |
149 #define ID3_ENCODING_UTF8 0x03 | |
150 | |
151 | |
152 | |
153 /* | |
154 * ID3 frame id numbers. | |
155 */ | |
156 #define ID3_FRAME_ID(a,b,c,d) ((a << 24) | (b << 16) | (c << 8) | d) | |
157 | |
158 #define ID3_AENC ID3_FRAME_ID('A','E','N','C') | |
159 #define ID3_APIC ID3_FRAME_ID('A','P','I','C') | |
160 #define ID3_ASPI ID3_FRAME_ID('A','S','P','I') | |
161 #define ID3_COMM ID3_FRAME_ID('C','O','M','M') | |
162 #define ID3_COMR ID3_FRAME_ID('C','O','M','R') | |
163 #define ID3_ENCR ID3_FRAME_ID('E','N','C','R') | |
164 #define ID3_EQUA ID3_FRAME_ID('E','Q','U','A') | |
165 #define ID3_EQU2 ID3_FRAME_ID('E','Q','U','2') | |
166 #define ID3_ETCO ID3_FRAME_ID('E','T','C','O') | |
167 #define ID3_GEOB ID3_FRAME_ID('G','E','O','B') | |
168 #define ID3_GRID ID3_FRAME_ID('G','R','I','D') | |
169 #define ID3_IPLS ID3_FRAME_ID('I','P','L','S') | |
170 #define ID3_LINK ID3_FRAME_ID('L','I','N','K') | |
171 #define ID3_MCDI ID3_FRAME_ID('M','C','D','I') | |
172 #define ID3_MLLT ID3_FRAME_ID('M','L','L','T') | |
173 #define ID3_OWNE ID3_FRAME_ID('O','W','N','E') | |
174 #define ID3_PRIV ID3_FRAME_ID('P','R','I','V') | |
175 #define ID3_PCNT ID3_FRAME_ID('P','C','N','T') | |
176 #define ID3_POPM ID3_FRAME_ID('P','O','P','M') | |
177 #define ID3_POSS ID3_FRAME_ID('P','O','S','S') | |
178 #define ID3_RBUF ID3_FRAME_ID('R','B','U','F') | |
179 #define ID3_RVAD ID3_FRAME_ID('R','V','A','D') | |
180 #define ID3_RVA2 ID3_FRAME_ID('R','V','A','2') | |
181 #define ID3_RVRB ID3_FRAME_ID('R','V','R','B') | |
182 #define ID3_SEEK ID3_FRAME_ID('S','E','E','K') | |
183 #define ID3_SIGN ID3_FRAME_ID('S','I','G','N') | |
184 #define ID3_SYLT ID3_FRAME_ID('S','Y','L','T') | |
185 #define ID3_SYTC ID3_FRAME_ID('S','Y','T','C') | |
186 #define ID3_TALB ID3_FRAME_ID('T','A','L','B') | |
187 #define ID3_TBPM ID3_FRAME_ID('T','B','P','M') | |
188 #define ID3_TCOM ID3_FRAME_ID('T','C','O','M') | |
189 #define ID3_TCON ID3_FRAME_ID('T','C','O','N') | |
190 #define ID3_TCOP ID3_FRAME_ID('T','C','O','P') | |
191 #define ID3_TDAT ID3_FRAME_ID('T','D','A','T') | |
192 #define ID3_TDEN ID3_FRAME_ID('T','D','E','N') | |
193 #define ID3_TDLY ID3_FRAME_ID('T','D','L','Y') | |
194 #define ID3_TDOR ID3_FRAME_ID('T','D','O','R') | |
195 #define ID3_TDRC ID3_FRAME_ID('T','D','R','C') | |
196 #define ID3_TDRL ID3_FRAME_ID('T','D','R','L') | |
197 #define ID3_TDTG ID3_FRAME_ID('T','D','T','G') | |
198 #define ID3_TENC ID3_FRAME_ID('T','E','N','C') | |
199 #define ID3_TEXT ID3_FRAME_ID('T','E','X','T') | |
200 #define ID3_TFLT ID3_FRAME_ID('T','F','L','T') | |
201 #define ID3_TIME ID3_FRAME_ID('T','I','M','E') | |
202 #define ID3_TIPL ID3_FRAME_ID('T','I','P','L') | |
203 #define ID3_TIT1 ID3_FRAME_ID('T','I','T','1') | |
204 #define ID3_TIT2 ID3_FRAME_ID('T','I','T','2') | |
205 #define ID3_TIT3 ID3_FRAME_ID('T','I','T','3') | |
206 #define ID3_TKEY ID3_FRAME_ID('T','K','E','Y') | |
207 #define ID3_TLAN ID3_FRAME_ID('T','L','A','N') | |
208 #define ID3_TLEN ID3_FRAME_ID('T','L','E','N') | |
209 #define ID3_TMCL ID3_FRAME_ID('T','M','C','L') | |
210 #define ID3_TMED ID3_FRAME_ID('T','M','E','D') | |
211 #define ID3_TMOO ID3_FRAME_ID('T','M','O','O') | |
212 #define ID3_TOAL ID3_FRAME_ID('T','O','A','L') | |
213 #define ID3_TOFN ID3_FRAME_ID('T','O','F','N') | |
214 #define ID3_TOLY ID3_FRAME_ID('T','O','L','Y') | |
215 #define ID3_TOPE ID3_FRAME_ID('T','O','P','E') | |
216 #define ID3_TORY ID3_FRAME_ID('T','O','R','Y') | |
217 #define ID3_TOWN ID3_FRAME_ID('T','O','W','N') | |
218 #define ID3_TPE1 ID3_FRAME_ID('T','P','E','1') | |
219 #define ID3_TPE2 ID3_FRAME_ID('T','P','E','2') | |
220 #define ID3_TPE3 ID3_FRAME_ID('T','P','E','3') | |
221 #define ID3_TPE4 ID3_FRAME_ID('T','P','E','4') | |
222 #define ID3_TPOS ID3_FRAME_ID('T','P','O','S') | |
223 #define ID3_TPRO ID3_FRAME_ID('T','P','R','O') | |
224 #define ID3_TPUB ID3_FRAME_ID('T','P','U','B') | |
225 #define ID3_TRCK ID3_FRAME_ID('T','R','C','K') | |
226 #define ID3_TRDA ID3_FRAME_ID('T','R','D','A') | |
227 #define ID3_TRSN ID3_FRAME_ID('T','R','S','N') | |
228 #define ID3_TRSO ID3_FRAME_ID('T','R','S','O') | |
229 #define ID3_TSIZ ID3_FRAME_ID('T','S','I','Z') | |
230 #define ID3_TSOA ID3_FRAME_ID('T','S','O','A') | |
231 #define ID3_TSOP ID3_FRAME_ID('T','S','O','P') | |
232 #define ID3_TSOT ID3_FRAME_ID('T','S','O','T') | |
233 #define ID3_TSRC ID3_FRAME_ID('T','S','R','C') | |
234 #define ID3_TSSE ID3_FRAME_ID('T','S','S','E') | |
235 #define ID3_TSST ID3_FRAME_ID('T','S','S','T') | |
236 #define ID3_TYER ID3_FRAME_ID('T','Y','E','R') | |
237 #define ID3_TXXX ID3_FRAME_ID('T','X','X','X') | |
238 #define ID3_UFID ID3_FRAME_ID('U','F','I','D') | |
239 #define ID3_USER ID3_FRAME_ID('U','S','E','R') | |
240 #define ID3_USLT ID3_FRAME_ID('U','S','L','T') | |
241 #define ID3_WCOM ID3_FRAME_ID('W','C','O','M') | |
242 #define ID3_WCOP ID3_FRAME_ID('W','C','O','P') | |
243 #define ID3_WOAF ID3_FRAME_ID('W','O','A','F') | |
244 #define ID3_WOAR ID3_FRAME_ID('W','O','A','R') | |
245 #define ID3_WOAS ID3_FRAME_ID('W','O','A','S') | |
246 #define ID3_WORS ID3_FRAME_ID('W','O','R','S') | |
247 #define ID3_WPAY ID3_FRAME_ID('W','P','A','Y') | |
248 #define ID3_WPUB ID3_FRAME_ID('W','P','U','B') | |
249 #define ID3_WXXX ID3_FRAME_ID('W','X','X','X') | |
250 | |
251 /* | |
252 * Version 2.2.0 | |
253 */ | |
254 | |
255 #define ID3_FRAME_ID_22(a, b, c) ((a << 16) | (b << 8) | c) | |
256 | |
257 #define ID3_BUF ID3_FRAME_ID_22('B', 'U', 'F') | |
258 #define ID3_CNT ID3_FRAME_ID_22('C', 'N', 'T') | |
259 #define ID3_COM ID3_FRAME_ID_22('C', 'O', 'M') | |
260 #define ID3_CRA ID3_FRAME_ID_22('C', 'R', 'A') | |
261 #define ID3_CRM ID3_FRAME_ID_22('C', 'R', 'M') | |
262 #define ID3_ETC ID3_FRAME_ID_22('E', 'T', 'C') | |
263 #define ID3_EQU ID3_FRAME_ID_22('E', 'Q', 'U') | |
264 #define ID3_GEO ID3_FRAME_ID_22('G', 'E', 'O') | |
265 #define ID3_IPL ID3_FRAME_ID_22('I', 'P', 'L') | |
266 #define ID3_LNK ID3_FRAME_ID_22('L', 'N', 'K') | |
267 #define ID3_MCI ID3_FRAME_ID_22('M', 'C', 'I') | |
268 #define ID3_MLL ID3_FRAME_ID_22('M', 'L', 'L') | |
269 #define ID3_PIC ID3_FRAME_ID_22('P', 'I', 'C') | |
270 #define ID3_POP ID3_FRAME_ID_22('P', 'O', 'P') | |
271 #define ID3_REV ID3_FRAME_ID_22('R', 'E', 'V') | |
272 #define ID3_RVA ID3_FRAME_ID_22('R', 'V', 'A') | |
273 #define ID3_SLT ID3_FRAME_ID_22('S', 'L', 'T') | |
274 #define ID3_STC ID3_FRAME_ID_22('S', 'T', 'C') | |
275 #define ID3_TAL ID3_FRAME_ID_22('T', 'A', 'L') | |
276 #define ID3_TBP ID3_FRAME_ID_22('T', 'B', 'P') | |
277 #define ID3_TCM ID3_FRAME_ID_22('T', 'C', 'M') | |
278 #define ID3_TCO ID3_FRAME_ID_22('T', 'C', 'O') | |
279 #define ID3_TCR ID3_FRAME_ID_22('T', 'C', 'R') | |
280 #define ID3_TDA ID3_FRAME_ID_22('T', 'D', 'A') | |
281 #define ID3_TDY ID3_FRAME_ID_22('T', 'D', 'Y') | |
282 #define ID3_TEN ID3_FRAME_ID_22('T', 'E', 'N') | |
283 #define ID3_TFT ID3_FRAME_ID_22('T', 'F', 'T') | |
284 #define ID3_TIM ID3_FRAME_ID_22('T', 'I', 'M') | |
285 #define ID3_TKE ID3_FRAME_ID_22('T', 'K', 'E') | |
286 #define ID3_TLA ID3_FRAME_ID_22('T', 'L', 'A') | |
287 #define ID3_TLE ID3_FRAME_ID_22('T', 'L', 'E') | |
288 #define ID3_TMT ID3_FRAME_ID_22('T', 'M', 'T') | |
289 #define ID3_TOA ID3_FRAME_ID_22('T', 'O', 'A') | |
290 #define ID3_TOF ID3_FRAME_ID_22('T', 'O', 'F') | |
291 #define ID3_TOL ID3_FRAME_ID_22('T', 'O', 'L') | |
292 #define ID3_TOR ID3_FRAME_ID_22('T', 'O', 'R') | |
293 #define ID3_TOT ID3_FRAME_ID_22('T', 'O', 'T') | |
294 #define ID3_TP1 ID3_FRAME_ID_22('T', 'P', '1') | |
295 #define ID3_TP2 ID3_FRAME_ID_22('T', 'P', '2') | |
296 #define ID3_TP3 ID3_FRAME_ID_22('T', 'P', '3') | |
297 #define ID3_TP4 ID3_FRAME_ID_22('T', 'P', '4') | |
298 #define ID3_TPA ID3_FRAME_ID_22('T', 'P', 'A') | |
299 #define ID3_TPB ID3_FRAME_ID_22('T', 'P', 'B') | |
300 #define ID3_TRC ID3_FRAME_ID_22('T', 'R', 'C') | |
301 #define ID3_TRD ID3_FRAME_ID_22('T', 'R', 'D') | |
302 #define ID3_TRK ID3_FRAME_ID_22('T', 'R', 'K') | |
303 #define ID3_TSI ID3_FRAME_ID_22('T', 'S', 'I') | |
304 #define ID3_TSS ID3_FRAME_ID_22('T', 'S', 'S') | |
305 #define ID3_TT1 ID3_FRAME_ID_22('T', 'T', '1') | |
306 #define ID3_TT2 ID3_FRAME_ID_22('T', 'T', '2') | |
307 #define ID3_TT3 ID3_FRAME_ID_22('T', 'T', '3') | |
308 #define ID3_TXT ID3_FRAME_ID_22('T', 'X', 'T') | |
309 #define ID3_TXX ID3_FRAME_ID_22('T', 'X', 'X') | |
310 #define ID3_TYE ID3_FRAME_ID_22('T', 'Y', 'E') | |
311 #define ID3_UFI ID3_FRAME_ID_22('U', 'F', 'I') | |
312 #define ID3_ULT ID3_FRAME_ID_22('U', 'L', 'T') | |
313 #define ID3_WAF ID3_FRAME_ID_22('W', 'A', 'F') | |
314 #define ID3_WAR ID3_FRAME_ID_22('W', 'A', 'R') | |
315 #define ID3_WAS ID3_FRAME_ID_22('W', 'A', 'S') | |
316 #define ID3_WCM ID3_FRAME_ID_22('W', 'C', 'M') | |
317 #define ID3_WCP ID3_FRAME_ID_22('W', 'C', 'P') | |
318 #define ID3_WPB ID3_FRAME_ID_22('W', 'P', 'B') | |
319 #define ID3_WXX ID3_FRAME_ID_22('W', 'X', 'X') | |
320 | |
321 | |
322 /* | |
323 * Prototypes. | |
324 */ | |
325 | |
326 /* From id3.c */ | |
327 struct id3_tag *id3_open_mem(void *, int); | |
328 struct id3_tag *id3_open_fd(int, int); | |
329 struct id3_tag *id3_open_fp(VFSFile *, int); | |
330 int id3_set_output(struct id3_tag *, char *); | |
331 int id3_close(struct id3_tag *); | |
332 int id3_tell(struct id3_tag *); | |
333 int id3_alter_file(struct id3_tag *); | |
334 int id3_write_tag(struct id3_tag *, int); | |
335 | |
336 /* From id3_frame.c */ | |
337 int id3_read_frame(struct id3_tag *id3); | |
338 struct id3_frame *id3_get_frame(struct id3_tag *, guint32, int); | |
339 int id3_delete_frame(struct id3_frame *frame); | |
340 struct id3_frame *id3_add_frame(struct id3_tag *, guint32); | |
341 int id3_decompress_frame(struct id3_frame *); | |
342 void id3_destroy_frames(struct id3_tag *id); | |
343 void id3_frame_clear_data(struct id3_frame *frame); | |
344 | |
345 /* From id3_frame_text.c */ | |
240
18cb7405b5e9
[svn] Revert unicode fixes, cause player to bomb out.
nenolod
parents:
227
diff
changeset
|
346 char *id3_utf16_to_ascii(void *); |
61 | 347 gint8 id3_get_encoding(struct id3_frame *); |
348 int id3_set_encoding(struct id3_frame *, gint8); | |
349 char *id3_get_text(struct id3_frame *); | |
350 char *id3_get_text_desc(struct id3_frame *); | |
351 int id3_get_text_number(struct id3_frame *); | |
352 int id3_set_text(struct id3_frame *, char *); | |
353 int id3_set_text_number(struct id3_frame *, int); | |
354 gboolean id3_frame_is_text(struct id3_frame *frame); | |
355 | |
356 /* From id3_frame_content.c */ | |
357 char *id3_get_content(struct id3_frame *); | |
358 | |
359 /* From id3_frame_url.c */ | |
360 char *id3_get_url(struct id3_frame *); | |
361 char *id3_get_url_desc(struct id3_frame *); | |
362 | |
363 /* From id3_tag.c */ | |
364 void id3_init_tag(struct id3_tag *id3); | |
365 int id3_read_tag(struct id3_tag *id3); | |
366 | |
367 #endif /* ID3_H */ |