[FFmpeg-devel] [PATCH] mov tkhd' width and height usage
Benjamin Larsson
banan
Thu Feb 24 10:03:46 CET 2011
>
> >From 9b3255389426eb1e600a1783ea5040884c18d07d Mon Sep 17 00:00:00 2001
> From: Maksym Veremeyenko <verem at m1stereo.tv>
> Date: Tue, 15 Feb 2011 12:43:35 +0200
> Subject: [PATCH 1/3] use tapt atom for sample aspect ratio
>
> ---
> libavformat/movenc.c | 35 +++++++++++++++++++++++++++++++++++
> 1 files changed, 35 insertions(+), 0 deletions(-)
>
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index 5e6e3a6..e1dabe3 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -1215,11 +1215,16 @@ static int mov_write_tkhd_tag(ByteIOContext *pb, MOVTrack *track, AVStream *st)
> /* Track width and height, for visual only */
> if(st && (track->enc->codec_type == AVMEDIA_TYPE_VIDEO ||
> track->enc->codec_type == AVMEDIA_TYPE_SUBTITLE)) {
> + if(track->mode == MODE_MOV) {
> + put_be32(pb, track->enc->width << 16);
> + put_be32(pb, track->enc->height << 16);
> + } else {
> double sample_aspect_ratio = av_q2d(st->sample_aspect_ratio);
> if(!sample_aspect_ratio || track->height != track->enc->height)
> sample_aspect_ratio = 1;
> put_be32(pb, sample_aspect_ratio * track->enc->width*0x10000);
> put_be32(pb, track->height*0x10000);
> + }
> }
Ok
> else {
> put_be32(pb, 0);
> @@ -1228,6 +1233,31 @@ static int mov_write_tkhd_tag(ByteIOContext *pb, MOVTrack *track, AVStream *st)
> return 0x5c;
> }
>
> +static int mov_write_tapt_tag(ByteIOContext *pb, MOVTrack *track)
> +{
> + int32_t width = av_rescale(track->enc->sample_aspect_ratio.num, track->enc->width,
> + track->enc->sample_aspect_ratio.den);
> +
> + int64_t pos = url_ftell(pb);
> +
> + put_be32(pb, 0); /* size */
> + put_tag(pb, "tapt");
> +
> + put_be32(pb, 20);
> + put_tag(pb, "clef");
> + put_be32(pb, 0);
> + put_be32(pb, width << 16);
> + put_be32(pb, track->enc->height << 16);
> +
> + put_be32(pb, 20);
> + put_tag(pb, "enof");
> + put_be32(pb, 0);
> + put_be32(pb, track->enc->width << 16);
> + put_be32(pb, track->enc->height << 16);
> +
> + return updateSize(pb, pos);
> +};
> +
Ok
> // This box seems important for the psp playback ... without it the movie seems to hang
> static int mov_write_edts_tag(ByteIOContext *pb, MOVTrack *track)
> {
> @@ -1310,6 +1340,11 @@ static int mov_write_trak_tag(ByteIOContext *pb, MOVTrack *track, AVStream *st)
> mov_write_uuid_tag_psp(pb,track); // PSP Movies require this uuid box
> if (track->tag == MKTAG('r','t','p',' '))
> mov_write_udta_sdp(pb, track->rtp_ctx->streams[0]->codec, track->trackID);
> + if (track->enc->codec_type == AVMEDIA_TYPE_VIDEO) {
> + double sample_aspect_ratio = av_q2d(st->sample_aspect_ratio);
> + if (0.0 != sample_aspect_ratio && 1.0 != sample_aspect_ratio)
> + mov_write_tapt_tag(pb, track);
> + };
I'm quite sure this in not valid for mp4 so this needs to be
if(track->enc->codec_type == AVMEDIA_TYPE_VIDEO &&
track->mode == MODE_MOV) {
otherwise Ok
> return updateSize(pb, pos);
> }
>
> -- 1.7.4
> 0002-reindent-after-tapt-patch.patch
>
>
> >From 29285aae9d38ef356cc216f1ca11405974a8d28e Mon Sep 17 00:00:00 2001
> From: Maksym Veremeyenko <verem at m1stereo.tv>
> Date: Tue, 15 Feb 2011 12:49:17 +0200
> Subject: [PATCH 2/3] reindent after tapt patch
>
> ---
> libavformat/movenc.c | 10 +++++-----
> 1 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index e1dabe3..80af07b 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -1219,11 +1219,11 @@ static int mov_write_tkhd_tag(ByteIOContext *pb, MOVTrack *track, AVStream *st)
> put_be32(pb, track->enc->width << 16);
> put_be32(pb, track->enc->height << 16);
> } else {
> - double sample_aspect_ratio = av_q2d(st->sample_aspect_ratio);
> - if(!sample_aspect_ratio || track->height != track->enc->height)
> - sample_aspect_ratio = 1;
> - put_be32(pb, sample_aspect_ratio * track->enc->width*0x10000);
> - put_be32(pb, track->height*0x10000);
> + double sample_aspect_ratio = av_q2d(st->sample_aspect_ratio);
> + if(!sample_aspect_ratio || track->height != track->enc->height)
> + sample_aspect_ratio = 1;
> + put_be32(pb, sample_aspect_ratio * track->enc->width*0x10000);
> + put_be32(pb, track->height*0x10000);
> }
> }
> else {
> -- 1.7.4
Ok
> 0003-store-pasp-atom-for-all-types-of-quicktime-movie.patch
>
>
> >From 011c1ee074636da2af3abd22d7a5954df6ed0b52 Mon Sep 17 00:00:00 2001
> From: Maksym Veremeyenko <verem at m1stereo.tv>
> Date: Tue, 15 Feb 2011 12:44:08 +0200
> Subject: [PATCH 3/3] store pasp atom for all types of quicktime movie
>
> ---
> libavformat/movenc.c | 3 +--
> 1 files changed, 1 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index 80af07b..f06c652 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -839,8 +839,7 @@ static int mov_write_video_tag(ByteIOContext *pb, MOVTrack *track)
> } else if(track->vosLen > 0)
> mov_write_glbl_tag(pb, track);
>
> - if (track->mode == MODE_MOV &&
> - track->enc->sample_aspect_ratio.den && track->enc->sample_aspect_ratio.num &&
> + if (track->enc->sample_aspect_ratio.den && track->enc->sample_aspect_ratio.num &&
> track->enc->sample_aspect_ratio.den != track->enc->sample_aspect_ratio.num) {
> mov_write_pasp_tag(pb, track);
> }
> -- 1.7.4
Ok
MvH
Benjamin Larsson
More information about the ffmpeg-devel
mailing list