In mov muxer, write pixel aspect ratio tag in mov files.
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>
Thu, 8 Jul 2010 21:57:20 +0000 (21:57 +0000)
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>
Thu, 8 Jul 2010 21:57:20 +0000 (21:57 +0000)
Based on a patch by Daniel Kristjansson, danielk at cuymedia dot net

Originally committed as revision 24124 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/movenc.c

index c40186217947c74ca3b0f23213be494500d03e91..c0efa3a96d80de77f9e274459b5a4c2f08a3d109 100644 (file)
@@ -747,6 +747,19 @@ static int mov_write_subtitle_tag(ByteIOContext *pb, MOVTrack *track)
     return updateSize(pb, pos);
 }
 
+static int mov_write_pasp_tag(ByteIOContext *pb, MOVTrack *track)
+{
+    AVRational sar;
+    av_reduce(&sar.num, &sar.den, track->enc->sample_aspect_ratio.num,
+              track->enc->sample_aspect_ratio.den, INT_MAX);
+
+    put_be32(pb, 16);
+    put_tag(pb, "pasp");
+    put_be32(pb, track->enc->sample_aspect_ratio.num);
+    put_be32(pb, track->enc->sample_aspect_ratio.den);
+    return 16;
+}
+
 static int mov_write_video_tag(ByteIOContext *pb, MOVTrack *track)
 {
     int64_t pos = url_ftell(pb);
@@ -808,6 +821,12 @@ 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 &&
+        track->enc->sample_aspect_ratio.den != track->enc->sample_aspect_ratio.num) {
+        mov_write_pasp_tag(pb, track);
+    }
+
     return updateSize(pb, pos);
 }