aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2016-03-19 15:41:30 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2016-03-26 21:52:47 +0100
commit50a639a62aa3fdef8a8a701e500acaf61a25c6ff (patch)
treee764b703d5e3da821d327aa01b65cfde3f6af16f
parentd6adcab84280f1cb35ad25e22c6acd5b01c50c08 (diff)
downloadffmpeg-50a639a62aa3fdef8a8a701e500acaf61a25c6ff.tar.gz
avcodec/mjpegenc_common: Store approximate aspect if exact cannot be stored
Fixes Ticket5244 Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit 068026b0f7845e0f1850094d974f60d181480d64) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavcodec/mjpegenc_common.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/libavcodec/mjpegenc_common.c b/libavcodec/mjpegenc_common.c
index 099d817d5f..7a6fe7468f 100644
--- a/libavcodec/mjpegenc_common.c
+++ b/libavcodec/mjpegenc_common.c
@@ -122,6 +122,16 @@ static void jpeg_put_comments(AVCodecContext *avctx, PutBitContext *p)
uint8_t *ptr;
if (avctx->sample_aspect_ratio.num > 0 && avctx->sample_aspect_ratio.den > 0) {
+ AVRational sar = avctx->sample_aspect_ratio;
+
+ if (sar.num > 65535 || sar.den > 65535) {
+ if (!av_reduce(&sar.num, &sar.den, avctx->sample_aspect_ratio.num, avctx->sample_aspect_ratio.den, 65535))
+ av_log(avctx, AV_LOG_WARNING,
+ "Cannot store exact aspect ratio %d:%d\n",
+ avctx->sample_aspect_ratio.num,
+ avctx->sample_aspect_ratio.den);
+ }
+
/* JFIF header */
put_marker(p, APP0);
put_bits(p, 16, 16);
@@ -131,8 +141,8 @@ static void jpeg_put_comments(AVCodecContext *avctx, PutBitContext *p)
* released revision. */
put_bits(p, 16, 0x0102);
put_bits(p, 8, 0); /* units type: 0 - aspect ratio */
- put_bits(p, 16, avctx->sample_aspect_ratio.num);
- put_bits(p, 16, avctx->sample_aspect_ratio.den);
+ put_bits(p, 16, sar.num);
+ put_bits(p, 16, sar.den);
put_bits(p, 8, 0); /* thumbnail width */
put_bits(p, 8, 0); /* thumbnail height */
}