From 14bc5704422415fddf1db5f5ae8e105183e0b582 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Fri, 29 May 2015 12:36:55 +0200 Subject: [PATCH] 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 --- libavformat/movenc.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 6a4e16a7277be..8b0a57995ec78 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 {