From: Justin Ruggles Date: Sun, 23 Oct 2011 20:25:02 +0000 (-0400) Subject: tta: use correct frame_length calculation. X-Git-Tag: v0.8b1~928 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b5050539c9e78186fc090a5c8b6b767590484c59;p=platform%2Fupstream%2Flibav.git tta: use correct frame_length calculation. using a floating-point calculation is not necessary. --- diff --git a/libavcodec/tta.c b/libavcodec/tta.c index b7b20e4..ddfcb2e 100644 --- a/libavcodec/tta.c +++ b/libavcodec/tta.c @@ -217,10 +217,6 @@ static av_cold int tta_decode_init(AVCodecContext * avctx) avctx->bits_per_coded_sample = get_bits(&s->gb, 16); s->bps = (avctx->bits_per_coded_sample + 7) / 8; avctx->sample_rate = get_bits_long(&s->gb, 32); - if(avctx->sample_rate > 1000000){ //prevent FRAME_TIME * avctx->sample_rate from overflowing and sanity check - av_log(avctx, AV_LOG_ERROR, "sample_rate too large\n"); - return -1; - } s->data_length = get_bits_long(&s->gb, 32); skip_bits(&s->gb, 32); // CRC32 of header @@ -238,9 +234,12 @@ static av_cold int tta_decode_init(AVCodecContext * avctx) return AVERROR_INVALIDDATA; } - // FIXME: horribly broken, but directly from reference source -#define FRAME_TIME 1.04489795918367346939 - s->frame_length = (int)(FRAME_TIME * avctx->sample_rate); + // prevent overflow + if (avctx->sample_rate > 0x7FFFFF) { + av_log(avctx, AV_LOG_ERROR, "sample_rate too large\n"); + return AVERROR(EINVAL); + } + s->frame_length = 256 * avctx->sample_rate / 245; s->last_frame_length = s->data_length % s->frame_length; s->total_frames = s->data_length / s->frame_length +