FFmpeg  4.1.5
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 + 1);
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  for (ch = 0; ch < channels; ch++) {
306  prediction_type[ch] = get_bits(&alac->gb, 4);
307  lpc_quant[ch] = get_bits(&alac->gb, 4);
308  rice_history_mult[ch] = get_bits(&alac->gb, 3);
309  lpc_order[ch] = get_bits(&alac->gb, 5);
310 
311  if (lpc_order[ch] >= alac->max_samples_per_frame || !lpc_quant[ch])
312  return AVERROR_INVALIDDATA;
313 
314  /* read the predictor table */
315  for (i = lpc_order[ch] - 1; i >= 0; i--)
316  lpc_coefs[ch][i] = get_sbits(&alac->gb, 16);
317  }
318 
319  if (alac->extra_bits) {
320  for (i = 0; i < alac->nb_samples; i++) {
321  if(get_bits_left(&alac->gb) <= 0)
322  return -1;
323  for (ch = 0; ch < channels; ch++)
324  alac->extra_bits_buffer[ch][i] = get_bits(&alac->gb, alac->extra_bits);
325  }
326  }
327  for (ch = 0; ch < channels; ch++) {
328  int ret=rice_decompress(alac, alac->predict_error_buffer[ch],
329  alac->nb_samples, bps,
330  rice_history_mult[ch] * alac->rice_history_mult / 4);
331  if(ret<0)
332  return ret;
333 
334  /* adaptive FIR filter */
335  if (prediction_type[ch] == 15) {
336  /* Prediction type 15 runs the adaptive FIR twice.
337  * The first pass uses the special-case coef_num = 31, while
338  * the second pass uses the coefs from the bitstream.
339  *
340  * However, this prediction type is not currently used by the
341  * reference encoder.
342  */
344  alac->predict_error_buffer[ch],
345  alac->nb_samples, bps, NULL, 31, 0);
346  } else if (prediction_type[ch] > 0) {
347  av_log(avctx, AV_LOG_WARNING, "unknown prediction type: %i\n",
348  prediction_type[ch]);
349  }
351  alac->output_samples_buffer[ch], alac->nb_samples,
352  bps, lpc_coefs[ch], lpc_order[ch], lpc_quant[ch]);
353  }
354  } else {
355  /* not compressed, easy case */
356  for (i = 0; i < alac->nb_samples; i++) {
357  if(get_bits_left(&alac->gb) <= 0)
358  return -1;
359  for (ch = 0; ch < channels; ch++) {
360  alac->output_samples_buffer[ch][i] =
361  get_sbits_long(&alac->gb, alac->sample_size);
362  }
363  }
364  alac->extra_bits = 0;
365  decorr_shift = 0;
366  decorr_left_weight = 0;
367  }
368 
369  if (channels == 2) {
370  if (alac->extra_bits && alac->extra_bit_bug) {
372  alac->extra_bits, channels, alac->nb_samples);
373  }
374 
375  if (decorr_left_weight) {
377  decorr_shift, decorr_left_weight);
378  }
379 
380  if (alac->extra_bits && !alac->extra_bit_bug) {
382  alac->extra_bits, channels, alac->nb_samples);
383  }
384  } else if (alac->extra_bits) {
386  alac->extra_bits, channels, alac->nb_samples);
387  }
388 
389  switch(alac->sample_size) {
390  case 16: {
391  for (ch = 0; ch < channels; ch++) {
392  int16_t *outbuffer = (int16_t *)frame->extended_data[ch_index + ch];
393  for (i = 0; i < alac->nb_samples; i++)
394  *outbuffer++ = alac->output_samples_buffer[ch][i];
395  }}
396  break;
397  case 20: {
398  for (ch = 0; ch < channels; ch++) {
399  for (i = 0; i < alac->nb_samples; i++)
400  alac->output_samples_buffer[ch][i] *= 1 << 12;
401  }}
402  break;
403  case 24: {
404  for (ch = 0; ch < channels; ch++) {
405  for (i = 0; i < alac->nb_samples; i++)
406  alac->output_samples_buffer[ch][i] *= 1 << 8;
407  }}
408  break;
409  }
410 
411  return 0;
412 }
413 
415  int *got_frame_ptr, AVPacket *avpkt)
416 {
417  ALACContext *alac = avctx->priv_data;
418  AVFrame *frame = data;
419  enum AlacRawDataBlockType element;
420  int channels;
421  int ch, ret, got_end;
422 
423  if ((ret = init_get_bits8(&alac->gb, avpkt->data, avpkt->size)) < 0)
424  return ret;
425 
426  got_end = 0;
427  alac->nb_samples = 0;
428  ch = 0;
429  while (get_bits_left(&alac->gb) >= 3) {
430  element = get_bits(&alac->gb, 3);
431  if (element == TYPE_END) {
432  got_end = 1;
433  break;
434  }
435  if (element > TYPE_CPE && element != TYPE_LFE) {
436  avpriv_report_missing_feature(avctx, "Syntax element %d", element);
437  return AVERROR_PATCHWELCOME;
438  }
439 
440  channels = (element == TYPE_CPE) ? 2 : 1;
441  if (ch + channels > alac->channels ||
442  ff_alac_channel_layout_offsets[alac->channels - 1][ch] + channels > alac->channels) {
443  av_log(avctx, AV_LOG_ERROR, "invalid element channel count\n");
444  return AVERROR_INVALIDDATA;
445  }
446 
447  ret = decode_element(avctx, frame,
449  channels);
450  if (ret < 0 && get_bits_left(&alac->gb))
451  return ret;
452 
453  ch += channels;
454  }
455  if (!got_end) {
456  av_log(avctx, AV_LOG_ERROR, "no end tag found. incomplete packet.\n");
457  return AVERROR_INVALIDDATA;
458  }
459 
460  if (avpkt->size * 8 - get_bits_count(&alac->gb) > 8) {
461  av_log(avctx, AV_LOG_ERROR, "Error : %d bits left\n",
462  avpkt->size * 8 - get_bits_count(&alac->gb));
463  }
464 
465  if (alac->channels == ch && alac->nb_samples)
466  *got_frame_ptr = 1;
467  else
468  av_log(avctx, AV_LOG_WARNING, "Failed to decode all channels\n");
469 
470  return avpkt->size;
471 }
472 
474 {
475  ALACContext *alac = avctx->priv_data;
476 
477  int ch;
478  for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) {
479  av_freep(&alac->predict_error_buffer[ch]);
480  if (!alac->direct_output)
481  av_freep(&alac->output_samples_buffer[ch]);
482  av_freep(&alac->extra_bits_buffer[ch]);
483  }
484 
485  return 0;
486 }
487 
488 static int allocate_buffers(ALACContext *alac)
489 {
490  int ch;
491  int buf_size = alac->max_samples_per_frame * sizeof(int32_t);
492 
493  for (ch = 0; ch < 2; ch++) {
494  alac->predict_error_buffer[ch] = NULL;
495  alac->output_samples_buffer[ch] = NULL;
496  alac->extra_bits_buffer[ch] = NULL;
497  }
498 
499  for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) {
501  buf_size, buf_alloc_fail);
502 
503  alac->direct_output = alac->sample_size > 16;
504  if (!alac->direct_output) {
506  buf_size + AV_INPUT_BUFFER_PADDING_SIZE, buf_alloc_fail);
507  }
508 
509  FF_ALLOC_OR_GOTO(alac->avctx, alac->extra_bits_buffer[ch],
510  buf_size + AV_INPUT_BUFFER_PADDING_SIZE, buf_alloc_fail);
511  }
512  return 0;
513 buf_alloc_fail:
514  alac_decode_close(alac->avctx);
515  return AVERROR(ENOMEM);
516 }
517 
518 static int alac_set_info(ALACContext *alac)
519 {
521 
522  bytestream2_init(&gb, alac->avctx->extradata,
523  alac->avctx->extradata_size);
524 
525  bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4
526 
527  alac->max_samples_per_frame = bytestream2_get_be32u(&gb);
528  if (!alac->max_samples_per_frame ||
529  alac->max_samples_per_frame > 4096 * 4096) {
530  av_log(alac->avctx, AV_LOG_ERROR,
531  "max samples per frame invalid: %"PRIu32"\n",
532  alac->max_samples_per_frame);
533  return AVERROR_INVALIDDATA;
534  }
535  bytestream2_skipu(&gb, 1); // compatible version
536  alac->sample_size = bytestream2_get_byteu(&gb);
537  alac->rice_history_mult = bytestream2_get_byteu(&gb);
538  alac->rice_initial_history = bytestream2_get_byteu(&gb);
539  alac->rice_limit = bytestream2_get_byteu(&gb);
540  alac->channels = bytestream2_get_byteu(&gb);
541  bytestream2_get_be16u(&gb); // maxRun
542  bytestream2_get_be32u(&gb); // max coded frame size
543  bytestream2_get_be32u(&gb); // average bitrate
544  alac->sample_rate = bytestream2_get_be32u(&gb);
545 
546  return 0;
547 }
548 
550 {
551  int ret;
552  ALACContext *alac = avctx->priv_data;
553  alac->avctx = avctx;
554 
555  /* initialize from the extradata */
557  av_log(avctx, AV_LOG_ERROR, "extradata is too small\n");
558  return AVERROR_INVALIDDATA;
559  }
560  if (alac_set_info(alac)) {
561  av_log(avctx, AV_LOG_ERROR, "set_info failed\n");
562  return -1;
563  }
564 
565  switch (alac->sample_size) {
566  case 16: avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
567  break;
568  case 20:
569  case 24:
570  case 32: avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
571  break;
572  default: avpriv_request_sample(avctx, "Sample depth %d", alac->sample_size);
573  return AVERROR_PATCHWELCOME;
574  }
575  avctx->bits_per_raw_sample = alac->sample_size;
576  avctx->sample_rate = alac->sample_rate;
577 
578  if (alac->channels < 1) {
579  av_log(avctx, AV_LOG_WARNING, "Invalid channel count\n");
580  alac->channels = avctx->channels;
581  } else {
582  if (alac->channels > ALAC_MAX_CHANNELS)
583  alac->channels = avctx->channels;
584  else
585  avctx->channels = alac->channels;
586  }
587  if (avctx->channels > ALAC_MAX_CHANNELS || avctx->channels <= 0 ) {
588  avpriv_report_missing_feature(avctx, "Channel count %d",
589  avctx->channels);
590  return AVERROR_PATCHWELCOME;
591  }
592  avctx->channel_layout = ff_alac_channel_layouts[alac->channels - 1];
593 
594  if ((ret = allocate_buffers(alac)) < 0) {
595  av_log(avctx, AV_LOG_ERROR, "Error allocating buffers\n");
596  return ret;
597  }
598 
599  ff_alacdsp_init(&alac->dsp);
600 
601  return 0;
602 }
603 
604 #if HAVE_THREADS
606 {
607  ALACContext *alac = avctx->priv_data;
608  alac->avctx = avctx;
609  return allocate_buffers(alac);
610 }
611 #endif
612 
613 static const AVOption options[] = {
614  { "extra_bits_bug", "Force non-standard decoding process",
615  offsetof(ALACContext, extra_bit_bug), AV_OPT_TYPE_BOOL, { .i64 = 0 },
617  { NULL },
618 };
619 
620 static const AVClass alac_class = {
621  .class_name = "alac",
622  .item_name = av_default_item_name,
623  .option = options,
624  .version = LIBAVUTIL_VERSION_INT,
625 };
626 
628  .name = "alac",
629  .long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"),
630  .type = AVMEDIA_TYPE_AUDIO,
631  .id = AV_CODEC_ID_ALAC,
632  .priv_data_size = sizeof(ALACContext),
634  .close = alac_decode_close,
638  .priv_class = &alac_class
639 };
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:226
#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:381
#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:35
static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index, int channels)
Definition: alac.c:237
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
Definition: aac.h:63
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
#define avpriv_request_sample(...)
Definition: aac.h:57
channels
Definition: aptx.c:30
#define AV_OPT_FLAG_AUDIO_PARAM
Definition: opt.h:278
int size
Definition: avcodec.h:1446
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
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191
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:613
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
Definition: avcodec.h:2757
int32_t * extra_bits_buffer[2]
Definition: alac.c:72
AVCodec.
Definition: avcodec.h:3424
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:361
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:575
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:2197
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:473
Multithreading support functions.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:1634
static AVFrame * frame
const char data[16]
Definition: mxf.c:91
uint8_t * data
Definition: avcodec.h:1445
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:219
static av_always_inline void bytestream2_skipu(GetByteContext *g, unsigned int size)
Definition: bytestream.h:170
static const AVClass alac_class
Definition: alac.c:620
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:414
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,...)
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:814
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:258
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
#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:186
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:3431
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: avcodec.h:1024
uint64_t channel_layout
Audio channel layout.
Definition: avcodec.h:2240
#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:225
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:443
ALACDSPContext dsp
Definition: alac.c:87
static int alac_set_info(ALACContext *alac)
Definition: alac.c:518
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:2189
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:650
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:1533
int extradata_size
Definition: avcodec.h:1635
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:487
Describe the class of an AVClass context structure.
Definition: log.h:67
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:460
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
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:531
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:627
common internal api header.
static av_cold int alac_decode_init(AVCodecContext *avctx)
Definition: alac.c:549
#define FF_ALLOC_OR_GOTO(ctx, p, size, label)
Definition: internal.h:140
uint8_t rice_limit
Definition: alac.c:78
unsigned bps
Definition: movenc.c:1479
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
Definition: avcodec.h:782
void * priv_data
Definition: avcodec.h:1560
static int allocate_buffers(ALACContext *alac)
Definition: alac.c:488
int channels
number of audio channels
Definition: avcodec.h:2190
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:273
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:1422
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:292
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:968
for(j=16;j >0;--j)