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