Mercurial > libavformat.hg
comparison movenc.c @ 5974:0361768bfa73 libavformat
movenc: Write nero chapters
author | conrad |
---|---|
date | Wed, 21 Apr 2010 06:36:05 +0000 |
parents | 8b59caee931c |
children | 391e3ca10474 |
comparison
equal
deleted
inserted
replaced
5973:210e90a62044 | 5974:0361768bfa73 |
---|---|
1511 put_byte(pb, atoi(t->value)); | 1511 put_byte(pb, atoi(t->value)); |
1512 } | 1512 } |
1513 return updateSize(pb, pos); | 1513 return updateSize(pb, pos); |
1514 } | 1514 } |
1515 | 1515 |
1516 static int mov_write_chpl_tag(ByteIOContext *pb, AVFormatContext *s) | |
1517 { | |
1518 int64_t pos = url_ftell(pb); | |
1519 int i, nb_chapters = FFMIN(s->nb_chapters, 255); | |
1520 | |
1521 put_be32(pb, 0); // size | |
1522 put_tag (pb, "chpl"); | |
1523 put_be32(pb, 0x01000000); // version + flags | |
1524 put_be32(pb, 0); // unknown | |
1525 put_byte(pb, nb_chapters); | |
1526 | |
1527 for (i = 0; i < nb_chapters; i++) { | |
1528 AVChapter *c = s->chapters[i]; | |
1529 AVMetadataTag *t; | |
1530 put_be64(pb, av_rescale_q(c->start, c->time_base, (AVRational){1,10000000})); | |
1531 | |
1532 if ((t = av_metadata_get(c->metadata, "title", NULL, 0))) { | |
1533 int len = FFMIN(strlen(t->value), 255); | |
1534 put_byte(pb, len); | |
1535 put_buffer(pb, t->value, len); | |
1536 } else | |
1537 put_byte(pb, 0); | |
1538 } | |
1539 return updateSize(pb, pos); | |
1540 } | |
1541 | |
1516 static int mov_write_udta_tag(ByteIOContext *pb, MOVMuxContext *mov, | 1542 static int mov_write_udta_tag(ByteIOContext *pb, MOVMuxContext *mov, |
1517 AVFormatContext *s) | 1543 AVFormatContext *s) |
1518 { | 1544 { |
1519 ByteIOContext *pb_buf; | 1545 ByteIOContext *pb_buf; |
1520 int i, ret, size; | 1546 int i, ret, size; |
1548 mov_write_string_metadata(s, pb_buf, "\251cpy", "copyright" , 0); | 1574 mov_write_string_metadata(s, pb_buf, "\251cpy", "copyright" , 0); |
1549 } else { | 1575 } else { |
1550 /* iTunes meta data */ | 1576 /* iTunes meta data */ |
1551 mov_write_meta_tag(pb_buf, mov, s); | 1577 mov_write_meta_tag(pb_buf, mov, s); |
1552 } | 1578 } |
1579 | |
1580 if (s->nb_chapters) | |
1581 mov_write_chpl_tag(pb_buf, s); | |
1553 | 1582 |
1554 if ((size = url_close_dyn_buf(pb_buf, &buf)) > 0) { | 1583 if ((size = url_close_dyn_buf(pb_buf, &buf)) > 0) { |
1555 put_be32(pb, size+8); | 1584 put_be32(pb, size+8); |
1556 put_tag(pb, "udta"); | 1585 put_tag(pb, "udta"); |
1557 put_buffer(pb, buf, size); | 1586 put_buffer(pb, buf, size); |