diff --git a/libavcodec/alac.c b/libavcodec/alac.c index 7c76c62dfe..310a1f0d5b 100644 --- a/libavcodec/alac.c +++ b/libavcodec/alac.c @@ -56,14 +56,11 @@ #define MAX_CHANNELS 8 typedef struct { - AVCodecContext *avctx; AVFrame frame; GetBitContext gb; - int channels; - /* buffers */ int32_t *predict_error_buffer[2]; int32_t *output_samples_buffer[2]; int32_t *extra_bits_buffer[2]; @@ -74,8 +71,8 @@ typedef struct { uint8_t rice_initial_history; uint8_t rice_limit; - int extra_bits; /**< number of extra bits beyond 16-bit */ - int nb_samples; /**< number of samples in the current frame */ + int extra_bits; /**< number of extra bits beyond 16-bit */ + int nb_samples; /**< number of samples in the current frame */ } ALACContext; enum RawDataBlockType { @@ -145,16 +142,15 @@ static void rice_decompress(ALACContext *alac, int32_t *output_buffer, int k; unsigned int x; - /* read k, that is bits as is */ + /* calculate rice param and decode next value */ k = av_log2((history >> 9) + 3); k = FFMIN(k, alac->rice_limit); x = decode_scalar(&alac->gb, k, bps); x += sign_modifier; sign_modifier = 0; - output_buffer[i] = (x >> 1) ^ -(x & 1); - /* now update the history */ + /* update the history */ if (x > 0xffff) history = 0xffff; else @@ -165,9 +161,9 @@ static void rice_decompress(ALACContext *alac, int32_t *output_buffer, if ((history < 128) && (i + 1 < nb_samples)) { int block_size; - k = 7 - av_log2(history) + ((history + 16) >> 6 /* / 64 */); + /* calculate rice param and decode block size */ + k = 7 - av_log2(history) + ((history + 16) >> 6); k = FFMIN(k, alac->rice_limit); - block_size = decode_scalar(&alac->gb, k, 16); if (block_size > 0) { @@ -181,10 +177,8 @@ static void rice_decompress(ALACContext *alac, int32_t *output_buffer, block_size * sizeof(*output_buffer)); i += block_size; } - if (block_size <= 0xffff) sign_modifier = 1; - history = 0; } } @@ -230,7 +224,6 @@ static void lpc_prediction(int32_t *error_buffer, int32_t *buffer_out, /* NOTE: 4 and 8 are very common cases that could be optimized. */ - /* general case */ for (i = lpc_order; i < nb_samples - 1; i++) { int j; int val = 0; @@ -238,13 +231,11 @@ static void lpc_prediction(int32_t *error_buffer, int32_t *buffer_out, int error_sign; int d = buffer_out[i - lpc_order]; - for (j = 0; j < lpc_order; j++) { + /* LPC prediction */ + for (j = 0; j < lpc_order; j++) val += (buffer_out[i - j] - d) * lpc_coefs[j]; - } - val = (val + (1 << (lpc_quant - 1))) >> lpc_quant; val += d + error_val; - buffer_out[i + 1] = sign_extend(val, bps); /* adapt LPC coefficients */ @@ -262,9 +253,8 @@ static void lpc_prediction(int32_t *error_buffer, int32_t *buffer_out, } } -static void decorrelate_stereo(int32_t *buffer[2], - int nb_samples, int decorr_shift, - int decorr_left_weight) +static void decorrelate_stereo(int32_t *buffer[2], int nb_samples, + int decorr_shift, int decorr_left_weight) { int i; @@ -282,8 +272,7 @@ static void decorrelate_stereo(int32_t *buffer[2], } } -static void append_extra_bits(int32_t *buffer[2], - int32_t *extra_bits_buffer[2], +static void append_extra_bits(int32_t *buffer[2], int32_t *extra_bits_buffer[2], int extra_bits, int channels, int nb_samples) { int i, ch; @@ -297,13 +286,9 @@ static int decode_element(AVCodecContext *avctx, void *data, int ch_index, int channels) { ALACContext *alac = avctx->priv_data; - int has_size; - int bps; - int is_compressed; - int decorr_shift; - int decorr_left_weight; + int has_size, bps, is_compressed, decorr_shift, decorr_left_weight, ret; uint32_t output_samples; - int i, ch, ret; + int i, ch; skip_bits(&alac->gb, 4); /* element instance tag */ skip_bits(&alac->gb, 12); /* unused header bits */ @@ -404,10 +389,11 @@ static int decode_element(AVCodecContext *avctx, void *data, int ch_index, /* not compressed, easy case */ for (i = 0; i < alac->nb_samples; i++) { for (ch = 0; ch < channels; ch++) { - alac->output_samples_buffer[ch][i] = get_sbits_long(&alac->gb, alac->sample_size); + alac->output_samples_buffer[ch][i] = + get_sbits_long(&alac->gb, alac->sample_size); } } - alac->extra_bits = 0; + alac->extra_bits = 0; decorr_shift = 0; decorr_left_weight = 0; } @@ -477,9 +463,10 @@ static int alac_decode_frame(AVCodecContext *avctx, void *data, ch += channels; } - if (avpkt->size * 8 - get_bits_count(&alac->gb) > 8) + if (avpkt->size * 8 - get_bits_count(&alac->gb) > 8) { av_log(avctx, AV_LOG_ERROR, "Error : %d bits left\n", avpkt->size * 8 - get_bits_count(&alac->gb)); + } *got_frame_ptr = 1; *(AVFrame *)data = alac->frame;