[FFmpeg-cvslog] avformat/movenc: avoid floats in width/height/aspect ratio computations

Michael Niedermayer git at videolan.org
Fri May 29 12:53:14 CEST 2015


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Fri May 29 12:36:55 2015 +0200| [14bc5704422415fddf1db5f5ae8e105183e0b582] | committer: Michael Niedermayer

avformat/movenc: avoid floats in width/height/aspect ratio computations

This avoids the possibility for rounding/precision differences between platforms

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=14bc5704422415fddf1db5f5ae8e105183e0b582
---

 libavformat/movenc.c |   10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 6a4e16a..8b0a579 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -2368,10 +2368,12 @@ static int mov_write_tkhd_tag(AVIOContext *pb, MOVMuxContext *mov,
             avio_wb32(pb, track->enc->width << 16);
             avio_wb32(pb, track->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;
-            avio_wb32(pb, sample_aspect_ratio * track->enc->width * 0x10000);
+            int64_t track_width_1616 = av_rescale(st->sample_aspect_ratio.num,
+                                                  track->enc->width * 0x10000LL,
+                                                  st->sample_aspect_ratio.den);
+            if (!track_width_1616 || track->height != track->enc->height)
+                track_width_1616 = track->enc->width * 0x10000;
+            avio_wb32(pb, track_width_1616);
             avio_wb32(pb, track->height * 0x10000);
         }
     } else {



More information about the ffmpeg-cvslog mailing list