summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorReinhard Tartler <siretart@tauware.de>2010-05-19 07:58:17 +0000
committerReinhard Tartler <siretart@tauware.de>2010-05-19 07:58:17 +0000
commita03dcb9682142756894f0a97cf7a0dc7bae0f5ae (patch)
treef73f528f670a16c284e3f7fb46850a84ff80c66a /libavformat
parent26899578f1e000be990b0424fba6813402b7dc3e (diff)
mov: Read nero chapters
backport r23020 by conrad Originally committed as revision 23171 to svn://svn.ffmpeg.org/ffmpeg/branches/0.6
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/mov.c31
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 },