imc: reject files with unfathomable sampling rates

With huge sampling rates, the table derivation method does not converge fast
enough. While fixing it using e.g. Newton-Rhapson-like methods (the curve is
nicely convex) is possible, it is much simpler to reject these cases.

The value of 96000 was arbitrarily chosen as a realistic value, though
1000000 would still work and converge.

Fixes ticket #3868.

Suggested-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Christophe Gisquet 2014-08-21 12:21:07 +02:00 committed by Michael Niedermayer
parent b09ea25fec
commit 4728cdd880
1 changed files with 8 additions and 0 deletions

View File

@ -180,6 +180,14 @@ static av_cold int imc_decode_init(AVCodecContext *avctx)
IMCContext *q = avctx->priv_data;
double r1, r2;
if (avctx->codec_id == AV_CODEC_ID_IAC && avctx->sample_rate > 96000) {
av_log(avctx, AV_LOG_ERROR,
"Strange sample rate of %i, file likely corrupt or "
"needing a new table derivation method.\n",
avctx->sample_rate);
return AVERROR_PATCHWELCOME;
}
if (avctx->codec_id == AV_CODEC_ID_IMC)
avctx->channels = 1;