mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-04-01 22:49:21 +00:00
avformat/movenc: Simplify creating chapter track extradata
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
a909666d7c
commit
707ad03096
@ -6238,12 +6238,32 @@ fail:
|
|||||||
// as samples, and a tref pointing from the other tracks to the chapter one.
|
// as samples, and a tref pointing from the other tracks to the chapter one.
|
||||||
static int mov_create_chapter_track(AVFormatContext *s, int tracknum)
|
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;
|
MOVMuxContext *mov = s->priv_data;
|
||||||
MOVTrack *track = &mov->tracks[tracknum];
|
MOVTrack *track = &mov->tracks[tracknum];
|
||||||
AVPacket *pkt = mov->pkt;
|
AVPacket *pkt = mov->pkt;
|
||||||
int i, len;
|
int i, len;
|
||||||
|
int ret;
|
||||||
|
|
||||||
track->mode = mov->mode;
|
track->mode = mov->mode;
|
||||||
track->tag = MKTAG('t','e','x','t');
|
track->tag = MKTAG('t','e','x','t');
|
||||||
@ -6252,57 +6272,10 @@ static int mov_create_chapter_track(AVFormatContext *s, int tracknum)
|
|||||||
if (!track->par)
|
if (!track->par)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
track->par->codec_type = AVMEDIA_TYPE_SUBTITLE;
|
track->par->codec_type = AVMEDIA_TYPE_SUBTITLE;
|
||||||
#if 0
|
ret = ff_alloc_extradata(track->par, sizeof(stub_header));
|
||||||
// These properties are required to make QT recognize the chapter track
|
if (ret < 0)
|
||||||
uint8_t chapter_properties[43] = { 0, 0, 0, 0, 0, 0, 0, 1, };
|
return ret;
|
||||||
if (ff_alloc_extradata(track->par, sizeof(chapter_properties)))
|
memcpy(track->par->extradata, stub_header, sizeof(stub_header));
|
||||||
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
|
|
||||||
|
|
||||||
pkt->stream_index = tracknum;
|
pkt->stream_index = tracknum;
|
||||||
pkt->flags = AV_PKT_FLAG_KEY;
|
pkt->flags = AV_PKT_FLAG_KEY;
|
||||||
|
Loading…
Reference in New Issue
Block a user