55 #define ALAC_EXTRADATA_SIZE 36
56 #define MAX_CHANNELS 2
112 int32_t *output_buffer,
115 int rice_initialhistory,
117 int rice_historymult,
118 int rice_kmodifier_mask
122 unsigned int history = rice_initialhistory;
123 int sign_modifier = 0;
125 for (output_count = 0; output_count < output_size; output_count++) {
134 k = av_log2((history >> 9) + 3);
137 x_modified = sign_modifier + x;
138 final_val = (x_modified + 1) / 2;
139 if (x_modified & 1) final_val *= -1;
141 output_buffer[output_count] = final_val;
146 history += x_modified * rice_historymult
147 - ((history * rice_historymult) >> 9);
149 if (x_modified > 0xffff)
153 if ((history < 128) && (output_count+1 < output_size)) {
155 unsigned int block_size;
159 k = 7 - av_log2(history) + ((history + 16) >> 6 );
163 if (block_size > 0) {
164 if(block_size >= output_size - output_count){
165 av_log(alac->
avctx,
AV_LOG_ERROR,
"invalid zero block size of %d %d %d\n", block_size, output_size, output_count);
166 block_size= output_size - output_count - 1;
168 memset(&output_buffer[output_count+1], 0, block_size * 4);
169 output_count += block_size;
172 if (block_size > 0xffff)
189 int16_t *predictor_coef_table,
190 int predictor_coef_num,
191 int predictor_quantitization)
196 *buffer_out = *error_buffer;
198 if (!predictor_coef_num) {
199 if (output_size <= 1)
202 memcpy(buffer_out+1, error_buffer+1, (output_size-1) * 4);
206 if (predictor_coef_num == 0x1f) {
210 if (output_size <= 1)
212 for (i = 0; i < output_size - 1; i++) {
216 prev_value = buffer_out[i];
217 error_value = error_buffer[i+1];
219 sign_extend((prev_value + error_value), readsamplesize);
225 if (predictor_coef_num > 0)
226 for (i = 0; i < predictor_coef_num; i++) {
229 val = buffer_out[i] + error_buffer[i+1];
231 buffer_out[i+1] = val;
239 if (predictor_coef_num > 0) {
240 for (i = predictor_coef_num + 1; i < output_size; i++) {
244 int error_val = error_buffer[i];
246 for (j = 0; j < predictor_coef_num; j++) {
247 sum += (buffer_out[predictor_coef_num-j] - buffer_out[0]) *
248 predictor_coef_table[j];
251 outval = (1 << (predictor_quantitization-1)) + sum;
252 outval = outval >> predictor_quantitization;
253 outval = outval + buffer_out[0] + error_val;
256 buffer_out[predictor_coef_num+1] = outval;
259 int predictor_num = predictor_coef_num - 1;
261 while (predictor_num >= 0 && error_val > 0) {
262 int val = buffer_out[0] - buffer_out[predictor_coef_num - predictor_num];
265 predictor_coef_table[predictor_num] -= sign;
269 error_val -= ((val >> predictor_quantitization) *
270 (predictor_coef_num - predictor_num));
274 }
else if (error_val < 0) {
275 int predictor_num = predictor_coef_num - 1;
277 while (predictor_num >= 0 && error_val < 0) {
278 int val = buffer_out[0] - buffer_out[predictor_coef_num - predictor_num];
281 predictor_coef_table[predictor_num] -= sign;
285 error_val -= ((val >> predictor_quantitization) *
286 (predictor_coef_num - predictor_num));
298 int numsamples, uint8_t interlacing_shift,
299 uint8_t interlacing_leftweight)
303 for (i = 0; i < numsamples; i++) {
309 a -= (b * interlacing_leftweight) >> interlacing_shift;
318 int32_t *extra_bits_buffer[MAX_CHANNELS],
319 int extra_bits,
int numchannels,
int numsamples)
323 for (ch = 0; ch < numchannels; ch++)
324 for (i = 0; i < numsamples; i++)
325 buffer[ch][i] = (
buffer[ch][i] << extra_bits) | extra_bits_buffer[ch][i];
329 int16_t *buffer_out,
int numsamples)
333 for (i = 0; i < numsamples; i++) {
334 *buffer_out++ =
buffer[0][i];
335 *buffer_out++ =
buffer[1][i];
340 int32_t *buffer_out,
int numsamples)
344 for (i = 0; i < numsamples; i++) {
345 *buffer_out++ =
buffer[0][i] << 8;
346 *buffer_out++ =
buffer[1][i] << 8;
351 int *got_frame_ptr,
AVPacket *avpkt)
353 const uint8_t *inbuffer = avpkt->
data;
354 int input_buffer_size = avpkt->
size;
358 unsigned int outputsamples;
360 unsigned int readsamplesize;
362 uint8_t interlacing_shift;
363 uint8_t interlacing_leftweight;
416 if (!isnotcompressed) {
425 interlacing_leftweight =
get_bits(&alac->
gb, 8);
427 for (ch = 0; ch < channels; ch++) {
429 prediction_quantitization[ch] =
get_bits(&alac->
gb, 4);
432 predictor_coef_num[ch] =
get_bits(&alac->
gb, 5);
435 for (i = 0; i < predictor_coef_num[ch]; i++)
436 predictor_coef_table[ch][i] = (int16_t)
get_bits(&alac->
gb, 16);
440 for (i = 0; i < outputsamples; i++) {
441 for (ch = 0; ch < channels; ch++)
445 for (ch = 0; ch < channels; ch++) {
456 if (prediction_type[ch] == 15) {
466 outputsamples, readsamplesize,
468 }
else if (prediction_type[ch] > 0) {
470 prediction_type[ch]);
474 outputsamples, readsamplesize,
475 predictor_coef_table[ch],
476 predictor_coef_num[ch],
477 prediction_quantitization[ch]);
481 for (i = 0; i < outputsamples; i++) {
482 for (ch = 0; ch < channels; ch++) {
488 interlacing_shift = 0;
489 interlacing_leftweight = 0;
494 if (channels == 2 && interlacing_leftweight) {
496 interlacing_shift, interlacing_leftweight);
508 (int16_t *)alac->
frame.
data[0], outputsamples);
510 int16_t *outbuffer = (int16_t *)alac->
frame.
data[0];
511 for (i = 0; i < outputsamples; i++) {
519 (int32_t *)alac->
frame.
data[0], outputsamples);
521 int32_t *outbuffer = (int32_t *)alac->
frame.
data[0];
522 for (i = 0; i < outputsamples; i++)
534 return input_buffer_size;
558 buf_size, buf_alloc_fail);
561 buf_size, buf_alloc_fail);
564 buf_size, buf_alloc_fail);
580 if(
AV_RB32(ptr) >= UINT_MAX/4){
599 bytestream_get_be16(&ptr);
600 bytestream_get_be32(&ptr);
601 bytestream_get_be32(&ptr);
602 bytestream_get_be32(&ptr);