alac: cosmetics: rename some ALACContext parameters
This commit is contained in:
parent
2ac1737583
commit
836e8b9ba0
@ -37,7 +37,7 @@
|
||||
* 8bit sample size
|
||||
* 8bit history mult (40)
|
||||
* 8bit initial history (14)
|
||||
* 8bit kmodifier (10)
|
||||
* 8bit rice param limit (10)
|
||||
* 8bit channels
|
||||
* 16bit maxRun (255)
|
||||
* 32bit max coded frame size (0 means unknown)
|
||||
@ -61,20 +61,18 @@ typedef struct {
|
||||
AVFrame frame;
|
||||
GetBitContext gb;
|
||||
|
||||
int numchannels;
|
||||
int channels;
|
||||
|
||||
/* buffers */
|
||||
int32_t *predicterror_buffer[MAX_CHANNELS];
|
||||
|
||||
int32_t *outputsamples_buffer[MAX_CHANNELS];
|
||||
|
||||
int32_t *predict_error_buffer[MAX_CHANNELS];
|
||||
int32_t *output_samples_buffer[MAX_CHANNELS];
|
||||
int32_t *extra_bits_buffer[MAX_CHANNELS];
|
||||
|
||||
uint32_t setinfo_max_samples_per_frame;
|
||||
uint8_t setinfo_sample_size;
|
||||
uint8_t setinfo_rice_historymult;
|
||||
uint8_t setinfo_rice_initialhistory;
|
||||
uint8_t setinfo_rice_kmodifier;
|
||||
uint32_t max_samples_per_frame;
|
||||
uint8_t sample_size;
|
||||
uint8_t rice_history_mult;
|
||||
uint8_t rice_initial_history;
|
||||
uint8_t rice_limit;
|
||||
|
||||
int extra_bits; /**< number of extra bits beyond 16-bit */
|
||||
} ALACContext;
|
||||
@ -109,13 +107,13 @@ static void bastardized_rice_decompress(ALACContext *alac,
|
||||
int32_t *output_buffer,
|
||||
int output_size,
|
||||
int readsamplesize,
|
||||
int rice_initialhistory,
|
||||
int rice_kmodifier,
|
||||
int rice_historymult,
|
||||
int rice_initial_history,
|
||||
int rice_limit,
|
||||
int rice_history_mult,
|
||||
int rice_kmodifier_mask)
|
||||
{
|
||||
int output_count;
|
||||
unsigned int history = rice_initialhistory;
|
||||
unsigned int history = rice_initial_history;
|
||||
int sign_modifier = 0;
|
||||
|
||||
for (output_count = 0; output_count < output_size; output_count++) {
|
||||
@ -128,7 +126,7 @@ static void bastardized_rice_decompress(ALACContext *alac,
|
||||
|
||||
/* read k, that is bits as is */
|
||||
k = av_log2((history >> 9) + 3);
|
||||
x= decode_scalar(&alac->gb, k, rice_kmodifier, readsamplesize);
|
||||
x= decode_scalar(&alac->gb, k, rice_limit, readsamplesize);
|
||||
|
||||
x_modified = sign_modifier + x;
|
||||
final_val = (x_modified + 1) / 2;
|
||||
@ -139,8 +137,8 @@ static void bastardized_rice_decompress(ALACContext *alac,
|
||||
sign_modifier = 0;
|
||||
|
||||
/* now update the history */
|
||||
history += x_modified * rice_historymult
|
||||
- ((history * rice_historymult) >> 9);
|
||||
history += x_modified * rice_history_mult -
|
||||
((history * rice_history_mult) >> 9);
|
||||
|
||||
if (x_modified > 0xffff)
|
||||
history = 0xffff;
|
||||
@ -154,7 +152,7 @@ static void bastardized_rice_decompress(ALACContext *alac,
|
||||
|
||||
k = 7 - av_log2(history) + ((history + 16) >> 6 /* / 64 */);
|
||||
|
||||
block_size= decode_scalar(&alac->gb, k, rice_kmodifier, 16);
|
||||
block_size = decode_scalar(&alac->gb, k, rice_limit, 16);
|
||||
|
||||
if (block_size > 0) {
|
||||
if(block_size >= output_size - output_count){
|
||||
@ -377,12 +375,13 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data,
|
||||
if (hassize) {
|
||||
/* now read the number of samples as a 32bit integer */
|
||||
outputsamples = get_bits_long(&alac->gb, 32);
|
||||
if(outputsamples > alac->setinfo_max_samples_per_frame){
|
||||
av_log(avctx, AV_LOG_ERROR, "outputsamples %d > %d\n", outputsamples, alac->setinfo_max_samples_per_frame);
|
||||
if (outputsamples > alac->max_samples_per_frame) {
|
||||
av_log(avctx, AV_LOG_ERROR, "outputsamples %d > %d\n",
|
||||
outputsamples, alac->max_samples_per_frame);
|
||||
return -1;
|
||||
}
|
||||
} else
|
||||
outputsamples = alac->setinfo_max_samples_per_frame;
|
||||
outputsamples = alac->max_samples_per_frame;
|
||||
|
||||
/* get output buffer */
|
||||
if (outputsamples > INT32_MAX) {
|
||||
@ -395,7 +394,7 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data,
|
||||
return ret;
|
||||
}
|
||||
|
||||
readsamplesize = alac->setinfo_sample_size - alac->extra_bits + channels - 1;
|
||||
readsamplesize = alac->sample_size - alac->extra_bits + channels - 1;
|
||||
if (readsamplesize > MIN_CACHE_BITS) {
|
||||
av_log(avctx, AV_LOG_ERROR, "readsamplesize too big (%d)\n", readsamplesize);
|
||||
return -1;
|
||||
@ -432,13 +431,13 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data,
|
||||
}
|
||||
for (ch = 0; ch < channels; ch++) {
|
||||
bastardized_rice_decompress(alac,
|
||||
alac->predicterror_buffer[ch],
|
||||
alac->predict_error_buffer[ch],
|
||||
outputsamples,
|
||||
readsamplesize,
|
||||
alac->setinfo_rice_initialhistory,
|
||||
alac->setinfo_rice_kmodifier,
|
||||
ricemodifier[ch] * alac->setinfo_rice_historymult / 4,
|
||||
(1 << alac->setinfo_rice_kmodifier) - 1);
|
||||
alac->rice_initial_history,
|
||||
alac->rice_limit,
|
||||
ricemodifier[ch] * alac->rice_history_mult / 4,
|
||||
(1 << alac->rice_limit) - 1);
|
||||
|
||||
/* adaptive FIR filter */
|
||||
if (prediction_type[ch] == 15) {
|
||||
@ -449,16 +448,16 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data,
|
||||
* However, this prediction type is not currently used by the
|
||||
* reference encoder.
|
||||
*/
|
||||
predictor_decompress_fir_adapt(alac->predicterror_buffer[ch],
|
||||
alac->predicterror_buffer[ch],
|
||||
predictor_decompress_fir_adapt(alac->predict_error_buffer[ch],
|
||||
alac->predict_error_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],
|
||||
predictor_decompress_fir_adapt(alac->predict_error_buffer[ch],
|
||||
alac->output_samples_buffer[ch],
|
||||
outputsamples, readsamplesize,
|
||||
predictor_coef_table[ch],
|
||||
predictor_coef_num[ch],
|
||||
@ -468,8 +467,8 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data,
|
||||
/* not compressed, easy case */
|
||||
for (i = 0; i < outputsamples; i++) {
|
||||
for (ch = 0; ch < channels; ch++) {
|
||||
alac->outputsamples_buffer[ch][i] = get_sbits_long(&alac->gb,
|
||||
alac->setinfo_sample_size);
|
||||
alac->output_samples_buffer[ch][i] = get_sbits_long(&alac->gb,
|
||||
alac->sample_size);
|
||||
}
|
||||
}
|
||||
alac->extra_bits = 0;
|
||||
@ -480,35 +479,35 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data,
|
||||
av_log(avctx, AV_LOG_ERROR, "Error : Wrong End Of Frame\n");
|
||||
|
||||
if (channels == 2 && interlacing_leftweight) {
|
||||
decorrelate_stereo(alac->outputsamples_buffer, outputsamples,
|
||||
decorrelate_stereo(alac->output_samples_buffer, outputsamples,
|
||||
interlacing_shift, interlacing_leftweight);
|
||||
}
|
||||
|
||||
if (alac->extra_bits) {
|
||||
append_extra_bits(alac->outputsamples_buffer, alac->extra_bits_buffer,
|
||||
alac->extra_bits, alac->numchannels, outputsamples);
|
||||
append_extra_bits(alac->output_samples_buffer, alac->extra_bits_buffer,
|
||||
alac->extra_bits, alac->channels, outputsamples);
|
||||
}
|
||||
|
||||
switch(alac->setinfo_sample_size) {
|
||||
switch(alac->sample_size) {
|
||||
case 16:
|
||||
if (channels == 2) {
|
||||
interleave_stereo_16(alac->outputsamples_buffer,
|
||||
interleave_stereo_16(alac->output_samples_buffer,
|
||||
(int16_t *)alac->frame.data[0], outputsamples);
|
||||
} else {
|
||||
int16_t *outbuffer = (int16_t *)alac->frame.data[0];
|
||||
for (i = 0; i < outputsamples; i++) {
|
||||
outbuffer[i] = alac->outputsamples_buffer[0][i];
|
||||
outbuffer[i] = alac->output_samples_buffer[0][i];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 24:
|
||||
if (channels == 2) {
|
||||
interleave_stereo_24(alac->outputsamples_buffer,
|
||||
interleave_stereo_24(alac->output_samples_buffer,
|
||||
(int32_t *)alac->frame.data[0], outputsamples);
|
||||
} else {
|
||||
int32_t *outbuffer = (int32_t *)alac->frame.data[0];
|
||||
for (i = 0; i < outputsamples; i++)
|
||||
outbuffer[i] = alac->outputsamples_buffer[0][i] << 8;
|
||||
outbuffer[i] = alac->output_samples_buffer[0][i] << 8;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -527,9 +526,9 @@ static av_cold int alac_decode_close(AVCodecContext *avctx)
|
||||
ALACContext *alac = avctx->priv_data;
|
||||
|
||||
int ch;
|
||||
for (ch = 0; ch < alac->numchannels; ch++) {
|
||||
av_freep(&alac->predicterror_buffer[ch]);
|
||||
av_freep(&alac->outputsamples_buffer[ch]);
|
||||
for (ch = 0; ch < alac->channels; ch++) {
|
||||
av_freep(&alac->predict_error_buffer[ch]);
|
||||
av_freep(&alac->output_samples_buffer[ch]);
|
||||
av_freep(&alac->extra_bits_buffer[ch]);
|
||||
}
|
||||
|
||||
@ -539,13 +538,13 @@ static av_cold int alac_decode_close(AVCodecContext *avctx)
|
||||
static int allocate_buffers(ALACContext *alac)
|
||||
{
|
||||
int ch;
|
||||
for (ch = 0; ch < alac->numchannels; ch++) {
|
||||
int buf_size = alac->setinfo_max_samples_per_frame * sizeof(int32_t);
|
||||
for (ch = 0; ch < alac->channels; ch++) {
|
||||
int buf_size = alac->max_samples_per_frame * sizeof(int32_t);
|
||||
|
||||
FF_ALLOC_OR_GOTO(alac->avctx, alac->predicterror_buffer[ch],
|
||||
FF_ALLOC_OR_GOTO(alac->avctx, alac->predict_error_buffer[ch],
|
||||
buf_size, buf_alloc_fail);
|
||||
|
||||
FF_ALLOC_OR_GOTO(alac->avctx, alac->outputsamples_buffer[ch],
|
||||
FF_ALLOC_OR_GOTO(alac->avctx, alac->output_samples_buffer[ch],
|
||||
buf_size, buf_alloc_fail);
|
||||
|
||||
FF_ALLOC_OR_GOTO(alac->avctx, alac->extra_bits_buffer[ch],
|
||||
@ -566,18 +565,18 @@ static int alac_set_info(ALACContext *alac)
|
||||
|
||||
bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4
|
||||
|
||||
alac->setinfo_max_samples_per_frame = bytestream2_get_be32u(&gb);
|
||||
if (alac->setinfo_max_samples_per_frame >= UINT_MAX/4){
|
||||
alac->max_samples_per_frame = bytestream2_get_be32u(&gb);
|
||||
if (alac->max_samples_per_frame >= UINT_MAX/4){
|
||||
av_log(alac->avctx, AV_LOG_ERROR,
|
||||
"setinfo_max_samples_per_frame too large\n");
|
||||
"max_samples_per_frame too large\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
bytestream2_skipu(&gb, 1); // compatible version
|
||||
alac->setinfo_sample_size = bytestream2_get_byteu(&gb);
|
||||
alac->setinfo_rice_historymult = bytestream2_get_byteu(&gb);
|
||||
alac->setinfo_rice_initialhistory = bytestream2_get_byteu(&gb);
|
||||
alac->setinfo_rice_kmodifier = bytestream2_get_byteu(&gb);
|
||||
alac->numchannels = bytestream2_get_byteu(&gb);
|
||||
alac->sample_size = bytestream2_get_byteu(&gb);
|
||||
alac->rice_history_mult = bytestream2_get_byteu(&gb);
|
||||
alac->rice_initial_history = bytestream2_get_byteu(&gb);
|
||||
alac->rice_limit = bytestream2_get_byteu(&gb);
|
||||
alac->channels = bytestream2_get_byteu(&gb);
|
||||
bytestream2_get_be16u(&gb); // maxRun
|
||||
bytestream2_get_be32u(&gb); // max coded frame size
|
||||
bytestream2_get_be32u(&gb); // average bitrate
|
||||
@ -603,24 +602,24 @@ static av_cold int alac_decode_init(AVCodecContext * avctx)
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (alac->setinfo_sample_size) {
|
||||
switch (alac->sample_size) {
|
||||
case 16: avctx->sample_fmt = AV_SAMPLE_FMT_S16;
|
||||
break;
|
||||
case 24: avctx->sample_fmt = AV_SAMPLE_FMT_S32;
|
||||
break;
|
||||
default: av_log_ask_for_sample(avctx, "Sample depth %d is not supported.\n",
|
||||
alac->setinfo_sample_size);
|
||||
alac->sample_size);
|
||||
return AVERROR_PATCHWELCOME;
|
||||
}
|
||||
|
||||
if (alac->numchannels < 1) {
|
||||
if (alac->channels < 1) {
|
||||
av_log(avctx, AV_LOG_WARNING, "Invalid channel count\n");
|
||||
alac->numchannels = avctx->channels;
|
||||
alac->channels = avctx->channels;
|
||||
} else {
|
||||
if (alac->numchannels > MAX_CHANNELS)
|
||||
alac->numchannels = avctx->channels;
|
||||
if (alac->channels > MAX_CHANNELS)
|
||||
alac->channels = avctx->channels;
|
||||
else
|
||||
avctx->channels = alac->numchannels;
|
||||
avctx->channels = alac->channels;
|
||||
}
|
||||
if (avctx->channels > MAX_CHANNELS) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Unsupported channel count: %d\n",
|
||||
|
Loading…
Reference in New Issue
Block a user