Mercurial > libavcodec.hg
comparison mpegvideo_enc.c @ 12463:04e68eb1aab7 libavcodec
Check rc_buffer_size value using integer arithmetic
Using floating-point here can cause erroneous rejection of
parameters due to rounding errors leading to a slightly too
large result.
This fixes the mxf regression test with gcc 4.5 on x86_32.
author | mru |
---|---|
date | Tue, 07 Sep 2010 19:54:48 +0000 |
parents | b6cf19580e47 |
children | 077c67a3b86f |
comparison
equal
deleted
inserted
replaced
12462:ffb3668ff7af | 12463:04e68eb1aab7 |
---|---|
349 | 349 |
350 if(avctx->rc_max_rate && avctx->rc_max_rate == avctx->bit_rate && avctx->rc_max_rate != avctx->rc_min_rate){ | 350 if(avctx->rc_max_rate && avctx->rc_max_rate == avctx->bit_rate && avctx->rc_max_rate != avctx->rc_min_rate){ |
351 av_log(avctx, AV_LOG_INFO, "impossible bitrate constraints, this will fail\n"); | 351 av_log(avctx, AV_LOG_INFO, "impossible bitrate constraints, this will fail\n"); |
352 } | 352 } |
353 | 353 |
354 if(avctx->rc_buffer_size && avctx->bit_rate*av_q2d(avctx->time_base) > avctx->rc_buffer_size){ | 354 if(avctx->rc_buffer_size && avctx->bit_rate*(int64_t)avctx->time_base.num > avctx->rc_buffer_size * (int64_t)avctx->time_base.den){ |
355 av_log(avctx, AV_LOG_ERROR, "VBV buffer too small for bitrate\n"); | 355 av_log(avctx, AV_LOG_ERROR, "VBV buffer too small for bitrate\n"); |
356 return -1; | 356 return -1; |
357 } | 357 } |
358 | 358 |
359 if(avctx->bit_rate*av_q2d(avctx->time_base) > avctx->bit_rate_tolerance){ | 359 if(avctx->bit_rate*av_q2d(avctx->time_base) > avctx->bit_rate_tolerance){ |