FFmpeg
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 AVERROR_INVALIDDATA;
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 || !lpc_quant[ch])
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 AVERROR_INVALIDDATA;
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 AVERROR_INVALIDDATA;
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  unsigned 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 ((ret = alac_set_info(alac)) < 0) {
559  av_log(avctx, AV_LOG_ERROR, "set_info failed\n");
560  return ret;
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:863
#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:295
#define ALAC_EXTRADATA_SIZE
Definition: alac.c:62
AVOption.
Definition: opt.h:246
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:100
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:379
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:182
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
the pkt_dts and pkt_pts fields in AVFrame will work as usual Restrictions on codec whose streams don t reset across will not work because their bitstreams cannot be decoded in parallel *The contents of buffers must not be read before as well as code calling up to before the decode process starts Call have add an init_thread_copy() which re-allocates them for other threads.Add AV_CODEC_CAP_FRAME_THREADS to the codec capabilities.There will be very little speed gain at this point but it should work.If there are inter-frame dependencies
#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:1478
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 &&1) swri_audio_convert_init_x86(ctx, out_fmt, in_fmt, channels);if(ARCH_ARM) swri_audio_convert_init_arm(ctx, out_fmt, in_fmt, channels);if(ARCH_AARCH64) swri_audio_convert_init_aarch64(ctx, out_fmt, in_fmt, channels);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
int av_log2(unsigned v)
Definition: intmath.c:26
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
Definition: bytestream.h:133
static const AVOption options[]
Definition: alac.c:611
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
Definition: avcodec.h:2796
int32_t * extra_bits_buffer[2]
Definition: alac.c:72
AVCodec.
Definition: avcodec.h:3481
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:359
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:590
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:2233
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:1666
uint8_t * data
Definition: avcodec.h:1477
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: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:849
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:259
#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 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:3488
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: avcodec.h:1037
uint64_t channel_layout
Audio channel layout.
Definition: avcodec.h:2276
#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:446
ALACDSPContext dsp
Definition: alac.c:87
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
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
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:2225
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:677
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:1565
int extradata_size
Definition: avcodec.h:1667
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:498
Describe the class of an AVClass context structure.
Definition: log.h:67
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:467
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:546
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:1497
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
Definition: avcodec.h:790
void * priv_data
Definition: avcodec.h:1592
static int allocate_buffers(ALACContext *alac)
Definition: alac.c:486
int channels
number of audio channels
Definition: avcodec.h:2226
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
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
uint8_t ** extended_data
pointers to the data planes/channels.
Definition: frame.h:342
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:1454
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:361
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:981
for(j=16;j >0;--j)