---
Reviews in patch form please.
libavformat/id3v2.c | 127 +++++++++++++++++++++++++++++++---------------------
1 file changed, 76 insertions(+), 51 deletions(-)
diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c
index 7bcea21..a6a483c 100644
--- a/libavformat/id3v2.c
+++ b/libavformat/id3v2.c
@@ -259,7 +259,8 @@ static int decode_str(AVFormatContext *s, AVIOContext *pb,
int encoding,
/**
* Parse a text tag.
*/
-static void read_ttag(AVFormatContext *s, AVIOContext *pb, int taglen, const
char *key)
+static void read_ttag(AVFormatContext *s, AVIOContext *pb, int taglen,
+ const char *key)
{
uint8_t *dst;
int encoding, dict_flags = AV_DICT_DONT_OVERWRITE |
AV_DICT_DONT_STRDUP_VAL;
@@ -300,10 +301,12 @@ static void read_ttag(AVFormatContext *s, AVIOContext
*pb, int taglen, const cha
/**
* Parse GEOB tag into a ID3v2ExtraMetaGEOB struct.
*/
-static void read_geobtag(AVFormatContext *s, AVIOContext *pb, int taglen, char
*tag, ID3v2ExtraMeta **extra_meta)
+static void read_geobtag(AVFormatContext *s, AVIOContext *pb, int taglen,
+ char *tag,
+ ID3v2ExtraMeta **extra_meta)
{
ID3v2ExtraMetaGEOB *geob_data = NULL;
- ID3v2ExtraMeta *new_extra = NULL;
+ ID3v2ExtraMeta *new_extra = NULL;
char encoding;
unsigned int len;
@@ -312,13 +315,15 @@ static void read_geobtag(AVFormatContext *s, AVIOContext
*pb, int taglen, char *
geob_data = av_mallocz(sizeof(ID3v2ExtraMetaGEOB));
if (!geob_data) {
- av_log(s, AV_LOG_ERROR, "Failed to alloc %zu bytes\n",
sizeof(ID3v2ExtraMetaGEOB));
+ av_log(s, AV_LOG_ERROR, "Failed to alloc %zu bytes\n",
+ sizeof(ID3v2ExtraMetaGEOB));
return;
}
new_extra = av_mallocz(sizeof(ID3v2ExtraMeta));
if (!new_extra) {
- av_log(s, AV_LOG_ERROR, "Failed to alloc %zu bytes\n",
sizeof(ID3v2ExtraMeta));
+ av_log(s, AV_LOG_ERROR, "Failed to alloc %zu bytes\n",
+ sizeof(ID3v2ExtraMeta));
goto fail;
}
@@ -327,7 +332,8 @@ static void read_geobtag(AVFormatContext *s, AVIOContext
*pb, int taglen, char *
taglen--;
/* read MIME type (always ISO-8859) */
- if (decode_str(s, pb, ID3v2_ENCODING_ISO8859, &geob_data->mime_type,
&taglen) < 0
+ if (decode_str(s, pb, ID3v2_ENCODING_ISO8859, &geob_data->mime_type,
+ &taglen) < 0
|| taglen <= 0)
goto fail;
@@ -349,18 +355,19 @@ static void read_geobtag(AVFormatContext *s, AVIOContext
*pb, int taglen, char *
goto fail;
}
if ((len = avio_read(pb, geob_data->data, taglen)) < taglen)
- av_log(s, AV_LOG_WARNING, "Error reading GEOB frame, data
truncated.\n");
+ av_log(s, AV_LOG_WARNING,
+ "Error reading GEOB frame, data truncated.\n");
geob_data->datasize = len;
} else {
- geob_data->data = NULL;
+ geob_data->data = NULL;
geob_data->datasize = 0;
}
/* add data to the list */
- new_extra->tag = "GEOB";
+ new_extra->tag = "GEOB";
new_extra->data = geob_data;
new_extra->next = *extra_meta;
- *extra_meta = new_extra;
+ *extra_meta = new_extra;
return;
@@ -373,11 +380,12 @@ fail:
static int is_number(const char *str)
{
- while (*str >= '0' && *str <= '9') str++;
+ while (*str >= '0' && *str <= '9')
+ str++;
return !*str;
}
-static AVDictionaryEntry* get_date_tag(AVDictionary *m, const char *tag)
+static AVDictionaryEntry *get_date_tag(AVDictionary *m, const char *tag)
{
AVDictionaryEntry *t;
if ((t = av_dict_get(m, tag, NULL, AV_DICT_MATCH_CASE)) &&
@@ -389,28 +397,28 @@ static AVDictionaryEntry* get_date_tag(AVDictionary *m,
const char *tag)
static void merge_date(AVDictionary **m)
{
AVDictionaryEntry *t;
- char date[17] = {0}; // YYYY-MM-DD hh:mm
+ char date[17] = { 0 }; // YYYY-MM-DD hh:mm
if (!(t = get_date_tag(*m, "TYER")) &&
!(t = get_date_tag(*m, "TYE")))
return;
av_strlcpy(date, t->value, 5);
av_dict_set(m, "TYER", NULL, 0);
- av_dict_set(m, "TYE", NULL, 0);
+ av_dict_set(m, "TYE", NULL, 0);
if (!(t = get_date_tag(*m, "TDAT")) &&
!(t = get_date_tag(*m, "TDA")))
goto finish;
snprintf(date + 4, sizeof(date) - 4, "-%.2s-%.2s", t->value + 2, t->value);
av_dict_set(m, "TDAT", NULL, 0);
- av_dict_set(m, "TDA", NULL, 0);
+ av_dict_set(m, "TDA", NULL, 0);
if (!(t = get_date_tag(*m, "TIME")) &&
!(t = get_date_tag(*m, "TIM")))
goto finish;
snprintf(date + 10, sizeof(date) - 10, " %.2s:%.2s", t->value, t->value +
2);
av_dict_set(m, "TIME", NULL, 0);
- av_dict_set(m, "TIM", NULL, 0);
+ av_dict_set(m, "TIM", NULL, 0);
finish:
if (date[0])
@@ -425,15 +433,17 @@ static void free_apic(void *obj)
av_freep(&apic);
}
-static void read_apic(AVFormatContext *s, AVIOContext *pb, int taglen, char
*tag, ID3v2ExtraMeta **extra_meta)
+static void read_apic(AVFormatContext *s, AVIOContext *pb, int taglen,
+ char *tag,
+ ID3v2ExtraMeta **extra_meta)
{
int enc, pic_type;
- char mimetype[64];
- const CodecMime *mime = ff_id3v2_mime_tags;
- enum AVCodecID id = AV_CODEC_ID_NONE;
- ID3v2ExtraMetaAPIC *apic = NULL;
+ char mimetype[64];
+ const CodecMime *mime = ff_id3v2_mime_tags;
+ enum AVCodecID id = AV_CODEC_ID_NONE;
+ ID3v2ExtraMetaAPIC *apic = NULL;
ID3v2ExtraMeta *new_extra = NULL;
- int64_t end = avio_tell(pb) + taglen;
+ int64_t end = avio_tell(pb) + taglen;
if (taglen <= 4)
goto fail;
@@ -456,7 +466,9 @@ static void read_apic(AVFormatContext *s, AVIOContext *pb,
int taglen, char *tag
mime++;
}
if (id == AV_CODEC_ID_NONE) {
- av_log(s, AV_LOG_WARNING, "Unknown attached picture mimetype: %s,
skipping.\n", mimetype);
+ av_log(s, AV_LOG_WARNING,
+ "Unknown attached picture mimetype: %s, skipping.\n",
+ mimetype);
goto fail;
}
apic->id = id;
@@ -465,14 +477,16 @@ static void read_apic(AVFormatContext *s, AVIOContext
*pb, int taglen, char *tag
pic_type = avio_r8(pb);
taglen--;
if (pic_type < 0 || pic_type >= FF_ARRAY_ELEMS(ff_id3v2_picture_types)) {
- av_log(s, AV_LOG_WARNING, "Unknown attached picture type %d.\n",
pic_type);
+ av_log(s, AV_LOG_WARNING, "Unknown attached picture type %d.\n",
+ pic_type);
pic_type = 0;
}
apic->type = ff_id3v2_picture_types[pic_type];
/* description and picture data */
if (decode_str(s, pb, enc, &apic->description, &taglen) < 0) {
- av_log(s, AV_LOG_ERROR, "Error decoding attached picture
description.\n");
+ av_log(s, AV_LOG_ERROR,
+ "Error decoding attached picture description.\n");
goto fail;
}
@@ -481,10 +495,10 @@ static void read_apic(AVFormatContext *s, AVIOContext
*pb, int taglen, char *tag
goto fail;
memset(apic->buf->data + taglen, 0, FF_INPUT_BUFFER_PADDING_SIZE);
- new_extra->tag = "APIC";
- new_extra->data = apic;
- new_extra->next = *extra_meta;
- *extra_meta = new_extra;
+ new_extra->tag = "APIC";
+ new_extra->data = apic;
+ new_extra->next = *extra_meta;
+ *extra_meta = new_extra;
return;
@@ -498,7 +512,8 @@ fail:
typedef struct ID3v2EMFunc {
const char *tag3;
const char *tag4;
- void (*read)(AVFormatContext*, AVIOContext*, int, char*, ID3v2ExtraMeta
**);
+ void (*read)(AVFormatContext *, AVIOContext *, int, char *,
+ ID3v2ExtraMeta **);
void (*free)(void *obj);
} ID3v2EMFunc;
@@ -527,7 +542,9 @@ static const ID3v2EMFunc *get_extra_meta_func(const char
*tag, int isv34)
return NULL;
}
-static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version,
uint8_t flags, ID3v2ExtraMeta **extra_meta)
+static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version,
+ uint8_t flags,
+ ID3v2ExtraMeta **extra_meta)
{
int isv34, tlen, unsync;
char tag[5];
@@ -546,13 +563,13 @@ static void ff_id3v2_parse(AVFormatContext *s, int len,
uint8_t version, uint8_t
reason = "compression";
goto error;
}
- isv34 = 0;
+ isv34 = 0;
taghdrlen = 6;
break;
case 3:
case 4:
- isv34 = 1;
+ isv34 = 1;
taghdrlen = 10;
break;
@@ -577,24 +594,26 @@ static void ff_id3v2_parse(AVFormatContext *s, int len,
uint8_t version, uint8_t
while (len >= taghdrlen) {
unsigned int tflags = 0;
- int tunsync = 0;
+ int tunsync = 0;
if (isv34) {
avio_read(s->pb, tag, 4);
tag[4] = 0;
- if(version==3){
+ if (version == 3) {
tlen = avio_rb32(s->pb);
- }else
+ } else
tlen = get_size(s->pb, 4);
- tflags = avio_rb16(s->pb);
+ tflags = avio_rb16(s->pb);
tunsync = tflags & ID3v2_FLAG_UNSYNCH;
} else {
avio_read(s->pb, tag, 3);
tag[3] = 0;
- tlen = avio_rb24(s->pb);
+ tlen = avio_rb24(s->pb);
}
if (tlen < 0 || tlen > len - taghdrlen) {
- av_log(s, AV_LOG_WARNING, "Invalid size in frame %s, skipping the
rest of tag.\n", tag);
+ av_log(s, AV_LOG_WARNING,
+ "Invalid size in frame %s, skipping the rest of tag.\n",
+ tag);
break;
}
len -= taghdrlen + tlen;
@@ -602,7 +621,8 @@ static void ff_id3v2_parse(AVFormatContext *s, int len,
uint8_t version, uint8_t
if (!tlen) {
if (tag[0])
- av_log(s, AV_LOG_DEBUG, "Invalid empty frame %s, skipping.\n",
tag);
+ av_log(s, AV_LOG_DEBUG, "Invalid empty frame %s, skipping.\n",
+ tag);
continue;
}
@@ -612,7 +632,9 @@ static void ff_id3v2_parse(AVFormatContext *s, int len,
uint8_t version, uint8_t
}
if (tflags & (ID3v2_FLAG_ENCRYPTION | ID3v2_FLAG_COMPRESSION)) {
- av_log(s, AV_LOG_WARNING, "Skipping encrypted/compressed ID3v2
frame %s.\n", tag);
+ av_log(s, AV_LOG_WARNING,
+ "Skipping encrypted/compressed ID3v2 frame %s.\n",
+ tag);
avio_skip(s->pb, tlen);
/* check for text tag or supported special meta tag */
} else if (tag[0] == 'T' || (extra_meta && (extra_func =
get_extra_meta_func(tag, isv34)))) {
@@ -632,9 +654,10 @@ static void ff_id3v2_parse(AVFormatContext *s, int len,
uint8_t version, uint8_t
*b++ = val ? val : avio_r8(s->pb);
}
}
- ffio_init_context(&pb, buffer, b - buffer, 0, NULL, NULL,
NULL, NULL);
+ ffio_init_context(&pb, buffer, b - buffer, 0, NULL, NULL, NULL,
+ NULL);
tlen = b - buffer;
- pbx = &pb; // read from sync buffer
+ pbx = &pb; // read from sync buffer
} else {
pbx = s->pb; // read straight from input
}
@@ -644,8 +667,7 @@ static void ff_id3v2_parse(AVFormatContext *s, int len,
uint8_t version, uint8_t
else
/* parse special meta tag */
extra_func->read(s, pbx, tlen, tag, extra_meta);
- }
- else if (!tag[0]) {
+ } else if (!tag[0]) {
if (tag[1])
av_log(s, AV_LOG_WARNING, "invalid frame id, assuming
padding");
avio_skip(s->pb, tlen);
@@ -659,19 +681,22 @@ seek:
if (version == 4 && flags & 0x10) /* Footer preset, always 10 bytes, skip
over it */
end += 10;
- error:
+error:
if (reason)
- av_log(s, AV_LOG_INFO, "ID3v2.%d tag skipped, cannot handle %s\n",
version, reason);
+ av_log(s, AV_LOG_INFO, "ID3v2.%d tag skipped, cannot handle %s\n",
+ version,
+ reason);
avio_seek(s->pb, end, SEEK_SET);
av_free(buffer);
return;
}
-void ff_id3v2_read(AVFormatContext *s, const char *magic, ID3v2ExtraMeta
**extra_meta)
+void ff_id3v2_read(AVFormatContext *s, const char *magic,
+ ID3v2ExtraMeta **extra_meta)
{
int len, ret;
uint8_t buf[ID3v2_HEADER_SIZE];
- int found_header;
+ int found_header;
int64_t off;
do {
@@ -680,8 +705,8 @@ void ff_id3v2_read(AVFormatContext *s, const char *magic,
ID3v2ExtraMeta **extra
ret = avio_read(s->pb, buf, ID3v2_HEADER_SIZE);
if (ret != ID3v2_HEADER_SIZE)
break;
- found_header = ff_id3v2_match(buf, magic);
- if (found_header) {
+ found_header = ff_id3v2_match(buf, magic);
+ if (found_header) {
/* parse ID3v2 header */
len = ((buf[6] & 0x7f) << 21) |
((buf[7] & 0x7f) << 14) |
--
1.8.1.5
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel