mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-28 20:53:54 +02:00
tta: use correct frame_length calculation.
using a floating-point calculation is not necessary.
This commit is contained in:
parent
c6056d4004
commit
b5050539c9
@ -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 +
|
||||
|
Loading…
Reference in New Issue
Block a user