FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
alac.c
Go to the documentation of this file.
1 /*
2  * ALAC (Apple Lossless Audio Codec) decoder
3  * Copyright (c) 2005 David Hammerton
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * ALAC (Apple Lossless Audio Codec) decoder
25  * @author 2005 David Hammerton
26  * @see http://crazney.net/programs/itunes/alac.html
27  *
28  * Note: This decoder expects a 36-byte QuickTime atom to be
29  * passed through the extradata[_size] fields. This atom is tacked onto
30  * the end of an 'alac' stsd atom and has the following format:
31  *
32  * 32 bits atom size
33  * 32 bits tag ("alac")
34  * 32 bits tag version (0)
35  * 32 bits samples per frame (used when not set explicitly in the frames)
36  * 8 bits compatible version (0)
37  * 8 bits sample size
38  * 8 bits history mult (40)
39  * 8 bits initial history (10)
40  * 8 bits rice param limit (14)
41  * 8 bits channels
42  * 16 bits maxRun (255)
43  * 32 bits max coded frame size (0 means unknown)
44  * 32 bits average bitrate (0 means unknown)
45  * 32 bits samplerate
46  */
47 
48 #include <inttypes.h>
49 
51 #include "libavutil/opt.h"
52 #include "avcodec.h"
53 #include "get_bits.h"
54 #include "bytestream.h"
55 #include "internal.h"
56 #include "thread.h"
57 #include "unary.h"
58 #include "mathops.h"
59 #include "alac_data.h"
60 #include "alacdsp.h"
61 
62 #define ALAC_EXTRADATA_SIZE 36
63 
64 typedef struct ALACContext {
65  AVClass *class;
68  int channels;
69 
73 
79 
80  int extra_bits; /**< number of extra bits beyond 16-bit */
81  int nb_samples; /**< number of samples in the current frame */
82 
85 
87 } ALACContext;
88 
89 static inline unsigned int decode_scalar(GetBitContext *gb, int k, int bps)
90 {
91  unsigned int x = get_unary_0_9(gb);
92 
93  if (x > 8) { /* RICE THRESHOLD */
94  /* use alternative encoding */
95  x = get_bits_long(gb, bps);
96  } else if (k != 1) {
97  int extrabits = show_bits(gb, k);
98 
99  /* multiply x by 2^k - 1, as part of their strange algorithm */
100  x = (x << k) - x;
101 
102  if (extrabits > 1) {
103  x += extrabits - 1;
104  skip_bits(gb, k);
105  } else
106  skip_bits(gb, k - 1);
107  }
108  return x;
109 }
110 
111 static int rice_decompress(ALACContext *alac, int32_t *output_buffer,
112  int nb_samples, int bps, int rice_history_mult)
113 {
114  int i;
115  unsigned int history = alac->rice_initial_history;
116  int sign_modifier = 0;
117 
118  for (i = 0; i < nb_samples; i++) {
119  int k;
120  unsigned int x;
121 
122  if(get_bits_left(&alac->gb) <= 0)
123  return -1;
124 
125  /* calculate rice param and decode next value */
126  k = av_log2((history >> 9) + 3);
127  k = FFMIN(k, alac->rice_limit);
128  x = decode_scalar(&alac->gb, k, bps);
129  x += sign_modifier;
130  sign_modifier = 0;
131  output_buffer[i] = (x >> 1) ^ -(x & 1);
132 
133  /* update the history */
134  if (x > 0xffff)
135  history = 0xffff;
136  else
137  history += x * rice_history_mult -
138  ((history * rice_history_mult) >> 9);
139 
140  /* special case: there may be compressed blocks of 0 */
141  if ((history < 128) && (i + 1 < nb_samples)) {
142  int block_size;
143 
144  /* calculate rice param and decode block size */
145  k = 7 - av_log2(history) + ((history + 16) >> 6);
146  k = FFMIN(k, alac->rice_limit);
147  block_size = decode_scalar(&alac->gb, k, 16);
148 
149  if (block_size > 0) {
150  if (block_size >= nb_samples - i) {
151  av_log(alac->avctx, AV_LOG_ERROR,
152  "invalid zero block size of %d %d %d\n", block_size,
153  nb_samples, i);
154  block_size = nb_samples - i - 1;
155  }
156  memset(&output_buffer[i + 1], 0,
157  block_size * sizeof(*output_buffer));
158  i += block_size;
159  }
160  if (block_size <= 0xffff)
161  sign_modifier = 1;
162  history = 0;
163  }
164  }
165  return 0;
166 }
167 
168 static inline int sign_only(int v)
169 {
170  return v ? FFSIGN(v) : 0;
171 }
172 
173 static void lpc_prediction(int32_t *error_buffer, int32_t *buffer_out,
174  int nb_samples, int bps, int16_t *lpc_coefs,
175  int lpc_order, int lpc_quant)
176 {
177  int i;
178  int32_t *pred = buffer_out;
179 
180  /* first sample always copies */
181  *buffer_out = *error_buffer;
182 
183  if (nb_samples <= 1)
184  return;
185 
186  if (!lpc_order) {
187  memcpy(&buffer_out[1], &error_buffer[1],
188  (nb_samples - 1) * sizeof(*buffer_out));
189  return;
190  }
191 
192  if (lpc_order == 31) {
193  /* simple 1st-order prediction */
194  for (i = 1; i < nb_samples; i++) {
195  buffer_out[i] = sign_extend(buffer_out[i - 1] + error_buffer[i],
196  bps);
197  }
198  return;
199  }
200 
201  /* read warm-up samples */
202  for (i = 1; i <= lpc_order && i < nb_samples; i++)
203  buffer_out[i] = sign_extend(buffer_out[i - 1] + error_buffer[i], bps);
204 
205  /* NOTE: 4 and 8 are very common cases that could be optimized. */
206 
207  for (; i < nb_samples; i++) {
208  int j;
209  int val = 0;
210  int error_val = error_buffer[i];
211  int error_sign;
212  int d = *pred++;
213 
214  /* LPC prediction */
215  for (j = 0; j < lpc_order; j++)
216  val += (pred[j] - d) * lpc_coefs[j];
217  val = (val + (1 << (lpc_quant - 1))) >> lpc_quant;
218  val += d + error_val;
219  buffer_out[i] = sign_extend(val, bps);
220 
221  /* adapt LPC coefficients */
222  error_sign = sign_only(error_val);
223  if (error_sign) {
224  for (j = 0; j < lpc_order && error_val * error_sign > 0; j++) {
225  int sign;
226  val = d - pred[j];
227  sign = sign_only(val) * error_sign;
228  lpc_coefs[j] -= sign;
229  val *= sign;
230  error_val -= (val >> lpc_quant) * (j + 1);
231  }
232  }
233  }
234 }
235 
236 static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index,
237  int channels)
238 {
239  ALACContext *alac = avctx->priv_data;
240  int has_size, bps, is_compressed, decorr_shift, decorr_left_weight, ret;
241  uint32_t output_samples;
242  int i, ch;
243 
244  skip_bits(&alac->gb, 4); /* element instance tag */
245  skip_bits(&alac->gb, 12); /* unused header bits */
246 
247  /* the number of output samples is stored in the frame */
248  has_size = get_bits1(&alac->gb);
249 
250  alac->extra_bits = get_bits(&alac->gb, 2) << 3;
251  bps = alac->sample_size - alac->extra_bits + channels - 1;
252  if (bps > 32U) {
253  av_log(avctx, AV_LOG_ERROR, "bps is unsupported: %d\n", bps);
254  return AVERROR_PATCHWELCOME;
255  }
256 
257  /* whether the frame is compressed */
258  is_compressed = !get_bits1(&alac->gb);
259 
260  if (has_size)
261  output_samples = get_bits_long(&alac->gb, 32);
262  else
263  output_samples = alac->max_samples_per_frame;
264  if (!output_samples || output_samples > alac->max_samples_per_frame) {
265  av_log(avctx, AV_LOG_ERROR, "invalid samples per frame: %"PRIu32"\n",
266  output_samples);
267  return AVERROR_INVALIDDATA;
268  }
269  if (!alac->nb_samples) {
270  ThreadFrame tframe = { .f = frame };
271  /* get output buffer */
272  frame->nb_samples = output_samples;
273  if ((ret = ff_thread_get_buffer(avctx, &tframe, 0)) < 0)
274  return ret;
275  } else if (output_samples != alac->nb_samples) {
276  av_log(avctx, AV_LOG_ERROR, "sample count mismatch: %"PRIu32" != %d\n",
277  output_samples, alac->nb_samples);
278  return AVERROR_INVALIDDATA;
279  }
280  alac->nb_samples = output_samples;
281  if (alac->direct_output) {
282  for (ch = 0; ch < channels; ch++)
283  alac->output_samples_buffer[ch] = (int32_t *)frame->extended_data[ch_index + ch];
284  }
285 
286  if (is_compressed) {
287  int16_t lpc_coefs[2][32];
288  int lpc_order[2];
289  int prediction_type[2];
290  int lpc_quant[2];
291  int rice_history_mult[2];
292 
293  if (!alac->rice_limit) {
295  "Compression with rice limit 0");
296  return AVERROR(ENOSYS);
297  }
298 
299  decorr_shift = get_bits(&alac->gb, 8);
300  decorr_left_weight = get_bits(&alac->gb, 8);
301 
302  for (ch = 0; ch < channels; ch++) {
303  prediction_type[ch] = get_bits(&alac->gb, 4);
304  lpc_quant[ch] = get_bits(&alac->gb, 4);
305  rice_history_mult[ch] = get_bits(&alac->gb, 3);
306  lpc_order[ch] = get_bits(&alac->gb, 5);
307 
308  if (lpc_order[ch] >= alac->max_samples_per_frame)
309  return AVERROR_INVALIDDATA;
310 
311  /* read the predictor table */
312  for (i = lpc_order[ch] - 1; i >= 0; i--)
313  lpc_coefs[ch][i] = get_sbits(&alac->gb, 16);
314  }
315 
316  if (alac->extra_bits) {
317  for (i = 0; i < alac->nb_samples; i++) {
318  if(get_bits_left(&alac->gb) <= 0)
319  return -1;
320  for (ch = 0; ch < channels; ch++)
321  alac->extra_bits_buffer[ch][i] = get_bits(&alac->gb, alac->extra_bits);
322  }
323  }
324  for (ch = 0; ch < channels; ch++) {
325  int ret=rice_decompress(alac, alac->predict_error_buffer[ch],
326  alac->nb_samples, bps,
327  rice_history_mult[ch] * alac->rice_history_mult / 4);
328  if(ret<0)
329  return ret;
330 
331  /* adaptive FIR filter */
332  if (prediction_type[ch] == 15) {
333  /* Prediction type 15 runs the adaptive FIR twice.
334  * The first pass uses the special-case coef_num = 31, while
335  * the second pass uses the coefs from the bitstream.
336  *
337  * However, this prediction type is not currently used by the
338  * reference encoder.
339  */
341  alac->predict_error_buffer[ch],
342  alac->nb_samples, bps, NULL, 31, 0);
343  } else if (prediction_type[ch] > 0) {
344  av_log(avctx, AV_LOG_WARNING, "unknown prediction type: %i\n",
345  prediction_type[ch]);
346  }
348  alac->output_samples_buffer[ch], alac->nb_samples,
349  bps, lpc_coefs[ch], lpc_order[ch], lpc_quant[ch]);
350  }
351  } else {
352  /* not compressed, easy case */
353  for (i = 0; i < alac->nb_samples; i++) {
354  if(get_bits_left(&alac->gb) <= 0)
355  return -1;
356  for (ch = 0; ch < channels; ch++) {
357  alac->output_samples_buffer[ch][i] =
358  get_sbits_long(&alac->gb, alac->sample_size);
359  }
360  }
361  alac->extra_bits = 0;
362  decorr_shift = 0;
363  decorr_left_weight = 0;
364  }
365 
366  if (channels == 2) {
367  if (alac->extra_bits && alac->extra_bit_bug) {
369  alac->extra_bits, channels, alac->nb_samples);
370  }
371 
372  if (decorr_left_weight) {
374  decorr_shift, decorr_left_weight);
375  }
376 
377  if (alac->extra_bits && !alac->extra_bit_bug) {
379  alac->extra_bits, channels, alac->nb_samples);
380  }
381  } else if (alac->extra_bits) {
383  alac->extra_bits, channels, alac->nb_samples);
384  }
385 
386  switch(alac->sample_size) {
387  case 16: {
388  for (ch = 0; ch < channels; ch++) {
389  int16_t *outbuffer = (int16_t *)frame->extended_data[ch_index + ch];
390  for (i = 0; i < alac->nb_samples; i++)
391  *outbuffer++ = alac->output_samples_buffer[ch][i];
392  }}
393  break;
394  case 20: {
395  for (ch = 0; ch < channels; ch++) {
396  for (i = 0; i < alac->nb_samples; i++)
397  alac->output_samples_buffer[ch][i] <<= 12;
398  }}
399  break;
400  case 24: {
401  for (ch = 0; ch < channels; ch++) {
402  for (i = 0; i < alac->nb_samples; i++)
403  alac->output_samples_buffer[ch][i] <<= 8;
404  }}
405  break;
406  }
407 
408  return 0;
409 }
410 
411 static int alac_decode_frame(AVCodecContext *avctx, void *data,
412  int *got_frame_ptr, AVPacket *avpkt)
413 {
414  ALACContext *alac = avctx->priv_data;
415  AVFrame *frame = data;
416  enum AlacRawDataBlockType element;
417  int channels;
418  int ch, ret, got_end;
419 
420  if ((ret = init_get_bits8(&alac->gb, avpkt->data, avpkt->size)) < 0)
421  return ret;
422 
423  got_end = 0;
424  alac->nb_samples = 0;
425  ch = 0;
426  while (get_bits_left(&alac->gb) >= 3) {
427  element = get_bits(&alac->gb, 3);
428  if (element == TYPE_END) {
429  got_end = 1;
430  break;
431  }
432  if (element > TYPE_CPE && element != TYPE_LFE) {
433  av_log(avctx, AV_LOG_ERROR, "syntax element unsupported: %d\n", element);
434  return AVERROR_PATCHWELCOME;
435  }
436 
437  channels = (element == TYPE_CPE) ? 2 : 1;
438  if (ch + channels > alac->channels ||
439  ff_alac_channel_layout_offsets[alac->channels - 1][ch] + channels > alac->channels) {
440  av_log(avctx, AV_LOG_ERROR, "invalid element channel count\n");
441  return AVERROR_INVALIDDATA;
442  }
443 
444  ret = decode_element(avctx, frame,
446  channels);
447  if (ret < 0 && get_bits_left(&alac->gb))
448  return ret;
449 
450  ch += channels;
451  }
452  if (!got_end) {
453  av_log(avctx, AV_LOG_ERROR, "no end tag found. incomplete packet.\n");
454  return AVERROR_INVALIDDATA;
455  }
456 
457  if (avpkt->size * 8 - get_bits_count(&alac->gb) > 8) {
458  av_log(avctx, AV_LOG_ERROR, "Error : %d bits left\n",
459  avpkt->size * 8 - get_bits_count(&alac->gb));
460  }
461 
462  if (alac->channels == ch)
463  *got_frame_ptr = 1;
464  else
465  av_log(avctx, AV_LOG_WARNING, "Failed to decode all channels\n");
466 
467  return avpkt->size;
468 }
469 
471 {
472  ALACContext *alac = avctx->priv_data;
473 
474  int ch;
475  for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) {
476  av_freep(&alac->predict_error_buffer[ch]);
477  if (!alac->direct_output)
478  av_freep(&alac->output_samples_buffer[ch]);
479  av_freep(&alac->extra_bits_buffer[ch]);
480  }
481 
482  return 0;
483 }
484 
485 static int allocate_buffers(ALACContext *alac)
486 {
487  int ch;
488  int buf_size = alac->max_samples_per_frame * sizeof(int32_t);
489 
490  for (ch = 0; ch < 2; ch++) {
491  alac->predict_error_buffer[ch] = NULL;
492  alac->output_samples_buffer[ch] = NULL;
493  alac->extra_bits_buffer[ch] = NULL;
494  }
495 
496  for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) {
498  buf_size, buf_alloc_fail);
499 
500  alac->direct_output = alac->sample_size > 16;
501  if (!alac->direct_output) {
503  buf_size + AV_INPUT_BUFFER_PADDING_SIZE, buf_alloc_fail);
504  }
505 
506  FF_ALLOC_OR_GOTO(alac->avctx, alac->extra_bits_buffer[ch],
507  buf_size + AV_INPUT_BUFFER_PADDING_SIZE, buf_alloc_fail);
508  }
509  return 0;
510 buf_alloc_fail:
511  alac_decode_close(alac->avctx);
512  return AVERROR(ENOMEM);
513 }
514 
515 static int alac_set_info(ALACContext *alac)
516 {
517  GetByteContext gb;
518 
519  bytestream2_init(&gb, alac->avctx->extradata,
520  alac->avctx->extradata_size);
521 
522  bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4
523 
524  alac->max_samples_per_frame = bytestream2_get_be32u(&gb);
525  if (!alac->max_samples_per_frame ||
526  alac->max_samples_per_frame > INT_MAX / sizeof(int32_t)) {
527  av_log(alac->avctx, AV_LOG_ERROR,
528  "max samples per frame invalid: %"PRIu32"\n",
529  alac->max_samples_per_frame);
530  return AVERROR_INVALIDDATA;
531  }
532  bytestream2_skipu(&gb, 1); // compatible version
533  alac->sample_size = bytestream2_get_byteu(&gb);
534  alac->rice_history_mult = bytestream2_get_byteu(&gb);
535  alac->rice_initial_history = bytestream2_get_byteu(&gb);
536  alac->rice_limit = bytestream2_get_byteu(&gb);
537  alac->channels = bytestream2_get_byteu(&gb);
538  bytestream2_get_be16u(&gb); // maxRun
539  bytestream2_get_be32u(&gb); // max coded frame size
540  bytestream2_get_be32u(&gb); // average bitrate
541  bytestream2_get_be32u(&gb); // samplerate
542 
543  return 0;
544 }
545 
547 {
548  int ret;
549  ALACContext *alac = avctx->priv_data;
550  alac->avctx = avctx;
551 
552  /* initialize from the extradata */
554  av_log(avctx, AV_LOG_ERROR, "extradata is too small\n");
555  return AVERROR_INVALIDDATA;
556  }
557  if (alac_set_info(alac)) {
558  av_log(avctx, AV_LOG_ERROR, "set_info failed\n");
559  return -1;
560  }
561 
562  switch (alac->sample_size) {
563  case 16: avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
564  break;
565  case 20:
566  case 24:
567  case 32: avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
568  break;
569  default: avpriv_request_sample(avctx, "Sample depth %d", alac->sample_size);
570  return AVERROR_PATCHWELCOME;
571  }
572  avctx->bits_per_raw_sample = alac->sample_size;
573 
574  if (alac->channels < 1) {
575  av_log(avctx, AV_LOG_WARNING, "Invalid channel count\n");
576  alac->channels = avctx->channels;
577  } else {
578  if (alac->channels > ALAC_MAX_CHANNELS)
579  alac->channels = avctx->channels;
580  else
581  avctx->channels = alac->channels;
582  }
583  if (avctx->channels > ALAC_MAX_CHANNELS || avctx->channels <= 0 ) {
584  av_log(avctx, AV_LOG_ERROR, "Unsupported channel count: %d\n",
585  avctx->channels);
586  return AVERROR_PATCHWELCOME;
587  }
588  avctx->channel_layout = ff_alac_channel_layouts[alac->channels - 1];
589 
590  if ((ret = allocate_buffers(alac)) < 0) {
591  av_log(avctx, AV_LOG_ERROR, "Error allocating buffers\n");
592  return ret;
593  }
594 
595  ff_alacdsp_init(&alac->dsp);
596 
597  return 0;
598 }
599 
600 #if HAVE_THREADS
601 static int init_thread_copy(AVCodecContext *avctx)
602 {
603  ALACContext *alac = avctx->priv_data;
604  alac->avctx = avctx;
605  return allocate_buffers(alac);
606 }
607 #endif
608 
609 static const AVOption options[] = {
610  { "extra_bits_bug", "Force non-standard decoding process",
611  offsetof(ALACContext, extra_bit_bug), AV_OPT_TYPE_BOOL, { .i64 = 0 },
613  { NULL },
614 };
615 
616 static const AVClass alac_class = {
617  .class_name = "alac",
618  .item_name = av_default_item_name,
619  .option = options,
620  .version = LIBAVUTIL_VERSION_INT,
621 };
622 
624  .name = "alac",
625  .long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"),
626  .type = AVMEDIA_TYPE_AUDIO,
627  .id = AV_CODEC_ID_ALAC,
628  .priv_data_size = sizeof(ALACContext),
630  .close = alac_decode_close,
634  .priv_class = &alac_class
635 };
int extra_bit_bug
Definition: alac.c:84
#define NULL
Definition: coverity.c:32
const char const char void * val
Definition: avisynth_c.h:771
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
int nb_samples
number of samples in the current frame
Definition: alac.c:81
This structure describes decoded (raw) audio or video data.
Definition: frame.h:184
#define ALAC_EXTRADATA_SIZE
Definition: alac.c:62
AVOption.
Definition: opt.h:245
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:101
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:247
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
static int init_thread_copy(AVCodecContext *avctx)
Definition: tta.c:392
AVFrame * f
Definition: thread.h:36
static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index, int channels)
Definition: alac.c:236
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
Definition: aac.h:63
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
Definition: aac.h:57
#define AV_OPT_FLAG_AUDIO_PARAM
Definition: opt.h:280
int size
Definition: avcodec.h:1602
int av_log2(unsigned v)
Definition: intmath.c:26
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
Definition: bytestream.h:133
static const AVOption options[]
Definition: alac.c:609
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
Definition: avcodec.h:3077
int32_t * extra_bits_buffer[2]
Definition: alac.c:72
AVCodec.
Definition: avcodec.h:3600
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:232
static int get_sbits_long(GetBitContext *s, int n)
Read 0-32 bits as a signed integer.
Definition: get_bits.h:370
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:72
int32_t * predict_error_buffer[2]
Definition: alac.c:70
static int get_unary_0_9(GetBitContext *gb)
Definition: unary.h:51
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
enum AVSampleFormat sample_fmt
audio sample format
Definition: avcodec.h:2446
uint8_t
#define av_cold
Definition: attributes.h:82
AVOptions.
uint8_t rice_initial_history
Definition: alac.c:77
Definition: aac.h:59
static av_cold int alac_decode_close(AVCodecContext *avctx)
Definition: alac.c:470
Multithreading support functions.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:1791
static AVFrame * frame
uint8_t * data
Definition: avcodec.h:1601
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:199
static av_always_inline void bytestream2_skipu(GetByteContext *g, unsigned int size)
Definition: bytestream.h:170
static const AVClass alac_class
Definition: alac.c:616
bitstream reader API header.
int32_t * output_samples_buffer[2]
Definition: alac.c:71
static int alac_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Definition: alac.c:411
int extra_bits
number of extra bits beyond 16-bit
Definition: alac.c:80
#define av_log(a,...)
#define U(x)
Definition: vp56_arith.h:37
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:568
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
static void lpc_prediction(int32_t *error_buffer, int32_t *buffer_out, int nb_samples, int bps, int16_t *lpc_coefs, int lpc_order, int lpc_quant)
Definition: alac.c:173
av_default_item_name
#define AVERROR(e)
Definition: error.h:43
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:176
static int sign_only(int v)
Definition: alac.c:168
AlacRawDataBlockType
Definition: alac_data.h:26
const char * name
Name of the codec implementation.
Definition: avcodec.h:3607
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: avcodec.h:1022
uint64_t channel_layout
Audio channel layout.
Definition: avcodec.h:2489
#define ALAC_MAX_CHANNELS
Definition: alac_data.h:38
uint32_t max_samples_per_frame
Definition: alac.c:74
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified.
Definition: internal.h:215
audio channel layout utility functions
#define FFMIN(a, b)
Definition: common.h:96
signed 32 bits, planar
Definition: samplefmt.h:68
#define FFSIGN(a)
Definition: common.h:73
GetBitContext gb
Definition: alac.c:67
int32_t
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:282
ALACDSPContext dsp
Definition: alac.c:86
static int alac_set_info(ALACContext *alac)
Definition: alac.c:515
uint8_t rice_history_mult
Definition: alac.c:76
const uint64_t ff_alac_channel_layouts[ALAC_MAX_CHANNELS+1]
Definition: alac_data.c:35
static const float pred[4]
Definition: siprdata.h:259
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:62
Libavcodec external API header.
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:437
int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
Wrapper around get_buffer() for frame-multithreaded codecs.
main external API structure.
Definition: avcodec.h:1676
int extradata_size
Definition: avcodec.h:1792
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:299
Describe the class of an AVClass context structure.
Definition: log.h:67
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:292
static unsigned int decode_scalar(GetBitContext *gb, int k, int bps)
Definition: alac.c:89
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding
Definition: opt.h:276
void(* append_extra_bits[2])(int32_t *buffer[2], int32_t *extra_bits_buffer[2], int extra_bits, int channels, int nb_samples)
Definition: alacdsp.h:27
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:332
const uint8_t ff_alac_channel_layout_offsets[ALAC_MAX_CHANNELS][ALAC_MAX_CHANNELS]
Definition: alac_data.c:24
static av_const int sign_extend(int val, unsigned bits)
Definition: mathops.h:139
uint8_t sample_size
Definition: alac.c:75
int channels
Definition: alac.c:68
AVCodec ff_alac_decoder
Definition: alac.c:623
common internal api header.
static av_cold int alac_decode_init(AVCodecContext *avctx)
Definition: alac.c:546
#define FF_ALLOC_OR_GOTO(ctx, p, size, label)
Definition: internal.h:130
uint8_t rice_limit
Definition: alac.c:78
uint8_t pi<< 24) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_U8,(uint64_t)((*(constuint8_t *) pi-0x80U))<< 56) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S16,(uint64_t)(*(constint16_t *) pi)<< 48) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S32,(uint64_t)(*(constint32_t *) pi)<< 32) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S64,(*(constint64_t *) pi >>56)+0x80) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S64,*(constint64_t *) pi *(1.0f/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S64,*(constint64_t *) pi *(1.0/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_FLT, llrintf(*(constfloat *) pi *(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_DBL, llrint(*(constdouble *) pi *(INT64_C(1)<< 63)))#defineFMT_PAIR_FUNC(out, in) staticconv_func_type *constfmt_pair_to_conv_functions[AV_SAMPLE_FMT_NB *AV_SAMPLE_FMT_NB]={FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S64),};staticvoidcpy1(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, len);}staticvoidcpy2(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, 2 *len);}staticvoidcpy4(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, 4 *len);}staticvoidcpy8(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, 8 *len);}AudioConvert *swri_audio_convert_alloc(enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, constint *ch_map, intflags){AudioConvert *ctx;conv_func_type *f=fmt_pair_to_conv_functions[av_get_packed_sample_fmt(out_fmt)+AV_SAMPLE_FMT_NB *av_get_packed_sample_fmt(in_fmt)];if(!f) returnNULL;ctx=av_mallocz(sizeof(*ctx));if(!ctx) returnNULL;if(channels==1){in_fmt=av_get_planar_sample_fmt(in_fmt);out_fmt=av_get_planar_sample_fmt(out_fmt);}ctx->channels=channels;ctx->conv_f=f;ctx->ch_map=ch_map;if(in_fmt==AV_SAMPLE_FMT_U8||in_fmt==AV_SAMPLE_FMT_U8P) memset(ctx->silence, 0x80, sizeof(ctx->silence));if(out_fmt==in_fmt &&!ch_map){switch(av_get_bytes_per_sample(in_fmt)){case1:ctx->simd_f=cpy1;break;case2:ctx->simd_f=cpy2;break;case4:ctx->simd_f=cpy4;break;case8:ctx->simd_f=cpy8;break;}}if(HAVE_YASM &&1) swri_audio_convert_init_x86(ctx, out_fmt, in_fmt, channels);if(ARCH_ARM) swri_audio_convert_init_arm(ctx, out_fmt, in_fmt, channels);if(ARCH_AARCH64) swri_audio_convert_init_aarch64(ctx, out_fmt, in_fmt, channels);returnctx;}voidswri_audio_convert_free(AudioConvert **ctx){av_freep(ctx);}intswri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, intlen){intch;intoff=0;constintos=(out->planar?1:out->ch_count)*out->bps;unsignedmisaligned=0;av_assert0(ctx->channels==out->ch_count);if(ctx->in_simd_align_mask){intplanes=in->planar?in->ch_count:1;unsignedm=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) in->ch[ch];misaligned|=m &ctx->in_simd_align_mask;}if(ctx->out_simd_align_mask){intplanes=out->planar?out->ch_count:1;unsignedm=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) out->ch[ch];misaligned|=m &ctx->out_simd_align_mask;}if(ctx->simd_f &&!ctx->ch_map &&!misaligned){off=len &~15;av_assert1(off >=0);av_assert1(off<=len);av_assert2(ctx->channels==SWR_CH_MAX||!in->ch[ctx->channels]);if(off >0){if(out->planar==in->planar){intplanes=out->planar?out->ch_count:1;for(ch=0;ch< planes;ch++){ctx->simd_f(out-> ch ch
Definition: audioconvert.c:56
unsigned bps
Definition: movenc.c:1383
void(* decorrelate_stereo)(int32_t *buffer[2], int nb_samples, int decorr_shift, int decorr_left_weight)
Definition: alacdsp.h:25
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
Definition: avcodec.h:734
void * priv_data
Definition: avcodec.h:1718
static int allocate_buffers(ALACContext *alac)
Definition: alac.c:485
int channels
number of audio channels
Definition: avcodec.h:2439
AVCodecContext * avctx
Definition: alac.c:66
static int rice_decompress(ALACContext *alac, int32_t *output_buffer, int nb_samples, int bps, int rice_history_mult)
Definition: alac.c:111
#define av_freep(p)
signed 16 bits, planar
Definition: samplefmt.h:67
static int decode(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
Definition: ffmpeg.c:2035
uint8_t ** extended_data
pointers to the data planes/channels.
Definition: frame.h:231
av_cold void ff_alacdsp_init(ALACDSPContext *c)
Definition: alacdsp.c:55
int direct_output
Definition: alac.c:83
This structure stores compressed data.
Definition: avcodec.h:1578
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:241
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:959
for(j=16;j >0;--j)