mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
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.
This commit is contained in:
parent
bb63475aec
commit
e49d21306a
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user