Mercurial > audlegacy-plugins
view src/aac/xmms-id3.h @ 2284:d19b53359b24
cleaned up the sndfile wav plugin, currently limiting it ONLY TO WAV
PLAYBACK. if somebody is more experienced with it and wants to restore
the other formats, go ahead (maybe change the name of the plugin too?).
author | mf0102 <0102@gmx.at> |
---|---|
date | Wed, 09 Jan 2008 15:41:22 +0100 |
parents | eed7c270e8dd |
children | 3134a0987162 |
line wrap: on
line source
/********************************************************************* * * Copyright (C) 1998, 1999, 2002, Espen Skoglund * Department of Computer Science, University of Tromsų * * Filename: id3.h * Description: Include file for accessing the ID3 library. * Author: Espen Skoglund <espensk@stud.cs.uit.no> * Created at: Thu Nov 5 15:55:10 1998 * * $Id: xmms-id3.h,v 1.1 2004/07/20 21:47:22 descender Exp $ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ********************************************************************/ #ifndef ID3_H #define ID3_H #include <glib.h> #include <audacious/vfs.h> /* * Option flags to id3_open_*(). */ #define ID3_OPENF_NONE 0x0000 #define ID3_OPENF_NOCHK 0x0001 #define ID3_OPENF_CREATE 0x0002 /* * The size of the read buffer used by file operations. */ #define ID3_FD_BUFSIZE 8192 /* * Structure describing the ID3 tag. */ struct id3_tag { int id3_type; /* Memory or file desriptor */ int id3_oflags; /* Flags from open call */ int id3_flags; /* Flags from tag header */ int id3_altered; /* Set when tag has been altered */ int id3_newtag; /* Set if this is a new tag */ int id3_version; /* Major ID3 version number */ int id3_revision; /* ID3 revision number */ int id3_tagsize; /* Total size of ID3 tag */ int id3_pos; /* Current position within tag */ char *id3_error_msg; /* Last error message */ char id3_buffer[256]; /* Used for various strings */ union { /* * Memory specific fields. */ struct { void *id3_ptr; } me; /* * File desc. specific fields. */ struct { int id3_fd; void *id3_buf; } fd; /* * File ptr. specific fields. */ struct { VFSFile *id3_fp; void *id3_buf; } fp; } s; /* * Functions for doing operations within ID3 tag. */ int (*id3_seek) (struct id3_tag *, int); void *(*id3_read) (struct id3_tag *, void *, int); /* * Linked list of ID3 frames. */ GList *id3_frame; }; #define ID3_TYPE_NONE 0 #define ID3_TYPE_MEM 1 #define ID3_TYPE_FD 2 #define ID3_TYPE_FP 3 /* * Structure describing an ID3 frame. */ struct id3_frame { struct id3_tag *fr_owner; struct id3_framedesc *fr_desc; int fr_flags; unsigned char fr_encryption; unsigned char fr_grouping; unsigned char fr_altered; void *fr_data; /* Pointer to frame data, excluding headers */ int fr_size; /* Size of uncompressed frame */ void *fr_raw_data; /* Frame data */ int fr_raw_size; /* Frame size */ void *fr_data_z; /* The decompressed compressed frame */ int fr_size_z; /* Size of decompressed compressed frame */ }; /* * Structure describing an ID3 frame type. */ struct id3_framedesc { guint32 fd_id; char fd_idstr[4]; char *fd_description; }; /* * Text encodings. */ #define ID3_ENCODING_ISO_8859_1 0x00 #define ID3_ENCODING_UTF16 0x01 #define ID3_ENCODING_UTF16BE 0x02 #define ID3_ENCODING_UTF8 0x03 /* * ID3 frame id numbers. */ #define ID3_FRAME_ID(a,b,c,d) ((a << 24) | (b << 16) | (c << 8) | d) #define ID3_AENC ID3_FRAME_ID('A','E','N','C') #define ID3_APIC ID3_FRAME_ID('A','P','I','C') #define ID3_ASPI ID3_FRAME_ID('A','S','P','I') #define ID3_COMM ID3_FRAME_ID('C','O','M','M') #define ID3_COMR ID3_FRAME_ID('C','O','M','R') #define ID3_ENCR ID3_FRAME_ID('E','N','C','R') #define ID3_EQUA ID3_FRAME_ID('E','Q','U','A') #define ID3_EQU2 ID3_FRAME_ID('E','Q','U','2') #define ID3_ETCO ID3_FRAME_ID('E','T','C','O') #define ID3_GEOB ID3_FRAME_ID('G','E','O','B') #define ID3_GRID ID3_FRAME_ID('G','R','I','D') #define ID3_IPLS ID3_FRAME_ID('I','P','L','S') #define ID3_LINK ID3_FRAME_ID('L','I','N','K') #define ID3_MCDI ID3_FRAME_ID('M','C','D','I') #define ID3_MLLT ID3_FRAME_ID('M','L','L','T') #define ID3_OWNE ID3_FRAME_ID('O','W','N','E') #define ID3_PRIV ID3_FRAME_ID('P','R','I','V') #define ID3_PCNT ID3_FRAME_ID('P','C','N','T') #define ID3_POPM ID3_FRAME_ID('P','O','P','M') #define ID3_POSS ID3_FRAME_ID('P','O','S','S') #define ID3_RBUF ID3_FRAME_ID('R','B','U','F') #define ID3_RVAD ID3_FRAME_ID('R','V','A','D') #define ID3_RVA2 ID3_FRAME_ID('R','V','A','2') #define ID3_RVRB ID3_FRAME_ID('R','V','R','B') #define ID3_SEEK ID3_FRAME_ID('S','E','E','K') #define ID3_SIGN ID3_FRAME_ID('S','I','G','N') #define ID3_SYLT ID3_FRAME_ID('S','Y','L','T') #define ID3_SYTC ID3_FRAME_ID('S','Y','T','C') #define ID3_TALB ID3_FRAME_ID('T','A','L','B') #define ID3_TBPM ID3_FRAME_ID('T','B','P','M') #define ID3_TCOM ID3_FRAME_ID('T','C','O','M') #define ID3_TCON ID3_FRAME_ID('T','C','O','N') #define ID3_TCOP ID3_FRAME_ID('T','C','O','P') #define ID3_TDAT ID3_FRAME_ID('T','D','A','T') #define ID3_TDEN ID3_FRAME_ID('T','D','E','N') #define ID3_TDLY ID3_FRAME_ID('T','D','L','Y') #define ID3_TDOR ID3_FRAME_ID('T','D','O','R') #define ID3_TDRC ID3_FRAME_ID('T','D','R','C') #define ID3_TDRL ID3_FRAME_ID('T','D','R','L') #define ID3_TDTG ID3_FRAME_ID('T','D','T','G') #define ID3_TENC ID3_FRAME_ID('T','E','N','C') #define ID3_TEXT ID3_FRAME_ID('T','E','X','T') #define ID3_TFLT ID3_FRAME_ID('T','F','L','T') #define ID3_TIME ID3_FRAME_ID('T','I','M','E') #define ID3_TIPL ID3_FRAME_ID('T','I','P','L') #define ID3_TIT1 ID3_FRAME_ID('T','I','T','1') #define ID3_TIT2 ID3_FRAME_ID('T','I','T','2') #define ID3_TIT3 ID3_FRAME_ID('T','I','T','3') #define ID3_TKEY ID3_FRAME_ID('T','K','E','Y') #define ID3_TLAN ID3_FRAME_ID('T','L','A','N') #define ID3_TLEN ID3_FRAME_ID('T','L','E','N') #define ID3_TMCL ID3_FRAME_ID('T','M','C','L') #define ID3_TMED ID3_FRAME_ID('T','M','E','D') #define ID3_TMOO ID3_FRAME_ID('T','M','O','O') #define ID3_TOAL ID3_FRAME_ID('T','O','A','L') #define ID3_TOFN ID3_FRAME_ID('T','O','F','N') #define ID3_TOLY ID3_FRAME_ID('T','O','L','Y') #define ID3_TOPE ID3_FRAME_ID('T','O','P','E') #define ID3_TORY ID3_FRAME_ID('T','O','R','Y') #define ID3_TOWN ID3_FRAME_ID('T','O','W','N') #define ID3_TPE1 ID3_FRAME_ID('T','P','E','1') #define ID3_TPE2 ID3_FRAME_ID('T','P','E','2') #define ID3_TPE3 ID3_FRAME_ID('T','P','E','3') #define ID3_TPE4 ID3_FRAME_ID('T','P','E','4') #define ID3_TPOS ID3_FRAME_ID('T','P','O','S') #define ID3_TPRO ID3_FRAME_ID('T','P','R','O') #define ID3_TPUB ID3_FRAME_ID('T','P','U','B') #define ID3_TRCK ID3_FRAME_ID('T','R','C','K') #define ID3_TRDA ID3_FRAME_ID('T','R','D','A') #define ID3_TRSN ID3_FRAME_ID('T','R','S','N') #define ID3_TRSO ID3_FRAME_ID('T','R','S','O') #define ID3_TSIZ ID3_FRAME_ID('T','S','I','Z') #define ID3_TSOA ID3_FRAME_ID('T','S','O','A') #define ID3_TSOP ID3_FRAME_ID('T','S','O','P') #define ID3_TSOT ID3_FRAME_ID('T','S','O','T') #define ID3_TSRC ID3_FRAME_ID('T','S','R','C') #define ID3_TSSE ID3_FRAME_ID('T','S','S','E') #define ID3_TSST ID3_FRAME_ID('T','S','S','T') #define ID3_TYER ID3_FRAME_ID('T','Y','E','R') #define ID3_TXXX ID3_FRAME_ID('T','X','X','X') #define ID3_UFID ID3_FRAME_ID('U','F','I','D') #define ID3_USER ID3_FRAME_ID('U','S','E','R') #define ID3_USLT ID3_FRAME_ID('U','S','L','T') #define ID3_WCOM ID3_FRAME_ID('W','C','O','M') #define ID3_WCOP ID3_FRAME_ID('W','C','O','P') #define ID3_WOAF ID3_FRAME_ID('W','O','A','F') #define ID3_WOAR ID3_FRAME_ID('W','O','A','R') #define ID3_WOAS ID3_FRAME_ID('W','O','A','S') #define ID3_WORS ID3_FRAME_ID('W','O','R','S') #define ID3_WPAY ID3_FRAME_ID('W','P','A','Y') #define ID3_WPUB ID3_FRAME_ID('W','P','U','B') #define ID3_WXXX ID3_FRAME_ID('W','X','X','X') /* * Version 2.2.0 */ #define ID3_FRAME_ID_22(a, b, c) ((a << 16) | (b << 8) | c) #define ID3_BUF ID3_FRAME_ID_22('B', 'U', 'F') #define ID3_CNT ID3_FRAME_ID_22('C', 'N', 'T') #define ID3_COM ID3_FRAME_ID_22('C', 'O', 'M') #define ID3_CRA ID3_FRAME_ID_22('C', 'R', 'A') #define ID3_CRM ID3_FRAME_ID_22('C', 'R', 'M') #define ID3_ETC ID3_FRAME_ID_22('E', 'T', 'C') #define ID3_EQU ID3_FRAME_ID_22('E', 'Q', 'U') #define ID3_GEO ID3_FRAME_ID_22('G', 'E', 'O') #define ID3_IPL ID3_FRAME_ID_22('I', 'P', 'L') #define ID3_LNK ID3_FRAME_ID_22('L', 'N', 'K') #define ID3_MCI ID3_FRAME_ID_22('M', 'C', 'I') #define ID3_MLL ID3_FRAME_ID_22('M', 'L', 'L') #define ID3_PIC ID3_FRAME_ID_22('P', 'I', 'C') #define ID3_POP ID3_FRAME_ID_22('P', 'O', 'P') #define ID3_REV ID3_FRAME_ID_22('R', 'E', 'V') #define ID3_RVA ID3_FRAME_ID_22('R', 'V', 'A') #define ID3_SLT ID3_FRAME_ID_22('S', 'L', 'T') #define ID3_STC ID3_FRAME_ID_22('S', 'T', 'C') #define ID3_TAL ID3_FRAME_ID_22('T', 'A', 'L') #define ID3_TBP ID3_FRAME_ID_22('T', 'B', 'P') #define ID3_TCM ID3_FRAME_ID_22('T', 'C', 'M') #define ID3_TCO ID3_FRAME_ID_22('T', 'C', 'O') #define ID3_TCR ID3_FRAME_ID_22('T', 'C', 'R') #define ID3_TDA ID3_FRAME_ID_22('T', 'D', 'A') #define ID3_TDY ID3_FRAME_ID_22('T', 'D', 'Y') #define ID3_TEN ID3_FRAME_ID_22('T', 'E', 'N') #define ID3_TFT ID3_FRAME_ID_22('T', 'F', 'T') #define ID3_TIM ID3_FRAME_ID_22('T', 'I', 'M') #define ID3_TKE ID3_FRAME_ID_22('T', 'K', 'E') #define ID3_TLA ID3_FRAME_ID_22('T', 'L', 'A') #define ID3_TLE ID3_FRAME_ID_22('T', 'L', 'E') #define ID3_TMT ID3_FRAME_ID_22('T', 'M', 'T') #define ID3_TOA ID3_FRAME_ID_22('T', 'O', 'A') #define ID3_TOF ID3_FRAME_ID_22('T', 'O', 'F') #define ID3_TOL ID3_FRAME_ID_22('T', 'O', 'L') #define ID3_TOR ID3_FRAME_ID_22('T', 'O', 'R') #define ID3_TOT ID3_FRAME_ID_22('T', 'O', 'T') #define ID3_TP1 ID3_FRAME_ID_22('T', 'P', '1') #define ID3_TP2 ID3_FRAME_ID_22('T', 'P', '2') #define ID3_TP3 ID3_FRAME_ID_22('T', 'P', '3') #define ID3_TP4 ID3_FRAME_ID_22('T', 'P', '4') #define ID3_TPA ID3_FRAME_ID_22('T', 'P', 'A') #define ID3_TPB ID3_FRAME_ID_22('T', 'P', 'B') #define ID3_TRC ID3_FRAME_ID_22('T', 'R', 'C') #define ID3_TRD ID3_FRAME_ID_22('T', 'R', 'D') #define ID3_TRK ID3_FRAME_ID_22('T', 'R', 'K') #define ID3_TSI ID3_FRAME_ID_22('T', 'S', 'I') #define ID3_TSS ID3_FRAME_ID_22('T', 'S', 'S') #define ID3_TT1 ID3_FRAME_ID_22('T', 'T', '1') #define ID3_TT2 ID3_FRAME_ID_22('T', 'T', '2') #define ID3_TT3 ID3_FRAME_ID_22('T', 'T', '3') #define ID3_TXT ID3_FRAME_ID_22('T', 'X', 'T') #define ID3_TXX ID3_FRAME_ID_22('T', 'X', 'X') #define ID3_TYE ID3_FRAME_ID_22('T', 'Y', 'E') #define ID3_UFI ID3_FRAME_ID_22('U', 'F', 'I') #define ID3_ULT ID3_FRAME_ID_22('U', 'L', 'T') #define ID3_WAF ID3_FRAME_ID_22('W', 'A', 'F') #define ID3_WAR ID3_FRAME_ID_22('W', 'A', 'R') #define ID3_WAS ID3_FRAME_ID_22('W', 'A', 'S') #define ID3_WCM ID3_FRAME_ID_22('W', 'C', 'M') #define ID3_WCP ID3_FRAME_ID_22('W', 'C', 'P') #define ID3_WPB ID3_FRAME_ID_22('W', 'P', 'B') #define ID3_WXX ID3_FRAME_ID_22('W', 'X', 'X') /* * Prototypes. */ /* From id3.c */ struct id3_tag *id3_open_mem(void *, int); struct id3_tag *id3_open_fd(int, int); struct id3_tag *id3_open_fp(VFSFile *, int); int id3_set_output(struct id3_tag *, char *); int id3_close(struct id3_tag *); int id3_tell(struct id3_tag *); int id3_alter_file(struct id3_tag *); int id3_write_tag(struct id3_tag *, int); /* From id3_frame.c */ int id3_read_frame(struct id3_tag *id3); struct id3_frame *id3_get_frame(struct id3_tag *, guint32, int); int id3_delete_frame(struct id3_frame *frame); struct id3_frame *id3_add_frame(struct id3_tag *, guint32); int id3_decompress_frame(struct id3_frame *); void id3_destroy_frames(struct id3_tag *id); void id3_frame_clear_data(struct id3_frame *frame); /* From id3_frame_text.c */ char *id3_utf16_to_ascii(void *); gint8 id3_get_encoding(struct id3_frame *); int id3_set_encoding(struct id3_frame *, gint8); char *id3_get_text(struct id3_frame *); char *id3_get_text_desc(struct id3_frame *); int id3_get_text_number(struct id3_frame *); int id3_set_text(struct id3_frame *, char *); int id3_set_text_number(struct id3_frame *, int); gboolean id3_frame_is_text(struct id3_frame *frame); /* From id3_frame_content.c */ char *id3_get_content(struct id3_frame *); /* From id3_frame_url.c */ char *id3_get_url(struct id3_frame *); char *id3_get_url_desc(struct id3_frame *); /* From id3_tag.c */ void id3_init_tag(struct id3_tag *id3); int id3_read_tag(struct id3_tag *id3); #endif /* ID3_H */