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
187static inline uint16_t _X_BE_16_synchsafe(uint8_t buf[2]) {
188 return ((uint16_t)(buf[0] & 0x7F) << 7) |
189 (uint16_t)(buf[1] & 0x7F);
195 return ((uint32_t)(buf[0] & 0x7F) << 14) |
196 ((uint32_t)(buf[1] & 0x7F) << 7) |
197 (uint32_t)(buf[2] & 0x7F);
202 return ((uint32_t)(buf[0] & 0x7F) << 21) |
203 ((uint32_t)(buf[1] & 0x7F) << 14) |
204 ((uint32_t)(buf[2] & 0x7F) << 7) |
205 (uint32_t)(buf[3] & 0x7F);
210 return ((uint32_t)(buf[0] & 0x07) << 28) |
211 ((uint32_t)(buf[1] & 0x7F) << 21) |
212 ((uint32_t)(buf[2] & 0x7F) << 14) |
213 ((uint32_t)(buf[3] & 0x7F) << 7) |
214 (uint32_t)(buf[4] & 0x7F);
static int input(void)
Definition goomsl_lex.c:1495
int id3v1_parse_tag(input_plugin_t *input, xine_stream_t *stream)
Definition id3.c:91
#define ID3V2X_TAG
Definition id3.h:38
static int id3v2_istag(uint32_t id3_signature)
Checks if the given buffer is an ID3 tag preamble.
Definition id3.h:181
static uint32_t _X_BE_32_synchsafe(uint8_t buf[4])
Definition id3.h:201
int xine_parse_id3v2_tag(xine_stream_t *stream, input_plugin_t *input)
Check/parse/skip a possible initial ID3 v2 tag from the (side) stream.
Definition id3.c:915
static uint32_t _X_BE_24_synchsafe(uint8_t buf[3])
Definition id3.h:194
static uint32_t BE_35_synchsafe(uint8_t buf[5])
Definition id3.h:209
id3v2_header_t id3v24_footer_t
Definition id3.h:128
#define ID3V2X_MASK
Definition id3.h:39
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:886
#define XINE_PROTECTED
Definition attributes.h:75
uint8_t genre
Definition id3.h:150
Definition xine_internal.h:123