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);