FFmpeg  4.0
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, int32_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  int32_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  int 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 + (1 << (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 && 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 *= 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 > 32U) {
254  avpriv_report_missing_feature(avctx, "bps %d", bps);
255  return AVERROR_PATCHWELCOME;
256  }
257 
258  /* whether the frame is compressed */
259  is_compressed = !get_bits1(&alac->gb);
260 
261  if (has_size)
262  output_samples = get_bits_long(&alac->gb, 32);
263  else
264  output_samples = alac->max_samples_per_frame;
265  if (!output_samples || output_samples > alac->max_samples_per_frame) {
266  av_log(avctx, AV_LOG_ERROR, "invalid samples per frame: %"PRIu32"\n",
267  output_samples);
268  return AVERROR_INVALIDDATA;
269  }
270  if (!alac->nb_samples) {
271  ThreadFrame tframe = { .f = frame };
272  /* get output buffer */
273  frame->nb_samples = output_samples;
274  if ((ret = ff_thread_get_buffer(avctx, &tframe, 0)) < 0)
275  return ret;
276  } else if (output_samples != alac->nb_samples) {
277  av_log(avctx, AV_LOG_ERROR, "sample count mismatch: %"PRIu32" != %d\n",
278  output_samples, alac->nb_samples);
279  return AVERROR_INVALIDDATA;
280  }
281  alac->nb_samples = output_samples;
282  if (alac->direct_output) {
283  for (ch = 0; ch < channels; ch++)
284  alac->output_samples_buffer[ch] = (int32_t *)frame->extended_data[ch_index + ch];
285  }
286 
287  if (is_compressed) {
288  int16_t lpc_coefs[2][32];
289  int lpc_order[2];
290  int prediction_type[2];
291  int lpc_quant[2];
292  int rice_history_mult[2];
293 
294  if (!alac->rice_limit) {
296  "Compression with rice limit 0");
297  return AVERROR(ENOSYS);
298  }
299 
300  decorr_shift = get_bits(&alac->gb, 8);
301  decorr_left_weight = get_bits(&alac->gb, 8);
302 
303  for (ch = 0; ch < channels; ch++) {
304  prediction_type[ch] = get_bits(&alac->gb, 4);
305  lpc_quant[ch] = get_bits(&alac->gb, 4);
306  rice_history_mult[ch] = get_bits(&alac->gb, 3);
307  lpc_order[ch] = get_bits(&alac->gb, 5);
308 
309  if (lpc_order[ch] >= alac->max_samples_per_frame)
310  return AVERROR_INVALIDDATA;
311 
312  /* read the predictor table */
313  for (i = lpc_order[ch] - 1; i >= 0; i--)
314  lpc_coefs[ch][i] = get_sbits(&alac->gb, 16);
315  }
316 
317  if (alac->extra_bits) {
318  for (i = 0; i < alac->nb_samples; i++) {
319  if(get_bits_left(&alac->gb) <= 0)
320  return -1;
321  for (ch = 0; ch < channels; ch++)
322  alac->extra_bits_buffer[ch][i] = get_bits(&alac->gb, alac->extra_bits);
323  }
324  }
325  for (ch = 0; ch < channels; ch++) {
326  int ret=rice_decompress(alac, alac->predict_error_buffer[ch],
327  alac->nb_samples, bps,
328  rice_history_mult[ch] * alac->rice_history_mult / 4);
329  if(ret<0)
330  return ret;
331 
332  /* adaptive FIR filter */
333  if (prediction_type[ch] == 15) {
334  /* Prediction type 15 runs the adaptive FIR twice.
335  * The first pass uses the special-case coef_num = 31, while
336  * the second pass uses the coefs from the bitstream.
337  *
338  * However, this prediction type is not currently used by the
339  * reference encoder.
340  */
342  alac->predict_error_buffer[ch],
343  alac->nb_samples, bps, NULL, 31, 0);
344  } else if (prediction_type[ch] > 0) {
345  av_log(avctx, AV_LOG_WARNING, "unknown prediction type: %i\n",
346  prediction_type[ch]);
347  }
349  alac->output_samples_buffer[ch], alac->nb_samples,
350  bps, lpc_coefs[ch], lpc_order[ch], lpc_quant[ch]);
351  }
352  } else {
353  /* not compressed, easy case */
354  for (i = 0; i < alac->nb_samples; i++) {
355  if(get_bits_left(&alac->gb) <= 0)
356  return -1;
357  for (ch = 0; ch < channels; ch++) {
358  alac->output_samples_buffer[ch][i] =
359  get_sbits_long(&alac->gb, alac->sample_size);
360  }
361  }
362  alac->extra_bits = 0;
363  decorr_shift = 0;
364  decorr_left_weight = 0;
365  }
366 
367  if (channels == 2) {
368  if (alac->extra_bits && alac->extra_bit_bug) {
370  alac->extra_bits, channels, alac->nb_samples);
371  }
372 
373  if (decorr_left_weight) {
375  decorr_shift, decorr_left_weight);
376  }
377 
378  if (alac->extra_bits && !alac->extra_bit_bug) {
380  alac->extra_bits, channels, alac->nb_samples);
381  }
382  } else if (alac->extra_bits) {
384  alac->extra_bits, channels, alac->nb_samples);
385  }
386 
387  switch(alac->sample_size) {
388  case 16: {
389  for (ch = 0; ch < channels; ch++) {
390  int16_t *outbuffer = (int16_t *)frame->extended_data[ch_index + ch];
391  for (i = 0; i < alac->nb_samples; i++)
392  *outbuffer++ = alac->output_samples_buffer[ch][i];
393  }}
394  break;
395  case 20: {
396  for (ch = 0; ch < channels; ch++) {
397  for (i = 0; i < alac->nb_samples; i++)
398  alac->output_samples_buffer[ch][i] <<= 12;
399  }}
400  break;
401  case 24: {
402  for (ch = 0; ch < channels; ch++) {
403  for (i = 0; i < alac->nb_samples; i++)
404  alac->output_samples_buffer[ch][i] <<= 8;
405  }}
406  break;
407  }
408 
409  return 0;
410 }
411 
413  int *got_frame_ptr, AVPacket *avpkt)
414 {
415  ALACContext *alac = avctx->priv_data;
416  AVFrame *frame = data;
417  enum AlacRawDataBlockType element;
418  int channels;
419  int ch, ret, got_end;
420 
421  if ((ret = init_get_bits8(&alac->gb, avpkt->data, avpkt->size)) < 0)
422  return ret;
423 
424  got_end = 0;
425  alac->nb_samples = 0;
426  ch = 0;
427  while (get_bits_left(&alac->gb) >= 3) {
428  element = get_bits(&alac->gb, 3);
429  if (element == TYPE_END) {
430  got_end = 1;
431  break;
432  }
433  if (element > TYPE_CPE && element != TYPE_LFE) {
434  avpriv_report_missing_feature(avctx, "Syntax element %d", element);
435  return AVERROR_PATCHWELCOME;
436  }
437 
438  channels = (element == TYPE_CPE) ? 2 : 1;
439  if (ch + channels > alac->channels ||
440  ff_alac_channel_layout_offsets[alac->channels - 1][ch] + channels > alac->channels) {
441  av_log(avctx, AV_LOG_ERROR, "invalid element channel count\n");
442  return AVERROR_INVALIDDATA;
443  }
444 
445  ret = decode_element(avctx, frame,
447  channels);
448  if (ret < 0 && get_bits_left(&alac->gb))
449  return ret;
450 
451  ch += channels;
452  }
453  if (!got_end) {
454  av_log(avctx, AV_LOG_ERROR, "no end tag found. incomplete packet.\n");
455  return AVERROR_INVALIDDATA;
456  }
457 
458  if (avpkt->size * 8 - get_bits_count(&alac->gb) > 8) {
459  av_log(avctx, AV_LOG_ERROR, "Error : %d bits left\n",
460  avpkt->size * 8 - get_bits_count(&alac->gb));
461  }
462 
463  if (alac->channels == ch && alac->nb_samples)
464  *got_frame_ptr = 1;
465  else
466  av_log(avctx, AV_LOG_WARNING, "Failed to decode all channels\n");
467 
468  return avpkt->size;
469 }
470 
472 {
473  ALACContext *alac = avctx->priv_data;
474 
475  int ch;
476  for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) {
477  av_freep(&alac->predict_error_buffer[ch]);
478  if (!alac->direct_output)
479  av_freep(&alac->output_samples_buffer[ch]);
480  av_freep(&alac->extra_bits_buffer[ch]);
481  }
482 
483  return 0;
484 }
485 
486 static int allocate_buffers(ALACContext *alac)
487 {
488  int ch;
489  int buf_size = alac->max_samples_per_frame * sizeof(int32_t);
490 
491  for (ch = 0; ch < 2; ch++) {
492  alac->predict_error_buffer[ch] = NULL;
493  alac->output_samples_buffer[ch] = NULL;
494  alac->extra_bits_buffer[ch] = NULL;
495  }
496 
497  for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) {
499  buf_size, buf_alloc_fail);
500 
501  alac->direct_output = alac->sample_size > 16;
502  if (!alac->direct_output) {
504  buf_size + AV_INPUT_BUFFER_PADDING_SIZE, buf_alloc_fail);
505  }
506 
507  FF_ALLOC_OR_GOTO(alac->avctx, alac->extra_bits_buffer[ch],
508  buf_size + AV_INPUT_BUFFER_PADDING_SIZE, buf_alloc_fail);
509  }
510  return 0;
511 buf_alloc_fail:
512  alac_decode_close(alac->avctx);
513  return AVERROR(ENOMEM);
514 }
515 
516 static int alac_set_info(ALACContext *alac)
517 {
519 
520  bytestream2_init(&gb, alac->avctx->extradata,
521  alac->avctx->extradata_size);
522 
523  bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4
524 
525  alac->max_samples_per_frame = bytestream2_get_be32u(&gb);
526  if (!alac->max_samples_per_frame ||
527  alac->max_samples_per_frame > 4096 * 4096) {
528  av_log(alac->avctx, AV_LOG_ERROR,
529  "max samples per frame invalid: %"PRIu32"\n",
530  alac->max_samples_per_frame);
531  return AVERROR_INVALIDDATA;
532  }
533  bytestream2_skipu(&gb, 1); // compatible version
534  alac->sample_size = bytestream2_get_byteu(&gb);
535  alac->rice_history_mult = bytestream2_get_byteu(&gb);
536  alac->rice_initial_history = bytestream2_get_byteu(&gb);
537  alac->rice_limit = bytestream2_get_byteu(&gb);
538  alac->channels = bytestream2_get_byteu(&gb);
539  bytestream2_get_be16u(&gb); // maxRun
540  bytestream2_get_be32u(&gb); // max coded frame size
541  bytestream2_get_be32u(&gb); // average bitrate
542  alac->sample_rate = bytestream2_get_be32u(&gb);
543 
544  return 0;
545 }
546 
548 {
549  int ret;
550  ALACContext *alac = avctx->priv_data;
551  alac->avctx = avctx;
552 
553  /* initialize from the extradata */
555  av_log(avctx, AV_LOG_ERROR, "extradata is too small\n");
556  return AVERROR_INVALIDDATA;
557  }
558  if (alac_set_info(alac)) {
559  av_log(avctx, AV_LOG_ERROR, "set_info failed\n");
560  return -1;
561  }
562 
563  switch (alac->sample_size) {
564  case 16: avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
565  break;
566  case 20:
567  case 24:
568  case 32: avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
569  break;
570  default: avpriv_request_sample(avctx, "Sample depth %d", alac->sample_size);
571  return AVERROR_PATCHWELCOME;
572  }
573  avctx->bits_per_raw_sample = alac->sample_size;
574  avctx->sample_rate = alac->sample_rate;
575 
576  if (alac->channels < 1) {
577  av_log(avctx, AV_LOG_WARNING, "Invalid channel count\n");
578  alac->channels = avctx->channels;
579  } else {
580  if (alac->channels > ALAC_MAX_CHANNELS)
581  alac->channels = avctx->channels;
582  else
583  avctx->channels = alac->channels;
584  }
585  if (avctx->channels > ALAC_MAX_CHANNELS || avctx->channels <= 0 ) {
586  avpriv_report_missing_feature(avctx, "Channel count %d",
587  avctx->channels);
588  return AVERROR_PATCHWELCOME;
589  }
590  avctx->channel_layout = ff_alac_channel_layouts[alac->channels - 1];
591 
592  if ((ret = allocate_buffers(alac)) < 0) {
593  av_log(avctx, AV_LOG_ERROR, "Error allocating buffers\n");
594  return ret;
595  }
596 
597  ff_alacdsp_init(&alac->dsp);
598 
599  return 0;
600 }
601 
602 #if HAVE_THREADS
604 {
605  ALACContext *alac = avctx->priv_data;
606  alac->avctx = avctx;
607  return allocate_buffers(alac);
608 }
609 #endif
610 
611 static const AVOption options[] = {
612  { "extra_bits_bug", "Force non-standard decoding process",
613  offsetof(ALACContext, extra_bit_bug), AV_OPT_TYPE_BOOL, { .i64 = 0 },
615  { NULL },
616 };
617 
618 static const AVClass alac_class = {
619  .class_name = "alac",
620  .item_name = av_default_item_name,
621  .option = options,
622  .version = LIBAVUTIL_VERSION_INT,
623 };
624 
626  .name = "alac",
627  .long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"),
628  .type = AVMEDIA_TYPE_AUDIO,
629  .id = AV_CODEC_ID_ALAC,
630  .priv_data_size = sizeof(ALACContext),
632  .close = alac_decode_close,
636  .priv_class = &alac_class
637 };
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:218
#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:269
#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
Definition: aac.h:57
channels
Definition: aptx.c:30
#define AV_OPT_FLAG_AUDIO_PARAM
Definition: opt.h:278
int size
Definition: avcodec.h:1431
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:611
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
Definition: avcodec.h:2741
int32_t * extra_bits_buffer[2]
Definition: alac.c:72
AVCodec.
Definition: avcodec.h:3408
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:254
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:393
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:2181
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:471
Multithreading support functions.
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Definition: avcodec.h:1618
static AVFrame * frame
const char data[16]
Definition: mxf.c:90
uint8_t * data
Definition: avcodec.h:1430
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:618
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:412
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:596
#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:174
#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:3415
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: avcodec.h:1015
uint64_t channel_layout
Audio channel layout.
Definition: avcodec.h:2224
#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:304
ALACDSPContext dsp
Definition: alac.c:87
static int alac_set_info(ALACContext *alac)
Definition: alac.c:516
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:2173
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:464
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:1518
int extradata_size
Definition: avcodec.h:1619
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:321
Describe the class of an AVClass context structure.
Definition: log.h:67
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:314
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:354
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:625
common internal api header.
static av_cold int alac_decode_init(AVCodecContext *avctx)
Definition: alac.c:547
#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:1456
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
Definition: avcodec.h:773
void * priv_data
Definition: avcodec.h:1545
static int allocate_buffers(ALACContext *alac)
Definition: alac.c:486
int channels
number of audio channels
Definition: avcodec.h:2174
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: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:265
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:1407
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:284
#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)