diff options
author | David Conrad <lessen42@gmail.com> | 2010-05-05 08:41:01 +0000 |
---|---|---|
committer | David Conrad <lessen42@gmail.com> | 2010-05-05 08:41:01 +0000 |
commit | 1cf9f6ed4f478aac59135b26c2fa7570030423bd (patch) | |
tree | 3dbc48d384cddf5af740d6c25eac579c6f0761d2 /libavformat | |
parent | e1954bb5ca27def0863ee6e4efd63275c8e1e2f4 (diff) | |
download | ffmpeg-1cf9f6ed4f478aac59135b26c2fa7570030423bd.tar.gz |
mov: Read nero chapters
Originally committed as revision 23020 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/mov.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c index 2a60c92b34..e37bcf5f57 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -219,6 +219,36 @@ static int mov_read_udta_string(MOVContext *c, ByteIOContext *pb, MOVAtom atom) return 0; } +static int mov_read_chpl(MOVContext *c, ByteIOContext *pb, MOVAtom atom) +{ + int64_t start; + int i, nb_chapters, str_len; + char str[256+1]; + + if ((atom.size -= 5) < 0) + return 0; + + get_be32(pb); // version + flags + get_be32(pb); // ??? + nb_chapters = get_byte(pb); + + for (i = 0; i < nb_chapters; i++) { + if (atom.size < 9) + return 0; + + start = get_be64(pb); + str_len = get_byte(pb); + + if ((atom.size -= 9+str_len) < 0) + return 0; + + get_buffer(pb, str, str_len); + str[str_len] = 0; + ff_new_chapter(c->fc, i, (AVRational){1,10000000}, start, AV_NOPTS_VALUE, str); + } + return 0; +} + static int mov_read_default(MOVContext *c, ByteIOContext *pb, MOVAtom atom) { int64_t total_size = 0; @@ -2166,6 +2196,7 @@ static int mov_read_elst(MOVContext *c, ByteIOContext *pb, MOVAtom atom) static const MOVParseTableEntry mov_default_parse_table[] = { { MKTAG('a','v','s','s'), mov_read_extradata }, +{ MKTAG('c','h','p','l'), mov_read_chpl }, { MKTAG('c','o','6','4'), mov_read_stco }, { MKTAG('c','t','t','s'), mov_read_ctts }, /* composition time to sample */ { MKTAG('d','i','n','f'), mov_read_default }, |