Lines Matching refs:alac

26  * @see http://crazney.net/programs/itunes/alac.html
30 * the end of an 'alac' stsd atom and has the following format:
33 * 32 bits tag ("alac")
112 static int rice_decompress(ALACContext *alac, int32_t *output_buffer,
116 unsigned int history = alac->rice_initial_history;
123 if(get_bits_left(&alac->gb) <= 0)
128 k = FFMIN(k, alac->rice_limit);
129 x = decode_scalar(&alac->gb, k, bps);
147 k = FFMIN(k, alac->rice_limit);
148 block_size = decode_scalar(&alac->gb, k, 16);
152 av_log(alac->avctx, AV_LOG_ERROR,
240 ALACContext *alac = avctx->priv_data;
245 skip_bits(&alac->gb, 4); /* element instance tag */
246 skip_bits(&alac->gb, 12); /* unused header bits */
249 has_size = get_bits1(&alac->gb);
251 alac->extra_bits = get_bits(&alac->gb, 2) << 3;
252 bps = alac->sample_size - alac->extra_bits + channels - 1;
261 is_compressed = !get_bits1(&alac->gb);
264 output_samples = get_bits_long(&alac->gb, 32);
266 output_samples = alac->max_samples_per_frame;
267 if (!output_samples || output_samples > alac->max_samples_per_frame) {
272 if (!alac->nb_samples) {
277 } else if (output_samples != alac->nb_samples) {
279 output_samples, alac->nb_samples);
282 alac->nb_samples = output_samples;
283 if (alac->direct_output) {
285 alac->output_samples_buffer[ch] = (int32_t *)frame->extended_data[ch_index + ch];
295 if (!alac->rice_limit) {
296 avpriv_request_sample(alac->avctx,
301 decorr_shift = get_bits(&alac->gb, 8);
302 decorr_left_weight = get_bits(&alac->gb, 8);
308 prediction_type[ch] = get_bits(&alac->gb, 4);
309 lpc_quant[ch] = get_bits(&alac->gb, 4);
310 rice_history_mult[ch] = get_bits(&alac->gb, 3);
311 lpc_order[ch] = get_bits(&alac->gb, 5);
313 if (lpc_order[ch] >= alac->max_samples_per_frame || !lpc_quant[ch])
318 lpc_coefs[ch][i] = get_sbits(&alac->gb, 16);
321 if (alac->extra_bits) {
322 for (i = 0; i < alac->nb_samples; i++) {
323 if(get_bits_left(&alac->gb) <= 0)
326 alac->extra_bits_buffer[ch][i] = get_bits(&alac->gb, alac->extra_bits);
330 int ret=rice_decompress(alac, alac->predict_error_buffer[ch],
331 alac->nb_samples, bps,
332 rice_history_mult[ch] * alac->rice_history_mult / 4);
345 lpc_prediction(alac->predict_error_buffer[ch],
346 alac->predict_error_buffer[ch],
347 alac->nb_samples, bps, NULL, 31, 0);
352 lpc_prediction(alac->predict_error_buffer[ch],
353 alac->output_samples_buffer[ch], alac->nb_samples,
358 for (i = 0; i < alac->nb_samples; i++) {
359 if(get_bits_left(&alac->gb) <= 0)
362 alac->output_samples_buffer[ch][i] =
363 get_sbits_long(&alac->gb, alac->sample_size);
366 alac->extra_bits = 0;
372 if (alac->extra_bits && alac->extra_bit_bug) {
373 alac->dsp.append_extra_bits[1](alac->output_samples_buffer, alac->extra_bits_buffer,
374 alac->extra_bits, channels, alac->nb_samples);
378 alac->dsp.decorrelate_stereo(alac->output_samples_buffer, alac->nb_samples,
382 if (alac->extra_bits && !alac->extra_bit_bug) {
383 alac->dsp.append_extra_bits[1](alac->output_samples_buffer, alac->extra_bits_buffer,
384 alac->extra_bits, channels, alac->nb_samples);
386 } else if (alac->extra_bits) {
387 alac->dsp.append_extra_bits[0](alac->output_samples_buffer, alac->extra_bits_buffer,
388 alac->extra_bits, channels, alac->nb_samples);
391 switch(alac->sample_size) {
395 for (i = 0; i < alac->nb_samples; i++)
396 *outbuffer++ = alac->output_samples_buffer[ch][i];
401 for (i = 0; i < alac->nb_samples; i++)
402 alac->output_samples_buffer[ch][i] *= 1U << 12;
407 for (i = 0; i < alac->nb_samples; i++)
408 alac->output_samples_buffer[ch][i] *= 1U << 8;
419 ALACContext *alac = avctx->priv_data;
424 if ((ret = init_get_bits8(&alac->gb, avpkt->data, avpkt->size)) < 0)
428 alac->nb_samples = 0;
430 while (get_bits_left(&alac->gb) >= 3) {
431 element = get_bits(&alac->gb, 3);
442 if (ch + channels > alac->channels ||
443 ff_alac_channel_layout_offsets[alac->channels - 1][ch] + channels > alac->channels) {
449 ff_alac_channel_layout_offsets[alac->channels - 1][ch],
451 if (ret < 0 && get_bits_left(&alac->gb))
461 if (avpkt->size * 8 - get_bits_count(&alac->gb) > 8) {
463 avpkt->size * 8 - get_bits_count(&alac->gb));
466 if (alac->channels == ch && alac->nb_samples)
476 ALACContext *alac = avctx->priv_data;
479 for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) {
480 av_freep(&alac->predict_error_buffer[ch]);
481 if (!alac->direct_output)
482 av_freep(&alac->output_samples_buffer[ch]);
483 av_freep(&alac->extra_bits_buffer[ch]);
489 static int allocate_buffers(ALACContext *alac)
492 unsigned buf_size = alac->max_samples_per_frame * sizeof(int32_t);
496 alac->predict_error_buffer[ch] = NULL;
497 alac->output_samples_buffer[ch] = NULL;
498 alac->extra_bits_buffer[ch] = NULL;
501 for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) {
502 if (!(alac->predict_error_buffer[ch] = av_malloc(buf_size)))
505 alac->direct_output = alac->sample_size > 16;
506 if (!alac->direct_output) {
507 if (!(alac->output_samples_buffer[ch] = av_malloc(extra_buf_size)))
511 if (!(alac->extra_bits_buffer[ch] = av_malloc(extra_buf_size)))
517 static int alac_set_info(ALACContext *alac)
521 bytestream2_init(&gb, alac->avctx->extradata,
522 alac->avctx->extradata_size);
524 bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4
526 alac->max_samples_per_frame = bytestream2_get_be32u(&gb);
527 if (!alac->max_samples_per_frame ||
528 alac->max_samples_per_frame > 4096 * 4096) {
529 av_log(alac->avctx, AV_LOG_ERROR,
531 alac->max_samples_per_frame);
535 alac->sample_size = bytestream2_get_byteu(&gb);
536 alac->rice_history_mult = bytestream2_get_byteu(&gb);
537 alac->rice_initial_history = bytestream2_get_byteu(&gb);
538 alac->rice_limit = bytestream2_get_byteu(&gb);
539 alac->channels = bytestream2_get_byteu(&gb);
543 alac->sample_rate = bytestream2_get_be32u(&gb);
551 ALACContext *alac = avctx->priv_data;
552 alac->avctx = avctx;
555 if (alac->avctx->extradata_size < ALAC_EXTRADATA_SIZE) {
559 if ((ret = alac_set_info(alac)) < 0) {
564 switch (alac->sample_size) {
571 default: avpriv_request_sample(avctx, "Sample depth %d", alac->sample_size);
574 avctx->bits_per_raw_sample = alac->sample_size;
575 avctx->sample_rate = alac->sample_rate;
577 if (alac->channels < 1) {
581 alac->channels = avctx->ch_layout.nb_channels;
583 if (alac->channels > ALAC_MAX_CHANNELS) {
585 alac->channels);
589 avctx->ch_layout = ff_alac_ch_layouts[alac->channels - 1];
591 if ((ret = allocate_buffers(alac)) < 0) {
596 ff_alacdsp_init(&alac->dsp);
609 .class_name = "alac",
616 .p.name = "alac",