mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-28 12:32:17 +02:00
simplify metadata reading
Originally committed as revision 15830 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
8f569ed08f
commit
86b0affd08
@ -1366,46 +1366,26 @@ static int mov_read_trak(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
|
|||||||
return 0;
|
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 */;
|
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_be16(pb); /* skip language */
|
||||||
get_buffer(pb, str, FFMIN(size, str_size));
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1740,11 +1720,15 @@ static const MOVParseTableEntry mov_default_parse_table[] = {
|
|||||||
{ MKTAG('t','r','a','f'), mov_read_default },
|
{ MKTAG('t','r','a','f'), mov_read_default },
|
||||||
{ MKTAG('t','r','e','x'), mov_read_trex },
|
{ MKTAG('t','r','e','x'), mov_read_trex },
|
||||||
{ MKTAG('t','r','u','n'), mov_read_trun },
|
{ 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('w','a','v','e'), mov_read_wave },
|
||||||
{ MKTAG('e','s','d','s'), mov_read_esds },
|
{ MKTAG('e','s','d','s'), mov_read_esds },
|
||||||
{ MKTAG('w','i','d','e'), mov_read_wide }, /* place holder */
|
{ MKTAG('w','i','d','e'), mov_read_wide }, /* place holder */
|
||||||
{ MKTAG('c','m','o','v'), mov_read_cmov },
|
{ 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 }
|
{ 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user