diff options
author | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2008-11-15 20:17:19 +0000 |
---|---|---|
committer | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2008-11-15 20:17:19 +0000 |
commit | 86b0affd0895235b9aab8ef1edd5f182000fabd2 (patch) | |
tree | 7c333c3c34274b4b1802c10e2ac148386bd8a715 | |
parent | 8f569ed08faa39414ebd65c2e530a87dc9007d5b (diff) | |
download | ffmpeg-86b0affd0895235b9aab8ef1edd5f182000fabd2.tar.gz |
simplify metadata reading
Originally committed as revision 15830 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavformat/mov.c | 56 |
1 files changed, 20 insertions, 36 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c index 32cb90996b..c779a39157 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1366,46 +1366,26 @@ static int mov_read_trak(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) return 0; } -static void mov_parse_udta_string(ByteIOContext *pb, char *str, int size) +static int mov_read_udta_string(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) { + char *str = NULL; + int size; uint16_t str_size = get_be16(pb); /* string length */; + switch (atom.type) { + case MKTAG(0xa9,'n','a','m'): + str = c->fc->title; size = sizeof(c->fc->title); break; + case MKTAG(0xa9,'w','r','t'): + str = c->fc->author; size = sizeof(c->fc->author); break; + case MKTAG(0xa9,'c','p','y'): + str = c->fc->copyright; size = sizeof(c->fc->copyright); break; + case MKTAG(0xa9,'i','n','f'): + str = c->fc->comment; size = sizeof(c->fc->comment); break; + } + if (!str) + return 0; get_be16(pb); /* skip language */ get_buffer(pb, str, FFMIN(size, str_size)); -} - -static int mov_read_udta(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom) -{ - uint64_t end = url_ftell(pb) + atom.size; - - while (url_ftell(pb) + 8 < end) { - uint32_t tag_size = get_be32(pb); - uint32_t tag = get_le32(pb); - uint64_t next = url_ftell(pb) + tag_size - 8; - - if (tag_size < 8 || next > end) // stop if tag_size is wrong - break; - - switch (tag) { - case MKTAG(0xa9,'n','a','m'): - mov_parse_udta_string(pb, c->fc->title, sizeof(c->fc->title)); - break; - case MKTAG(0xa9,'w','r','t'): - mov_parse_udta_string(pb, c->fc->author, sizeof(c->fc->author)); - break; - case MKTAG(0xa9,'c','p','y'): - mov_parse_udta_string(pb, c->fc->copyright, sizeof(c->fc->copyright)); - break; - case MKTAG(0xa9,'i','n','f'): - mov_parse_udta_string(pb, c->fc->comment, sizeof(c->fc->comment)); - break; - default: - break; - } - - url_fseek(pb, next, SEEK_SET); - } - return 0; } @@ -1740,11 +1720,15 @@ static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('t','r','a','f'), mov_read_default }, { MKTAG('t','r','e','x'), mov_read_trex }, { MKTAG('t','r','u','n'), mov_read_trun }, -{ MKTAG('u','d','t','a'), mov_read_udta }, +{ MKTAG('u','d','t','a'), mov_read_default }, { MKTAG('w','a','v','e'), mov_read_wave }, { MKTAG('e','s','d','s'), mov_read_esds }, { MKTAG('w','i','d','e'), mov_read_wide }, /* place holder */ { MKTAG('c','m','o','v'), mov_read_cmov }, +{ MKTAG(0xa9,'n','a','m'), mov_read_udta_string }, +{ MKTAG(0xa9,'w','r','t'), mov_read_udta_string }, +{ MKTAG(0xa9,'c','p','y'), mov_read_udta_string }, +{ MKTAG(0xa9,'i','n','f'), mov_read_udta_string }, { 0, NULL } }; |