Mercurial > libavformat.hg
changeset 5974:0361768bfa73 libavformat
movenc: Write nero chapters
author | conrad |
---|---|
date | Wed, 21 Apr 2010 06:36:05 +0000 |
parents | 210e90a62044 |
children | 028ad8c9a6f6 |
files | movenc.c |
diffstat | 1 files changed, 29 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/movenc.c Tue Apr 20 21:23:49 2010 +0000 +++ b/movenc.c Wed Apr 21 06:36:05 2010 +0000 @@ -1513,6 +1513,32 @@ return updateSize(pb, pos); } +static int mov_write_chpl_tag(ByteIOContext *pb, AVFormatContext *s) +{ + int64_t pos = url_ftell(pb); + int i, nb_chapters = FFMIN(s->nb_chapters, 255); + + put_be32(pb, 0); // size + put_tag (pb, "chpl"); + put_be32(pb, 0x01000000); // version + flags + put_be32(pb, 0); // unknown + put_byte(pb, nb_chapters); + + for (i = 0; i < nb_chapters; i++) { + AVChapter *c = s->chapters[i]; + AVMetadataTag *t; + put_be64(pb, av_rescale_q(c->start, c->time_base, (AVRational){1,10000000})); + + if ((t = av_metadata_get(c->metadata, "title", NULL, 0))) { + int len = FFMIN(strlen(t->value), 255); + put_byte(pb, len); + put_buffer(pb, t->value, len); + } else + put_byte(pb, 0); + } + return updateSize(pb, pos); +} + static int mov_write_udta_tag(ByteIOContext *pb, MOVMuxContext *mov, AVFormatContext *s) { @@ -1551,6 +1577,9 @@ mov_write_meta_tag(pb_buf, mov, s); } + if (s->nb_chapters) + mov_write_chpl_tag(pb_buf, s); + if ((size = url_close_dyn_buf(pb_buf, &buf)) > 0) { put_be32(pb, size+8); put_tag(pb, "udta");