FFmpeg  3.4.9
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 
80 
81  int extra_bits; /**< number of extra bits beyond 16-bit */
82  int nb_samples; /**< number of samples in the current frame */
83 
86 
88 } ALACContext;
89 
90 static inline unsigned int decode_scalar(GetBitContext *gb, int k, int bps)
91 {
92  unsigned int x = get_unary_0_9(gb);
93 
94  if (x > 8) { /* RICE THRESHOLD */
95  /* use alternative encoding */
96  x = get_bits_long(gb, bps);
97  } else if (k != 1) {
98  int extrabits = show_bits(gb, k);
99 
100  /* multiply x by 2^k - 1, as part of their strange algorithm */
101  x = (x << k) - x;
102 
103  if (extrabits > 1) {
104  x += extrabits - 1;
105  skip_bits(gb, k);
106  } else
107  skip_bits(gb, k - 1);
108  }
109  return x;
110 }
111 
112 static int rice_decompress(ALACContext *alac, int32_t *output_buffer,
113  int nb_samples, int bps, int rice_history_mult)
114 {
115  int i;
116  unsigned int history = alac->rice_initial_history;
117  int sign_modifier = 0;
118 
119  for (i = 0; i < nb_samples; i++) {
120  int k;
121  unsigned int x;
122 
123  if(get_bits_left(&alac->gb) <= 0)
124  return -1;
125 
126  /* calculate rice param and decode next value */
127  k = av_log2((history >> 9) + 3);
128  k = FFMIN(k, alac->rice_limit);
129  x = decode_scalar(&alac->gb, k, bps);
130  x += sign_modifier;
131  sign_modifier = 0;
132  output_buffer[i] = (x >> 1) ^ -(x & 1);
133 
134  /* update the history */
135  if (x > 0xffff)
136  history = 0xffff;
137  else
138  history += x * rice_history_mult -
139  ((history * rice_history_mult) >> 9);
140 
141  /* special case: there may be compressed blocks of 0 */
142  if ((history < 128) && (i + 1 < nb_samples)) {
143  int block_size;
144 
145  /* calculate rice param and decode block size */
146  k = 7 - av_log2(history) + ((history + 16) >> 6);
147  k = FFMIN(k, alac->rice_limit);
148  block_size = decode_scalar(&alac->gb, k, 16);
149 
150  if (block_size > 0) {
151  if (block_size >= nb_samples - i) {
152  av_log(alac->avctx, AV_LOG_ERROR,
153  "invalid zero block size of %d %d %d\n", block_size,
154  nb_samples, i);
155  block_size = nb_samples - i - 1;
156  }
157  memset(&output_buffer[i + 1], 0,
158  block_size * sizeof(*output_buffer));
159  i += block_size;
160  }
161  if (block_size <= 0xffff)
162  sign_modifier = 1;
163  history = 0;
164  }
165  }
166  return 0;
167 }
168 
169 static inline int sign_only(int v)
170 {
171  return v ? FFSIGN(v) : 0;
172 }
173 
174 static void lpc_prediction(int32_t *error_buffer, uint32_t *buffer_out,
175  int nb_samples, int bps, int16_t *lpc_coefs,
176  int lpc_order, int lpc_quant)
177 {
178  int i;
179  uint32_t *pred = buffer_out;
180 
181  /* first sample always copies */
182  *buffer_out = *error_buffer;
183 
184  if (nb_samples <= 1)
185  return;
186 
187  if (!lpc_order) {
188  memcpy(&buffer_out[1], &error_buffer[1],
189  (nb_samples - 1) * sizeof(*buffer_out));
190  return;
191  }
192 
193  if (lpc_order == 31) {
194  /* simple 1st-order prediction */
195  for (i = 1; i < nb_samples; i++) {
196  buffer_out[i] = sign_extend(buffer_out[i - 1] + error_buffer[i],
197  bps);
198  }
199  return;
200  }
201 
202  /* read warm-up samples */
203  for (i = 1; i <= lpc_order && i < nb_samples; i++)
204  buffer_out[i] = sign_extend(buffer_out[i - 1] + error_buffer[i], bps);
205 
206  /* NOTE: 4 and 8 are very common cases that could be optimized. */
207 
208  for (; i < nb_samples; i++) {
209  int j;
210  int val = 0;
211  unsigned error_val = error_buffer[i];
212  int error_sign;
213  int d = *pred++;
214 
215  /* LPC prediction */
216  for (j = 0; j < lpc_order; j++)
217  val += (pred[j] - d) * lpc_coefs[j];
218  val = (val + (1LL << (lpc_quant - 1))) >> lpc_quant;
219  val += d + error_val;
220  buffer_out[i] = sign_extend(val, bps);
221 
222  /* adapt LPC coefficients */
223  error_sign = sign_only(error_val);
224  if (error_sign) {
225  for (j = 0; j < lpc_order && (int)(error_val * error_sign) > 0; j++) {
226  int sign;
227  val = d - pred[j];
228  sign = sign_only(val) * error_sign;
229  lpc_coefs[j] -= sign;
230  val *= (unsigned)sign;
231  error_val -= (val >> lpc_quant) * (j + 1U);
232  }
233  }
234  }
235 }
236 
237 static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index,
238  int channels)
239 {
240  ALACContext *alac = avctx->priv_data;
241  int has_size, bps, is_compressed, decorr_shift, decorr_left_weight, ret;
242  uint32_t output_samples;
243  int i, ch;
244 
245  skip_bits(&alac->gb, 4); /* element instance tag */
246  skip_bits(&alac->gb, 12); /* unused header bits */
247 
248  /* the number of output samples is stored in the frame */
249  has_size = get_bits1(&alac->gb);
250 
251  alac->extra_bits = get_bits(&alac->gb, 2) << 3;
252  bps = alac->sample_size - alac->extra_bits + channels - 1;
253  if (bps > 32) {
254  avpriv_report_missing_feature(avctx, "bps %d", bps);
255  return AVERROR_PATCHWELCOME;
256  }
257  if (bps < 1)
258  return AVERROR_INVALIDDATA;
259 
260  /* whether the frame is compressed */
261  is_compressed = !get_bits1(&alac->gb);
262 
263  if (has_size)
264  output_samples = get_bits_long(&alac->gb, 32);
265  else
266  output_samples = alac->max_samples_per_frame;
267  if (!output_samples || output_samples > alac->max_samples_per_frame) {
268  av_log(avctx, AV_LOG_ERROR, "invalid samples per frame: %"PRIu32"\n",
269  output_samples);
270  return AVERROR_INVALIDDATA;
271  }
272  if (!alac->nb_samples) {
273  ThreadFrame tframe = { .f = frame };
274  /* get output buffer */
275  frame->nb_samples = output_samples;
276  if ((ret = ff_thread_get_buffer(avctx, &tframe, 0)) < 0)
277  return ret;
278  } else if (output_samples != alac->nb_samples) {
279  av_log(avctx, AV_LOG_ERROR, "sample count mismatch: %"PRIu32" != %d\n",
280  output_samples, alac->nb_samples);
281  return AVERROR_INVALIDDATA;
282  }
283  alac->nb_samples = output_samples;
284  if (alac->direct_output) {
285  for (ch = 0; ch < channels; ch++)
286  alac->output_samples_buffer[ch] = (int32_t *)frame->extended_data[ch_index + ch];
287  }
288 
289  if (is_compressed) {
290  int16_t lpc_coefs[2][32];
291  int lpc_order[2];
292  int prediction_type[2];
293  int lpc_quant[2];
294  int rice_history_mult[2];
295 
296  if (!alac->rice_limit) {
298  "Compression with rice limit 0");
299  return AVERROR(ENOSYS);
300  }
301 
302  decorr_shift = get_bits(&alac->gb, 8);
303  decorr_left_weight = get_bits(&alac->gb, 8);
304 
305  if (channels == 2 && decorr_left_weight && decorr_shift > 31)
306  return AVERROR_INVALIDDATA;
307 
308  for (ch = 0; ch < channels; ch++) {
309  prediction_type[ch] = get_bits(&alac->gb, 4);
310  lpc_quant[ch] = get_bits(&alac->gb, 4);
311  rice_history_mult[ch] = get_bits(&alac->gb, 3);
312  lpc_order[ch] = get_bits(&alac->gb, 5);
313 
314  if (lpc_order[ch] >= alac->max_samples_per_frame || !lpc_quant[ch])
315  return AVERROR_INVALIDDATA;
316 
317  /* read the predictor table */
318  for (i = lpc_order[ch] - 1; i >= 0; i--)
319  lpc_coefs[ch][i] = get_sbits(&alac->gb, 16);
320  }
321 
322  if (alac->extra_bits) {
323  for (i = 0; i < alac->nb_samples; i++) {
324  if(get_bits_left(&alac->gb) <= 0)
325  return -1;
326  for (ch = 0; ch < channels; ch++)
327  alac->extra_bits_buffer[ch][i] = get_bits(&alac->gb, alac->extra_bits);
328  }
329  }
330  for (ch = 0; ch < channels; ch++) {
331  int ret=rice_decompress(alac, alac->predict_error_buffer[ch],
332  alac->nb_samples, bps,
333  rice_history_mult[ch] * alac->rice_history_mult / 4);
334  if(ret<0)
335  return ret;
336 
337  /* adaptive FIR filter */
338  if (prediction_type[ch] == 15) {
339  /* Prediction type 15 runs the adaptive FIR twice.
340  * The first pass uses the special-case coef_num = 31, while
341  * the second pass uses the coefs from the bitstream.
342  *
343  * However, this prediction type is not currently used by the
344  * reference encoder.
345  */
347  alac->predict_error_buffer[ch],
348  alac->nb_samples, bps, NULL, 31, 0);
349  } else if (prediction_type[ch] > 0) {
350  av_log(avctx, AV_LOG_WARNING, "unknown prediction type: %i\n",
351  prediction_type[ch]);
352  }
354  alac->output_samples_buffer[ch], alac->nb_samples,
355  bps, lpc_coefs[ch], lpc_order[ch], lpc_quant[ch]);
356  }
357  } else {
358  /* not compressed, easy case */
359  for (i = 0; i < alac->nb_samples; i++) {
360  if(get_bits_left(&alac->gb) <= 0)
361  return -1;
362  for (ch = 0; ch < channels; ch++) {
363  alac->output_samples_buffer[ch][i] =
364  get_sbits_long(&alac->gb, alac->sample_size);
365  }
366  }
367  alac->extra_bits = 0;
368  decorr_shift = 0;
369  decorr_left_weight = 0;
370  }
371 
372  if (channels == 2) {
373  if (alac->extra_bits && alac->extra_bit_bug) {
375  alac->extra_bits, channels, alac->nb_samples);
376  }
377 
378  if (decorr_left_weight) {
380  decorr_shift, decorr_left_weight);
381  }
382 
383  if (alac->extra_bits && !alac->extra_bit_bug) {
385  alac->extra_bits, channels, alac->nb_samples);
386  }
387  } else if (alac->extra_bits) {
389  alac->extra_bits, channels, alac->nb_samples);
390  }
391 
392  switch(alac->sample_size) {
393  case 16: {
394  for (ch = 0; ch < channels; ch++) {
395  int16_t *outbuffer = (int16_t *)frame->extended_data[ch_index + ch];
396  for (i = 0; i < alac->nb_samples; i++)
397  *outbuffer++ = alac->output_samples_buffer[ch][i];
398  }}
399  break;
400  case 20: {
401  for (ch = 0; ch < channels; ch++) {
402  for (i = 0; i < alac->nb_samples; i++)
403  alac->output_samples_buffer[ch][i] *= 1U << 12;
404  }}
405  break;
406  case 24: {
407  for (ch = 0; ch < channels; ch++) {
408  for (i = 0; i < alac->nb_samples; i++)
409  alac->output_samples_buffer[ch][i] *= 1U << 8;
410  }}
411  break;
412  }
413 
414  return 0;
415 }
416 
418  int *got_frame_ptr, AVPacket *avpkt)
419 {
420  ALACContext *alac = avctx->priv_data;
421  AVFrame *frame = data;
422  enum AlacRawDataBlockType element;
423  int channels;
424  int ch, ret, got_end;
425 
426  if ((ret = init_get_bits8(&alac->gb, avpkt->data, avpkt->size)) < 0)
427  return ret;
428 
429  got_end = 0;
430  alac->nb_samples = 0;
431  ch = 0;
432  while (get_bits_left(&alac->gb) >= 3) {
433  element = get_bits(&alac->gb, 3);
434  if (element == TYPE_END) {
435  got_end = 1;
436  break;
437  }
438  if (element > TYPE_CPE && element != TYPE_LFE) {
439  avpriv_report_missing_feature(avctx, "Syntax element %d", element);
440  return AVERROR_PATCHWELCOME;
441  }
442 
443  channels = (element == TYPE_CPE) ? 2 : 1;
444  if (ch + channels > alac->channels ||
445  ff_alac_channel_layout_offsets[alac->channels - 1][ch] + channels > alac->channels) {
446  av_log(avctx, AV_LOG_ERROR, "invalid element channel count\n");
447  return AVERROR_INVALIDDATA;
448  }
449 
450  ret = decode_element(avctx, frame,
452  channels);
453  if (ret < 0 && get_bits_left(&alac->gb))
454  return ret;
455 
456  ch += channels;
457  }
458  if (!got_end) {
459  av_log(avctx, AV_LOG_ERROR, "no end tag found. incomplete packet.\n");
460  return AVERROR_INVALIDDATA;
461  }
462 
463  if (avpkt->size * 8 - get_bits_count(&alac->gb) > 8) {
464  av_log(avctx, AV_LOG_ERROR, "Error : %d bits left\n",
465  avpkt->size * 8 - get_bits_count(&alac->gb));
466  }
467 
468  if (alac->channels == ch && alac->nb_samples)
469  *got_frame_ptr = 1;
470  else
471  av_log(avctx, AV_LOG_WARNING, "Failed to decode all channels\n");
472 
473  return avpkt->size;
474 }
475 
477 {
478  ALACContext *alac = avctx->priv_data;
479 
480  int ch;
481  for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) {
482  av_freep(&alac->predict_error_buffer[ch]);
483  if (!alac->direct_output)
484  av_freep(&alac->output_samples_buffer[ch]);
485  av_freep(&alac->extra_bits_buffer[ch]);
486  }
487 
488  return 0;
489 }
490 
491 static int allocate_buffers(ALACContext *alac)
492 {
493  int ch;
494  int buf_size = alac->max_samples_per_frame * sizeof(int32_t);
495 
496  for (ch = 0; ch < 2; ch++) {
497  alac->predict_error_buffer[ch] = NULL;
498  alac->output_samples_buffer[ch] = NULL;
499  alac->extra_bits_buffer[ch] = NULL;
500  }
501 
502  for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) {
504  buf_size, buf_alloc_fail);
505 
506  alac->direct_output = alac->sample_size > 16;
507  if (!alac->direct_output) {
509  buf_size + AV_INPUT_BUFFER_PADDING_SIZE, buf_alloc_fail);
510  }
511 
512  FF_ALLOC_OR_GOTO(alac->avctx, alac->extra_bits_buffer[ch],
513  buf_size + AV_INPUT_BUFFER_PADDING_SIZE, buf_alloc_fail);
514  }
515  return 0;
516 buf_alloc_fail:
517  alac_decode_close(alac->avctx);
518  return AVERROR(ENOMEM);
519 }
520 
521 static int alac_set_info(ALACContext *alac)
522 {
524 
525  bytestream2_init(&gb, alac->avctx->extradata,
526  alac->avctx->extradata_size);
527 
528  bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4
529 
530  alac->max_samples_per_frame = bytestream2_get_be32u(&gb);
531  if (!alac->max_samples_per_frame ||
532  alac->max_samples_per_frame > INT_MAX / sizeof(int32_t)) {
533  av_log(alac->avctx, AV_LOG_ERROR,
534  "max samples per frame invalid: %"PRIu32"\n",
535  alac->max_samples_per_frame);
536  return AVERROR_INVALIDDATA;
537  }
538  bytestream2_skipu(&gb, 1); // compatible version
539  alac->sample_size = bytestream2_get_byteu(&gb);
540  alac->rice_history_mult = bytestream2_get_byteu(&gb);
541  alac->rice_initial_history = bytestream2_get_byteu(&gb);
542  alac->rice_limit = bytestream2_get_byteu(&gb);
543  alac->channels = bytestream2_get_byteu(&gb);
544  bytestream2_get_be16u(&gb); // maxRun
545  bytestream2_get_be32u(&gb); // max coded frame size
546  bytestream2_get_be32u(&gb); // average bitrate
547  alac->sample_rate = bytestream2_get_be32u(&gb);
548 
549  return 0;
550 }
551 
553 {
554  int ret;
555  ALACContext *alac = avctx->priv_data;
556  alac->avctx = avctx;
557 
558  /* initialize from the extradata */
560  av_log(avctx, AV_LOG_ERROR, "extradata is too small\n");
561  return AVERROR_INVALIDDATA;
562  }
563  if (alac_set_info(alac)) {
564  av_log(avctx, AV_LOG_ERROR, "set_info failed\n");
565  return -1;
566  }
567 
568  switch (alac->sample_size) {
569  case 16: avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
570  break;
571  case 20:
572  case 24:
573  case 32: avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
574  break;
575  default: avpriv_request_sample(avctx, "Sample depth %d", alac->sample_size);
576  return AVERROR_PATCHWELCOME;
577  }
578  avctx->bits_per_raw_sample = alac->sample_size;
579  avctx->sample_rate = alac->sample_rate;
580 
581  if (alac->channels < 1) {
582  av_log(avctx, AV_LOG_WARNING, "Invalid channel count\n");
583  alac->channels = avctx->channels;
584  } else {
585  if (alac->channels > ALAC_MAX_CHANNELS)
586  alac->channels = avctx->channels;
587  else
588  avctx->channels = alac->channels;
589  }
590  if (avctx->channels > ALAC_MAX_CHANNELS || avctx->channels <= 0 ) {
591  avpriv_report_missing_feature(avctx, "Channel count %d",
592  avctx->channels);
593  return AVERROR_PATCHWELCOME;
594  }
595  avctx->channel_layout = ff_alac_channel_layouts[alac->channels - 1];
596 
597  if ((ret = allocate_buffers(alac)) < 0) {
598  av_log(avctx, AV_LOG_ERROR, "Error allocating buffers\n");
599  return ret;
600  }
601 
602  ff_alacdsp_init(&alac->dsp);
603 
604  return 0;
605 }
606 
607 #if HAVE_THREADS
609 {
610  ALACContext *alac = avctx->priv_data;
611  alac->avctx = avctx;
612  return allocate_buffers(alac);
613 }
614 #endif
615 
616 static const AVOption options[] = {
617  { "extra_bits_bug", "Force non-standard decoding process",
618  offsetof(ALACContext, extra_bit_bug), AV_OPT_TYPE_BOOL, { .i64 = 0 },
620  { NULL },
621 };
622 
623 static const AVClass alac_class = {
624  .class_name = "alac",
625  .item_name = av_default_item_name,
626  .option = options,
627  .version = LIBAVUTIL_VERSION_INT,
628 };
629 
631  .name = "alac",
632  .long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"),
633  .type = AVMEDIA_TYPE_AUDIO,
634  .id = AV_CODEC_ID_ALAC,
635  .priv_data_size = sizeof(ALACContext),
637  .close = alac_decode_close,
641  .priv_class = &alac_class
642 };
int extra_bit_bug
Definition: alac.c:85
#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:82
This structure describes decoded (raw) audio or video data.
Definition: frame.h:201
#define ALAC_EXTRADATA_SIZE
Definition: alac.c:62
AVOption.
Definition: opt.h:246
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:262
#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:237
#define LIBAVUTIL_VERSION_INT
Definition: version.h:86
Definition: aac.h:63
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
#define avpriv_request_sample(...)
Definition: aac.h:57
#define AV_OPT_FLAG_AUDIO_PARAM
Definition: opt.h:281
int size
Definition: avcodec.h:1680
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:616
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
Definition: avcodec.h:3164
int32_t * extra_bits_buffer[2]
Definition: alac.c:72
AVCodec.
Definition: avcodec.h:3739
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:247
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:42
static int get_sbits_long(GetBitContext *s, int n)
Read 0-32 bits as a signed integer.
Definition: get_bits.h:386
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:64
enum AVSampleFormat sample_fmt
audio sample format
Definition: avcodec.h:2531
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:476
Multithreading support functions.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:1876
static AVFrame * frame
const char data[16]
Definition: mxf.c:90
uint8_t * data
Definition: avcodec.h:1679
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:200
static av_always_inline void bytestream2_skipu(GetByteContext *g, unsigned int size)
Definition: bytestream.h:170
static const AVClass alac_class
Definition: alac.c:623
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:417
int sample_rate
Definition: alac.c:79
int extra_bits
number of extra bits beyond 16-bit
Definition: alac.c:81
#define av_log(a,...)
#define U(x)
Definition: vp56_arith.h:37
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:589
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
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:181
static int sign_only(int v)
Definition: alac.c:169
AlacRawDataBlockType
Definition: alac_data.h:26
const char * name
Name of the codec implementation.
Definition: avcodec.h:3746
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: avcodec.h:1065
uint64_t channel_layout
Audio channel layout.
Definition: avcodec.h:2574
#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:220
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:297
ALACDSPContext dsp
Definition: alac.c:87
static int alac_set_info(ALACContext *alac)
Definition: alac.c:521
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
#define av_log2
Definition: intmath.h:83
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.
int sample_rate
samples per second
Definition: avcodec.h:2523
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:457
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:1761
int extradata_size
Definition: avcodec.h:1877
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:314
Describe the class of an AVClass context structure.
Definition: log.h:67
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:307
static unsigned int decode_scalar(GetBitContext *gb, int k, int bps)
Definition: alac.c:90
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding
Definition: opt.h:277
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
uint8_t pi<< 24) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_U8,(uint64_t)((*(const uint8_t *) pi - 0x80U))<< 56) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16,(*(const int16_t *) pi >>8)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S16,(uint64_t)(*(const int16_t *) pi)<< 48) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32,(*(const int32_t *) pi >>24)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S32,(uint64_t)(*(const int32_t *) pi)<< 32) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S64,(*(const int64_t *) pi >>56)+0x80) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0f/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S64, *(const int64_t *) pi *(1.0/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_FLT, llrintf(*(const float *) pi *(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_DBL, llrint(*(const double *) pi *(INT64_C(1)<< 63))) #define FMT_PAIR_FUNC(out, in) static conv_func_type *const fmt_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), };static void cpy1(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, len);} static void cpy2(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 2 *len);} static void cpy4(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 4 *len);} static void cpy8(uint8_t **dst, const uint8_t **src, int len){ memcpy(*dst, *src, 8 *len);} AudioConvert *swri_audio_convert_alloc(enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, const int *ch_map, int flags) { 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) return NULL;ctx=av_mallocz(sizeof(*ctx));if(!ctx) return NULL;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)){ case 1:ctx->simd_f=cpy1;break;case 2:ctx->simd_f=cpy2;break;case 4:ctx->simd_f=cpy4;break;case 8:ctx->simd_f=cpy8;break;} } if(HAVE_X86ASM &&HAVE_MMX) 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);return ctx;} void swri_audio_convert_free(AudioConvert **ctx) { av_freep(ctx);} int swri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, int len) { int ch;int off=0;const int os=(out->planar ? 1 :out->ch_count) *out->bps;unsigned misaligned=0;av_assert0(ctx->channels==out->ch_count);if(ctx->in_simd_align_mask) { int planes=in->planar ? in->ch_count :1;unsigned m=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) { int planes=out->planar ? out->ch_count :1;unsigned m=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){ int planes=out->planar ? out->ch_count :1;for(ch=0;ch< planes;ch++){ ctx->simd_f(out-> ch ch
Definition: audioconvert.c:56
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:347
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:130
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
void(* decorrelate_stereo)(int32_t *buffer[2], int nb_samples, int decorr_shift, int decorr_left_weight)
Definition: alacdsp.h:25
uint8_t sample_size
Definition: alac.c:75
int channels
Definition: alac.c:68
AVCodec ff_alac_decoder
Definition: alac.c:630
common internal api header.
static av_cold int alac_decode_init(AVCodecContext *avctx)
Definition: alac.c:552
#define FF_ALLOC_OR_GOTO(ctx, p, size, label)
Definition: internal.h:133
uint8_t rice_limit
Definition: alac.c:78
unsigned bps
Definition: movenc.c:1415
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
Definition: avcodec.h:777
void * priv_data
Definition: avcodec.h:1803
static int allocate_buffers(ALACContext *alac)
Definition: alac.c:491
int channels
number of audio channels
Definition: avcodec.h:2524
AVCodecContext * avctx
Definition: alac.c:66
static void lpc_prediction(int32_t *error_buffer, uint32_t *buffer_out, int nb_samples, int bps, int16_t *lpc_coefs, int lpc_order, int lpc_quant)
Definition: alac.c:174
static int rice_decompress(ALACContext *alac, int32_t *output_buffer, int nb_samples, int bps, int rice_history_mult)
Definition: alac.c:112
#define av_freep(p)
signed 16 bits, planar
Definition: samplefmt.h:67
uint8_t ** extended_data
pointers to the data planes/channels.
Definition: frame.h:248
av_cold void ff_alacdsp_init(ALACDSPContext *c)
Definition: alacdsp.c:55
int direct_output
Definition: alac.c:84
This structure stores compressed data.
Definition: avcodec.h:1656
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:267
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:1002
for(j=16;j >0;--j)