Commit e49d2130 authored by Justin Ruggles's avatar Justin Ruggles

alacdec: implement the 2-pass prediction type.

The reference encoder does not generate any streams using this, but the
reference decoder can handle it, so we should as well.
parent bb63475a
...@@ -452,24 +452,29 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data, ...@@ -452,24 +452,29 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data,
ricemodifier[ch] * alac->setinfo_rice_historymult / 4, ricemodifier[ch] * alac->setinfo_rice_historymult / 4,
(1 << alac->setinfo_rice_kmodifier) - 1); (1 << alac->setinfo_rice_kmodifier) - 1);
if (prediction_type[ch] == 0) { /* adaptive FIR filter */
/* adaptive fir */ if (prediction_type[ch] == 15) {
predictor_decompress_fir_adapt(alac->predicterror_buffer[ch], /* Prediction type 15 runs the adaptive FIR twice.
alac->outputsamples_buffer[ch], * The first pass uses the special-case coef_num = 31, while
outputsamples, * the second pass uses the coefs from the bitstream.
readsamplesize, *
predictor_coef_table[ch], * However, this prediction type is not currently used by the
predictor_coef_num[ch], * reference encoder.
prediction_quantitization[ch]);
} else {
av_log(avctx, AV_LOG_ERROR, "FIXME: unhandled prediction type: %i\n", prediction_type[ch]);
/* I think the only other prediction type (or perhaps this is
* just a boolean?) runs adaptive fir twice.. like:
* predictor_decompress_fir_adapt(predictor_error, tempout, ...)
* predictor_decompress_fir_adapt(predictor_error, outputsamples ...)
* little strange..
*/ */
predictor_decompress_fir_adapt(alac->predicterror_buffer[ch],
alac->predicterror_buffer[ch],
outputsamples, readsamplesize,
NULL, 31, 0);
} else if (prediction_type[ch] > 0) {
av_log(avctx, AV_LOG_WARNING, "unknown prediction type: %i\n",
prediction_type[ch]);
} }
predictor_decompress_fir_adapt(alac->predicterror_buffer[ch],
alac->outputsamples_buffer[ch],
outputsamples, readsamplesize,
predictor_coef_table[ch],
predictor_coef_num[ch],
prediction_quantitization[ch]);
} }
} else { } else {
/* not compressed, easy case */ /* not compressed, easy case */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment