00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef AVFORMAT_ID3V2_H
00023 #define AVFORMAT_ID3V2_H
00024
00025 #include <stdint.h>
00026 #include "avformat.h"
00027 #include "internal.h"
00028 #include "metadata.h"
00029
00030 #define ID3v2_HEADER_SIZE 10
00031
00035 #define ID3v2_DEFAULT_MAGIC "ID3"
00036
00037 #define ID3v2_FLAG_DATALEN 0x0001
00038 #define ID3v2_FLAG_UNSYNCH 0x0002
00039 #define ID3v2_FLAG_ENCRYPTION 0x0004
00040 #define ID3v2_FLAG_COMPRESSION 0x0008
00041
00042 enum ID3v2Encoding {
00043 ID3v2_ENCODING_ISO8859 = 0,
00044 ID3v2_ENCODING_UTF16BOM = 1,
00045 ID3v2_ENCODING_UTF16BE = 2,
00046 ID3v2_ENCODING_UTF8 = 3,
00047 };
00048
00049 typedef struct ID3v2EncContext {
00050 int version;
00051 int64_t size_pos;
00052 int len;
00053 } ID3v2EncContext;
00054
00055 typedef struct ID3v2ExtraMeta {
00056 const char *tag;
00057 void *data;
00058 struct ID3v2ExtraMeta *next;
00059 } ID3v2ExtraMeta;
00060
00061 typedef struct ID3v2ExtraMetaGEOB {
00062 uint32_t datasize;
00063 uint8_t *mime_type;
00064 uint8_t *file_name;
00065 uint8_t *description;
00066 uint8_t *data;
00067 } ID3v2ExtraMetaGEOB;
00068
00069 typedef struct ID3v2ExtraMetaAPIC {
00070 uint8_t *data;
00071 int len;
00072 const char *type;
00073 uint8_t *description;
00074 enum AVCodecID id;
00075 } ID3v2ExtraMetaAPIC;
00076
00083 int ff_id3v2_match(const uint8_t *buf, const char *magic);
00084
00090 int ff_id3v2_tag_len(const uint8_t *buf);
00091
00097 void ff_id3v2_read(AVFormatContext *s, const char *magic, ID3v2ExtraMeta **extra_meta);
00098
00102 void ff_id3v2_start(ID3v2EncContext *id3, AVIOContext *pb, int id3v2_version,
00103 const char *magic);
00104
00108 int ff_id3v2_write_metadata(AVFormatContext *s, ID3v2EncContext *id3);
00109
00113 int ff_id3v2_write_apic(AVFormatContext *s, ID3v2EncContext *id3, AVPacket *pkt);
00114
00118 void ff_id3v2_finish(ID3v2EncContext *id3, AVIOContext *pb);
00119
00126 int ff_id3v2_write_simple(struct AVFormatContext *s, int id3v2_version, const char *magic);
00127
00132 void ff_id3v2_free_extra_meta(ID3v2ExtraMeta **extra_meta);
00133
00138 int ff_id3v2_parse_apic(AVFormatContext *s, ID3v2ExtraMeta **extra_meta);
00139
00140 extern const AVMetadataConv ff_id3v2_34_metadata_conv[];
00141 extern const AVMetadataConv ff_id3v2_4_metadata_conv[];
00142
00148 extern const char ff_id3v2_tags[][4];
00149
00153 extern const char ff_id3v2_4_tags[][4];
00154
00158 extern const char ff_id3v2_3_tags[][4];
00159
00160 extern const CodecMime ff_id3v2_mime_tags[];
00161
00162 extern const char *ff_id3v2_picture_types[21];
00163
00164 #endif