diff options
author | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2009-02-12 09:15:36 +0000 |
---|---|---|
committer | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2009-02-12 09:15:36 +0000 |
commit | 6a460c36b65d783e7f1e15001c21a63c2890021e (patch) | |
tree | ec722344e72726d763e391e163912db4f8980ff1 /libavformat | |
parent | d5cce0a434294121adf970f162b26081b1c521b2 (diff) | |
download | ffmpeg-6a460c36b65d783e7f1e15001c21a63c2890021e.tar.gz |
write active picture height for d-10/imx in mov
Originally committed as revision 17178 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/movenc.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c index c46bcc207d..95b881aec2 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -69,6 +69,7 @@ typedef struct MOVIndex { uint8_t *vosData; MOVIentry *cluster; int audio_vbr; + int height; ///< active picture (w/o VBI) height for D-10/IMX } MOVTrack; typedef struct MOVContext { @@ -691,7 +692,7 @@ static int mov_write_video_tag(ByteIOContext *pb, MOVTrack *track) put_be32(pb, 0); /* Reserved */ } put_be16(pb, track->enc->width); /* Video width */ - put_be16(pb, track->enc->height); /* Video height */ + put_be16(pb, track->height); /* Video height */ put_be32(pb, 0x00480000); /* Horizontal resolution 72dpi */ put_be32(pb, 0x00480000); /* Vertical resolution 72dpi */ put_be32(pb, 0); /* Data size (= 0) */ @@ -1046,9 +1047,10 @@ static int mov_write_tkhd_tag(ByteIOContext *pb, MOVTrack *track, AVStream *st) if(track->enc->codec_type == CODEC_TYPE_VIDEO || track->enc->codec_type == CODEC_TYPE_SUBTITLE) { double sample_aspect_ratio = av_q2d(st->sample_aspect_ratio); - if(!sample_aspect_ratio) sample_aspect_ratio = 1; + 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->enc->height*0x10000); + put_be32(pb, track->height*0x10000); } else { put_be32(pb, 0); @@ -1654,6 +1656,16 @@ static int mov_write_header(AVFormatContext *s) return -1; } if(st->codec->codec_type == CODEC_TYPE_VIDEO){ + if (track->tag == MKTAG('m','x','3','p') || track->tag == MKTAG('m','x','3','n') || + track->tag == MKTAG('m','x','4','p') || track->tag == MKTAG('m','x','4','n') || + track->tag == MKTAG('m','x','5','p') || track->tag == MKTAG('m','x','5','n')) { + if (st->codec->width != 720 || (st->codec->height != 608 && st->codec->height != 512)) { + av_log(s, AV_LOG_ERROR, "D-10/IMX must use 720x608 or 720x512 video resolution\n"); + return -1; + } + track->height = track->tag>>24 == 'n' ? 486 : 576; + } else + track->height = st->codec->height; track->timescale = st->codec->time_base.den; av_set_pts_info(st, 64, 1, st->codec->time_base.den); if (track->mode == MODE_MOV && track->timescale > 100000) |