[FFmpeg-devel] [PATCH] movenc: Fix muxing of Apple Quicktime chapters.
Yusuke Nakamura
muken.the.vfrmaniac at gmail.com
Mon May 14 00:30:25 CEST 2012
2012/5/14 Philip Langdale <philipl at overt.org>
> There is basic support for muxing chapter information into the
> Apple Quicktime format already, but there are two errors which
> prevent correct detection on the player side.
>
> 1) A special apple 'text' atom needs to be included inside the
> gmhd atom.
>
> 2) The *different* 'text' atom inside the 'stsd' atom needs a
> proper header.
>
> With these changes, the chapters are now picked up by Apple
> players and reported correctly by tools like mediainfo and mp4chaps.
> ---
> libavformat/movenc.c | 45 +++++++++++++++++++++++++++++++++++++++++++--
> 1 files changed, 43 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index 8dc6ada..e35cf46 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -1002,6 +1002,27 @@ static int mov_write_subtitle_tag(AVIOContext *pb,
> MOVTrack *track)
>
> if (track->enc->extradata_size)
> avio_write(pb, track->enc->extradata, track->enc->extradata_size);
> + else {
> + // Stub header (usually for Quicktime chapter track)
> + avio_wb32(pb, 0x01); // displayFlags
> + avio_wb32(pb, 0x01); // text justification
> + avio_wb16(pb, 0x00); // bgColourRed
> + avio_wb16(pb, 0x00); // bgColourGreen
> + avio_wb16(pb, 0x00); // bgColourBlue
> + avio_wb16(pb, 0x00); // defTextBoxTop
> + avio_wb16(pb, 0x00); // defTextBoxLeft
> + avio_wb16(pb, 0x00); // defTextBoxBottom
> + avio_wb16(pb, 0x00); // defTextBoxRight
> + avio_wb32(pb, 0x00); // Reserved
> + avio_wb32(pb, 0x00); // Reserved
> + avio_wb16(pb, 0x00); // fontNumber
> + avio_wb16(pb, 0x00); // fontFace
> + avio_w8(pb, 0x00); // Reserved
> + avio_wb16(pb, 0x00); // Reserved
> + avio_wb16(pb, 0x00); // foreColourRed
> + avio_wb16(pb, 0x00); // foreColourGreen
> + avio_wb16(pb, 0x00); // foreColourBlue
> + }
>
> return update_size(pb, pos);
> }
> @@ -1260,7 +1281,7 @@ static int mov_write_nmhd_tag(AVIOContext *pb)
>
> static int mov_write_gmhd_tag(AVIOContext *pb)
> {
> - avio_wb32(pb, 0x20); /* size */
> + avio_wb32(pb, 0x4C); /* size */
> ffio_wfourcc(pb, "gmhd");
> avio_wb32(pb, 0x18); /* gmin size */
> ffio_wfourcc(pb, "gmin");/* generic media info */
> @@ -1271,7 +1292,27 @@ static int mov_write_gmhd_tag(AVIOContext *pb)
> avio_wb16(pb, 0x8000); /* opColor (b?) */
> avio_wb16(pb, 0); /* balance */
> avio_wb16(pb, 0); /* reserved */
> - return 0x20;
> +
> + /*
> + * This special text atom is required for
> + * Apple Quicktime chapters. The contents
> + * don't appear to be documented, so the
> + * bytes are copied verbatim.
> + */
> + avio_wb32(pb, 0x2C); /* size */
> + ffio_wfourcc(pb, "text");
> + avio_wb16(pb, 0x01);
> + avio_wb32(pb, 0x00);
> + avio_wb32(pb, 0x00);
> + avio_wb32(pb, 0x00);
> + avio_wb32(pb, 0x01);
> + avio_wb32(pb, 0x00);
> + avio_wb32(pb, 0x00);
> + avio_wb32(pb, 0x00);
> + avio_wb32(pb, 0x00004000);
> + avio_wb16(pb, 0x0000);
> +
> + return 0x4C;
> }
>
> static int mov_write_smhd_tag(AVIOContext *pb)
> --
> 1.7.5.4
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
avio_w8(pb, 0x00) seems wrong.
This field doesn't exist in any MOV files created by QuickTime.
I think qtff.pdf has typo about it.
See Movies.h, MacTypes.h and TextEdit.h.
More information about the ffmpeg-devel
mailing list