33 #define ID3V22_TAG ME_FOURCC('I', 'D', '3', 2) 34 #define ID3V23_TAG ME_FOURCC('I', 'D', '3', 3) 35 #define ID3V24_TAG ME_FOURCC('I', 'D', '3', 4) 36 #define ID3V24_FOOTER_TAG ME_FOURCC('3', 'D', 'I', 0) 38 #define ID3V2X_TAG ME_FOURCC('I', 'D', '3', 0) 39 #define ID3V2X_MASK ~ME_FOURCC( 0 , 0 , 0 , 0xFF) 45 #define ID3V22_UNSYNCH_FLAG 0x80 46 #define ID3V22_COMPRESS_FLAG 0x40 47 #define ID3V22_ZERO_FLAG 0x3F 50 #define ID3V22_FRAME_HEADER_SIZE 6 56 #define ID3V23_UNSYNCH_FLAG 0x80 57 #define ID3V23_EXT_HEADER_FLAG 0x40 58 #define ID3V23_EXPERIMENTAL_FLAG 0x20 59 #define ID3V23_ZERO_FLAG 0x1F 62 #define ID3V23_FRAME_HEADER_SIZE 10 63 #define ID3V23_FRAME_TAG_PRESERV_FLAG 0x8000 64 #define ID3V23_FRAME_FILE_PRESERV_FLAG 0x4000 65 #define ID3V23_FRAME_READ_ONLY_FLAG 0x2000 66 #define ID3V23_FRAME_COMPRESS_FLAG 0x0080 67 #define ID3V23_FRAME_ENCRYPT_FLAG 0x0040 68 #define ID3V23_FRAME_GROUP_ID_FLAG 0x0020 69 #define ID3V23_FRAME_ZERO_FLAG 0x1F1F 75 #define ID3V24_UNSYNCH_FLAG 0x80 76 #define ID3V24_EXT_HEADER_FLAG 0x40 77 #define ID3V24_EXPERIMENTAL_FLAG 0x20 78 #define ID3V24_FOOTER_FLAG 0x10 79 #define ID3V24_ZERO_FLAG 0x0F 82 #define ID3V24_EXT_UPDATE_FLAG 0x40 83 #define ID3V24_EXT_CRC_FLAG 0x20 84 #define ID3V24_EXT_RESTRICTIONS_FLAG 0x10 85 #define ID3V24_EXT_ZERO_FLAG 0x8F 88 #define ID3V24_FRAME_HEADER_SIZE 10 89 #define ID3V24_FRAME_TAG_PRESERV_FLAG 0x4000 90 #define ID3V24_FRAME_FILE_PRESERV_FLAG 0x2000 91 #define ID3V24_FRAME_READ_ONLY_FLAG 0x1000 92 #define ID3V24_FRAME_GROUP_ID_FLAG 0x0040 93 #define ID3V24_FRAME_COMPRESS_FLAG 0x0008 94 #define ID3V24_FRAME_ENCRYPT_FLAG 0x0004 95 #define ID3V24_FRAME_UNSYNCH_FLAG 0x0002 96 #define ID3V24_FRAME_DATA_LEN_FLAG 0x0001 97 #define ID3V24_FRAME_ZERO_FLAG 0x8FB0 100 #define ID3V24_FOOTER_SIZE 10 167 uint32_t id3_signature);
179 static inline uint16_t _X_BE_16_synchsafe(uint8_t buf[2]) {
180 return ((uint16_t)(buf[0] & 0x7F) << 7) |
181 (uint16_t)(buf[1] & 0x7F);
187 return ((uint32_t)(buf[0] & 0x7F) << 14) |
188 ((uint32_t)(buf[1] & 0x7F) << 7) |
189 (uint32_t)(buf[2] & 0x7F);
194 return ((uint32_t)(buf[0] & 0x7F) << 21) |
195 ((uint32_t)(buf[1] & 0x7F) << 14) |
196 ((uint32_t)(buf[2] & 0x7F) << 7) |
197 (uint32_t)(buf[3] & 0x7F);
202 return ((uint32_t)(buf[0] & 0x07) << 28) |
203 ((uint32_t)(buf[1] & 0x7F) << 21) |
204 ((uint32_t)(buf[2] & 0x7F) << 14) |
205 ((uint32_t)(buf[3] & 0x7F) << 7) |
206 (uint32_t)(buf[4] & 0x7F);
int id3v2_parse_tag(input_plugin_t *input, xine_stream_t *stream, uint32_t id3_signature)
Generic function for ID3v2 tags parsing.
Definition: id3.c:853
static uint32_t BE_35_synchsafe(uint8_t buf[5])
Definition: id3.h:201
#define ID3V2X_MASK
Definition: id3.h:39
static int id3v2_istag(uint32_t id3_signature)
Checks if the given buffer is an ID3 tag preamble.
Definition: id3.h:173
static uint32_t _X_BE_24_synchsafe(uint8_t buf[3])
Definition: id3.h:186
uint8_t genre
Definition: id3.h:150
Definition: xine_internal.h:210
static int input(void)
Definition: goomsl_lex.c:1495
#define ID3V2X_TAG
Definition: id3.h:38
static uint32_t _X_BE_32_synchsafe(uint8_t buf[4])
Definition: id3.h:193
id3v2_header_t id3v24_footer_t
Definition: id3.h:128
int id3v1_parse_tag(input_plugin_t *input, xine_stream_t *stream)
Definition: id3.c:88