1 /*
2 * ID3v2 header parser
3 * Copyright (c) 2003 Fabrice Bellard
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 #ifndef AVFORMAT_ID3V2_H
23 #define AVFORMAT_ID3V2_H
24
25 #include <stdint.h>
29
30 #define ID3v2_HEADER_SIZE 10
31
32 /**
33 * Default magic bytes for ID3v2 header: "ID3"
34 */
35 #define ID3v2_DEFAULT_MAGIC "ID3"
36
37 #define ID3v2_FLAG_DATALEN 0x0001
38 #define ID3v2_FLAG_UNSYNCH 0x0002
39 #define ID3v2_FLAG_ENCRYPTION 0x0004
40 #define ID3v2_FLAG_COMPRESSION 0x0008
41
47 };
48
50 int version;
///< ID3v2 minor version, either 3 or 4
51 int64_t
size_pos;
///< offset of the tag total size
52 int len;
///< size of the tag written so far
54
60
68
75
81
82 /**
83 * Detect ID3v2 Header.
84 * @param buf must be ID3v2_HEADER_SIZE byte long
85 * @param magic magic bytes to identify the header.
86 * If in doubt, use ID3v2_DEFAULT_MAGIC.
87 */
89
90 /**
91 * Get the length of an ID3v2 tag.
92 * @param buf must be ID3v2_HEADER_SIZE bytes long and point to the start of an
93 * already detected ID3v2 tag
94 */
96
97 /**
98 * Read an ID3v2 tag into specified dictionary and retrieve supported extra metadata.
99 *
100 * Chapters are not currently read by this variant.
101 *
102 * @param metadata Parsed metadata is stored here
103 * @param extra_meta If not NULL, extra metadata is parsed into a list of
104 * ID3v2ExtraMeta structs and *extra_meta points to the head of the list
105 */
107
108 /**
109 * Read an ID3v2 tag, including supported extra metadata and chapters.
110 *
111 * Data is read from and stored to AVFormatContext.
112 *
113 * @param extra_meta If not NULL, extra metadata is parsed into a list of
114 * ID3v2ExtraMeta structs and *extra_meta points to the head of the list
115 * @param[opt] max_search_search restrict ID3 magic number search (bytes from start)
116 */
118 unsigned int max_search_size);
119
120 /**
121 * Initialize an ID3v2 tag.
122 */
124 const char *magic);
125
126 /**
127 * Convert and write all global metadata from s into an ID3v2 tag.
128 */
130
131 /**
132 * Write an attached picture from pkt into an ID3v2 tag.
133 */
135
136 /**
137 * Finalize an opened ID3v2 tag.
138 */
140
141 /**
142 * Write an ID3v2 tag containing all global metadata from s.
143 * @param id3v2_version Subversion of ID3v2; supported values are 3 and 4
144 * @param magic magic bytes to identify the header
145 * If in doubt, use ID3v2_DEFAULT_MAGIC.
146 */
148
149 /**
150 * Free memory allocated parsing special (non-text) metadata.
151 * @param extra_meta Pointer to a pointer to the head of a ID3v2ExtraMeta list, *extra_meta is set to NULL.
152 */
154
155 /**
156 * Create a stream for each APIC (attached picture) extracted from the
157 * ID3v2 header.
158 */
160
163
164 /**
165 * A list of text information frames allowed in both ID3 v2.3 and v2.4
166 * http://www.id3.org/id3v2.4.0-frames
167 * http://www.id3.org/id3v2.4.0-changes
168 */
170
171 /**
172 * ID3v2.4-only text information frames.
173 */
175
176 /**
177 * ID3v2.3-only text information frames.
178 */
180
182
184
185 #endif /* AVFORMAT_ID3V2_H */