summaryrefslogtreecommitdiff
path: root/libavformat/movenc.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-03-04 14:25:58 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-03-11 18:08:31 +0100
commit707ad03096b29de53f1a27c128891a81a7d6d7c2 (patch)
tree268da8de2fce3d69020bff8539d7c0b2294d8605 /libavformat/movenc.c
parenta909666d7ce110b9394a42df5ac817f322141c32 (diff)
downloadffmpeg-707ad03096b29de53f1a27c128891a81a7d6d7c2.tar.gz
avformat/movenc: Simplify creating chapter track extradata
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavformat/movenc.c')
-rw-r--r--libavformat/movenc.c79
1 files changed, 26 insertions, 53 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 4c868919ae..2a6cc1bc6a 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -6238,12 +6238,32 @@ fail:
// as samples, and a tref pointing from the other tracks to the chapter one.
static int mov_create_chapter_track(AVFormatContext *s, int tracknum)
{
- AVIOContext *pb;
-
+ static const uint8_t stub_header[] = {
+ // TextSampleEntry
+ 0x00, 0x00, 0x00, 0x01, // displayFlags
+ 0x00, 0x00, // horizontal + vertical justification
+ 0x00, 0x00, 0x00, 0x00, // bgColourRed/Green/Blue/Alpha
+ // BoxRecord
+ 0x00, 0x00, 0x00, 0x00, // defTextBoxTop/Left
+ 0x00, 0x00, 0x00, 0x00, // defTextBoxBottom/Right
+ // StyleRecord
+ 0x00, 0x00, 0x00, 0x00, // startChar + endChar
+ 0x00, 0x01, // fontID
+ 0x00, 0x00, // fontStyleFlags + fontSize
+ 0x00, 0x00, 0x00, 0x00, // fgColourRed/Green/Blue/Alpha
+ // FontTableBox
+ 0x00, 0x00, 0x00, 0x0D, // box size
+ 'f', 't', 'a', 'b', // box atom name
+ 0x00, 0x01, // entry count
+ // FontRecord
+ 0x00, 0x01, // font ID
+ 0x00, // font name length
+ };
MOVMuxContext *mov = s->priv_data;
MOVTrack *track = &mov->tracks[tracknum];
AVPacket *pkt = mov->pkt;
int i, len;
+ int ret;
track->mode = mov->mode;
track->tag = MKTAG('t','e','x','t');
@@ -6252,57 +6272,10 @@ static int mov_create_chapter_track(AVFormatContext *s, int tracknum)
if (!track->par)
return AVERROR(ENOMEM);
track->par->codec_type = AVMEDIA_TYPE_SUBTITLE;
-#if 0
- // These properties are required to make QT recognize the chapter track
- uint8_t chapter_properties[43] = { 0, 0, 0, 0, 0, 0, 0, 1, };
- if (ff_alloc_extradata(track->par, sizeof(chapter_properties)))
- return AVERROR(ENOMEM);
- memcpy(track->par->extradata, chapter_properties, sizeof(chapter_properties));
-#else
- if (avio_open_dyn_buf(&pb) >= 0) {
- int size;
- uint8_t *buf;
-
- /* Stub header (usually for Quicktime chapter track) */
- // TextSampleEntry
- avio_wb32(pb, 0x01); // displayFlags
- avio_w8(pb, 0x00); // horizontal justification
- avio_w8(pb, 0x00); // vertical justification
- avio_w8(pb, 0x00); // bgColourRed
- avio_w8(pb, 0x00); // bgColourGreen
- avio_w8(pb, 0x00); // bgColourBlue
- avio_w8(pb, 0x00); // bgColourAlpha
- // BoxRecord
- avio_wb16(pb, 0x00); // defTextBoxTop
- avio_wb16(pb, 0x00); // defTextBoxLeft
- avio_wb16(pb, 0x00); // defTextBoxBottom
- avio_wb16(pb, 0x00); // defTextBoxRight
- // StyleRecord
- avio_wb16(pb, 0x00); // startChar
- avio_wb16(pb, 0x00); // endChar
- avio_wb16(pb, 0x01); // fontID
- avio_w8(pb, 0x00); // fontStyleFlags
- avio_w8(pb, 0x00); // fontSize
- avio_w8(pb, 0x00); // fgColourRed
- avio_w8(pb, 0x00); // fgColourGreen
- avio_w8(pb, 0x00); // fgColourBlue
- avio_w8(pb, 0x00); // fgColourAlpha
- // FontTableBox
- avio_wb32(pb, 0x0D); // box size
- ffio_wfourcc(pb, "ftab"); // box atom name
- avio_wb16(pb, 0x01); // entry count
- // FontRecord
- avio_wb16(pb, 0x01); // font ID
- avio_w8(pb, 0x00); // font name length
-
- if ((size = avio_close_dyn_buf(pb, &buf)) > 0) {
- track->par->extradata = buf;
- track->par->extradata_size = size;
- } else {
- av_freep(&buf);
- }
- }
-#endif
+ ret = ff_alloc_extradata(track->par, sizeof(stub_header));
+ if (ret < 0)
+ return ret;
+ memcpy(track->par->extradata, stub_header, sizeof(stub_header));
pkt->stream_index = tracknum;
pkt->flags = AV_PKT_FLAG_KEY;