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  * 32bit atom size
33  * 32bit tag ("alac")
34  * 32bit tag version (0)
35  * 32bit samples per frame (used when not set explicitly in the frames)
36  * 8bit compatible version (0)
37  * 8bit sample size
38  * 8bit history mult (40)
39  * 8bit initial history (10)
40  * 8bit rice param limit (14)
41  * 8bit channels
42  * 16bit maxRun (255)
43  * 32bit max coded frame size (0 means unknown)
44  * 32bit average bitrate (0 means unknown)
45  * 32bit samplerate
46  */
47 
49 #include "avcodec.h"
50 #include "get_bits.h"
51 #include "bytestream.h"
52 #include "internal.h"
53 #include "unary.h"
54 #include "mathops.h"
55 #include "alac_data.h"
56 
57 #define ALAC_EXTRADATA_SIZE 36
58 
59 typedef struct {
62  int channels;
63 
64  int32_t *predict_error_buffer[2];
65  int32_t *output_samples_buffer[2];
66  int32_t *extra_bits_buffer[2];
67 
73 
74  int extra_bits; /**< number of extra bits beyond 16-bit */
75  int nb_samples; /**< number of samples in the current frame */
76 
78 } ALACContext;
79 
80 static inline unsigned int decode_scalar(GetBitContext *gb, int k, int bps)
81 {
82  unsigned int x = get_unary_0_9(gb);
83 
84  if (x > 8) { /* RICE THRESHOLD */
85  /* use alternative encoding */
86  x = get_bits_long(gb, bps);
87  } else if (k != 1) {
88  int extrabits = show_bits(gb, k);
89 
90  /* multiply x by 2^k - 1, as part of their strange algorithm */
91  x = (x << k) - x;
92 
93  if (extrabits > 1) {
94  x += extrabits - 1;
95  skip_bits(gb, k);
96  } else
97  skip_bits(gb, k - 1);
98  }
99  return x;
100 }
101 
102 static int rice_decompress(ALACContext *alac, int32_t *output_buffer,
103  int nb_samples, int bps, int rice_history_mult)
104 {
105  int i;
106  unsigned int history = alac->rice_initial_history;
107  int sign_modifier = 0;
108 
109  for (i = 0; i < nb_samples; i++) {
110  int k;
111  unsigned int x;
112 
113  if(get_bits_left(&alac->gb) <= 0)
114  return -1;
115 
116  /* calculate rice param and decode next value */
117  k = av_log2((history >> 9) + 3);
118  k = FFMIN(k, alac->rice_limit);
119  x = decode_scalar(&alac->gb, k, bps);
120  x += sign_modifier;
121  sign_modifier = 0;
122  output_buffer[i] = (x >> 1) ^ -(x & 1);
123 
124  /* update the history */
125  if (x > 0xffff)
126  history = 0xffff;
127  else
128  history += x * rice_history_mult -
129  ((history * rice_history_mult) >> 9);
130 
131  /* special case: there may be compressed blocks of 0 */
132  if ((history < 128) && (i + 1 < nb_samples)) {
133  int block_size;
134 
135  /* calculate rice param and decode block size */
136  k = 7 - av_log2(history) + ((history + 16) >> 6);
137  k = FFMIN(k, alac->rice_limit);
138  block_size = decode_scalar(&alac->gb, k, 16);
139 
140  if (block_size > 0) {
141  if (block_size >= nb_samples - i) {
142  av_log(alac->avctx, AV_LOG_ERROR,
143  "invalid zero block size of %d %d %d\n", block_size,
144  nb_samples, i);
145  block_size = nb_samples - i - 1;
146  }
147  memset(&output_buffer[i + 1], 0,
148  block_size * sizeof(*output_buffer));
149  i += block_size;
150  }
151  if (block_size <= 0xffff)
152  sign_modifier = 1;
153  history = 0;
154  }
155  }
156  return 0;
157 }
158 
159 static inline int sign_only(int v)
160 {
161  return v ? FFSIGN(v) : 0;
162 }
163 
164 static void lpc_prediction(int32_t *error_buffer, int32_t *buffer_out,
165  int nb_samples, int bps, int16_t *lpc_coefs,
166  int lpc_order, int lpc_quant)
167 {
168  int i;
169  int32_t *pred = buffer_out;
170 
171  /* first sample always copies */
172  *buffer_out = *error_buffer;
173 
174  if (nb_samples <= 1)
175  return;
176 
177  if (!lpc_order) {
178  memcpy(&buffer_out[1], &error_buffer[1],
179  (nb_samples - 1) * sizeof(*buffer_out));
180  return;
181  }
182 
183  if (lpc_order == 31) {
184  /* simple 1st-order prediction */
185  for (i = 1; i < nb_samples; i++) {
186  buffer_out[i] = sign_extend(buffer_out[i - 1] + error_buffer[i],
187  bps);
188  }
189  return;
190  }
191 
192  /* read warm-up samples */
193  for (i = 1; i <= lpc_order && i < nb_samples; i++)
194  buffer_out[i] = sign_extend(buffer_out[i - 1] + error_buffer[i], bps);
195 
196  /* NOTE: 4 and 8 are very common cases that could be optimized. */
197 
198  for (; i < nb_samples; i++) {
199  int j;
200  int val = 0;
201  int error_val = error_buffer[i];
202  int error_sign;
203  int d = *pred++;
204 
205  /* LPC prediction */
206  for (j = 0; j < lpc_order; j++)
207  val += (pred[j] - d) * lpc_coefs[j];
208  val = (val + (1 << (lpc_quant - 1))) >> lpc_quant;
209  val += d + error_val;
210  buffer_out[i] = sign_extend(val, bps);
211 
212  /* adapt LPC coefficients */
213  error_sign = sign_only(error_val);
214  if (error_sign) {
215  for (j = 0; j < lpc_order && error_val * error_sign > 0; j++) {
216  int sign;
217  val = d - pred[j];
218  sign = sign_only(val) * error_sign;
219  lpc_coefs[j] -= sign;
220  val *= sign;
221  error_val -= (val >> lpc_quant) * (j + 1);
222  }
223  }
224  }
225 }
226 
227 static void decorrelate_stereo(int32_t *buffer[2], int nb_samples,
228  int decorr_shift, int decorr_left_weight)
229 {
230  int i;
231 
232  for (i = 0; i < nb_samples; i++) {
233  int32_t a, b;
234 
235  a = buffer[0][i];
236  b = buffer[1][i];
237 
238  a -= (b * decorr_left_weight) >> decorr_shift;
239  b += a;
240 
241  buffer[0][i] = b;
242  buffer[1][i] = a;
243  }
244 }
245 
246 static void append_extra_bits(int32_t *buffer[2], int32_t *extra_bits_buffer[2],
247  int extra_bits, int channels, int nb_samples)
248 {
249  int i, ch;
250 
251  for (ch = 0; ch < channels; ch++)
252  for (i = 0; i < nb_samples; i++)
253  buffer[ch][i] = (buffer[ch][i] << extra_bits) | extra_bits_buffer[ch][i];
254 }
255 
256 static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index,
257  int channels)
258 {
259  ALACContext *alac = avctx->priv_data;
260  int has_size, bps, is_compressed, decorr_shift, decorr_left_weight, ret;
261  uint32_t output_samples;
262  int i, ch;
263 
264  skip_bits(&alac->gb, 4); /* element instance tag */
265  skip_bits(&alac->gb, 12); /* unused header bits */
266 
267  /* the number of output samples is stored in the frame */
268  has_size = get_bits1(&alac->gb);
269 
270  alac->extra_bits = get_bits(&alac->gb, 2) << 3;
271  bps = alac->sample_size - alac->extra_bits + channels - 1;
272  if (bps > 32U) {
273  av_log(avctx, AV_LOG_ERROR, "bps is unsupported: %d\n", bps);
274  return AVERROR_PATCHWELCOME;
275  }
276 
277  /* whether the frame is compressed */
278  is_compressed = !get_bits1(&alac->gb);
279 
280  if (has_size)
281  output_samples = get_bits_long(&alac->gb, 32);
282  else
283  output_samples = alac->max_samples_per_frame;
284  if (!output_samples || output_samples > alac->max_samples_per_frame) {
285  av_log(avctx, AV_LOG_ERROR, "invalid samples per frame: %d\n",
286  output_samples);
287  return AVERROR_INVALIDDATA;
288  }
289  if (!alac->nb_samples) {
290  /* get output buffer */
291  frame->nb_samples = output_samples;
292  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
293  return ret;
294  } else if (output_samples != alac->nb_samples) {
295  av_log(avctx, AV_LOG_ERROR, "sample count mismatch: %u != %d\n",
296  output_samples, alac->nb_samples);
297  return AVERROR_INVALIDDATA;
298  }
299  alac->nb_samples = output_samples;
300  if (alac->direct_output) {
301  for (ch = 0; ch < channels; ch++)
302  alac->output_samples_buffer[ch] = (int32_t *)frame->extended_data[ch_index + ch];
303  }
304 
305  if (is_compressed) {
306  int16_t lpc_coefs[2][32];
307  int lpc_order[2];
308  int prediction_type[2];
309  int lpc_quant[2];
310  int rice_history_mult[2];
311 
312  decorr_shift = get_bits(&alac->gb, 8);
313  decorr_left_weight = get_bits(&alac->gb, 8);
314 
315  for (ch = 0; ch < channels; ch++) {
316  prediction_type[ch] = get_bits(&alac->gb, 4);
317  lpc_quant[ch] = get_bits(&alac->gb, 4);
318  rice_history_mult[ch] = get_bits(&alac->gb, 3);
319  lpc_order[ch] = get_bits(&alac->gb, 5);
320 
321  /* read the predictor table */
322  for (i = lpc_order[ch] - 1; i >= 0; i--)
323  lpc_coefs[ch][i] = get_sbits(&alac->gb, 16);
324  }
325 
326  if (alac->extra_bits) {
327  for (i = 0; i < alac->nb_samples; i++) {
328  if(get_bits_left(&alac->gb) <= 0)
329  return -1;
330  for (ch = 0; ch < channels; ch++)
331  alac->extra_bits_buffer[ch][i] = get_bits(&alac->gb, alac->extra_bits);
332  }
333  }
334  for (ch = 0; ch < channels; ch++) {
335  int ret=rice_decompress(alac, alac->predict_error_buffer[ch],
336  alac->nb_samples, bps,
337  rice_history_mult[ch] * alac->rice_history_mult / 4);
338  if(ret<0)
339  return ret;
340 
341  /* adaptive FIR filter */
342  if (prediction_type[ch] == 15) {
343  /* Prediction type 15 runs the adaptive FIR twice.
344  * The first pass uses the special-case coef_num = 31, while
345  * the second pass uses the coefs from the bitstream.
346  *
347  * However, this prediction type is not currently used by the
348  * reference encoder.
349  */
351  alac->predict_error_buffer[ch],
352  alac->nb_samples, bps, NULL, 31, 0);
353  } else if (prediction_type[ch] > 0) {
354  av_log(avctx, AV_LOG_WARNING, "unknown prediction type: %i\n",
355  prediction_type[ch]);
356  }
358  alac->output_samples_buffer[ch], alac->nb_samples,
359  bps, lpc_coefs[ch], lpc_order[ch], lpc_quant[ch]);
360  }
361  } else {
362  /* not compressed, easy case */
363  for (i = 0; i < alac->nb_samples; i++) {
364  if(get_bits_left(&alac->gb) <= 0)
365  return -1;
366  for (ch = 0; ch < channels; ch++) {
367  alac->output_samples_buffer[ch][i] =
368  get_sbits_long(&alac->gb, alac->sample_size);
369  }
370  }
371  alac->extra_bits = 0;
372  decorr_shift = 0;
373  decorr_left_weight = 0;
374  }
375 
376  if (channels == 2 && decorr_left_weight) {
378  decorr_shift, decorr_left_weight);
379  }
380 
381  if (alac->extra_bits) {
383  alac->extra_bits, channels, alac->nb_samples);
384  }
385 
386  if(av_sample_fmt_is_planar(avctx->sample_fmt)) {
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 24: {
396  for (ch = 0; ch < channels; ch++) {
397  for (i = 0; i < alac->nb_samples; i++)
398  alac->output_samples_buffer[ch][i] <<= 8;
399  }}
400  break;
401  }
402  }else{
403  switch(alac->sample_size) {
404  case 16: {
405  int16_t *outbuffer = ((int16_t *)frame->extended_data[0]) + ch_index;
406  for (i = 0; i < alac->nb_samples; i++) {
407  for (ch = 0; ch < channels; ch++)
408  *outbuffer++ = alac->output_samples_buffer[ch][i];
409  outbuffer += alac->channels - channels;
410  }
411  }
412  break;
413  case 24: {
414  int32_t *outbuffer = ((int32_t *)frame->extended_data[0]) + ch_index;
415  for (i = 0; i < alac->nb_samples; i++) {
416  for (ch = 0; ch < channels; ch++)
417  *outbuffer++ = alac->output_samples_buffer[ch][i] << 8;
418  outbuffer += alac->channels - channels;
419  }
420  }
421  break;
422  case 32: {
423  int32_t *outbuffer = ((int32_t *)frame->extended_data[0]) + ch_index;
424  for (i = 0; i < alac->nb_samples; i++) {
425  for (ch = 0; ch < channels; ch++)
426  *outbuffer++ = alac->output_samples_buffer[ch][i];
427  outbuffer += alac->channels - channels;
428  }
429  }
430  break;
431  }
432  }
433 
434  return 0;
435 }
436 
437 static int alac_decode_frame(AVCodecContext *avctx, void *data,
438  int *got_frame_ptr, AVPacket *avpkt)
439 {
440  ALACContext *alac = avctx->priv_data;
441  AVFrame *frame = data;
442  enum AlacRawDataBlockType element;
443  int channels;
444  int ch, ret, got_end;
445 
446  init_get_bits(&alac->gb, avpkt->data, avpkt->size * 8);
447 
448  got_end = 0;
449  alac->nb_samples = 0;
450  ch = 0;
451  while (get_bits_left(&alac->gb) >= 3) {
452  element = get_bits(&alac->gb, 3);
453  if (element == TYPE_END) {
454  got_end = 1;
455  break;
456  }
457  if (element > TYPE_CPE && element != TYPE_LFE) {
458  av_log(avctx, AV_LOG_ERROR, "syntax element unsupported: %d\n", element);
459  return AVERROR_PATCHWELCOME;
460  }
461 
462  channels = (element == TYPE_CPE) ? 2 : 1;
463  if ( ch + channels > alac->channels
464  || ff_alac_channel_layout_offsets[alac->channels - 1][ch] + channels > alac->channels
465  ) {
466  av_log(avctx, AV_LOG_ERROR, "invalid element channel count\n");
467  return AVERROR_INVALIDDATA;
468  }
469 
470  ret = decode_element(avctx, frame,
472  channels);
473  if (ret < 0 && get_bits_left(&alac->gb))
474  return ret;
475 
476  ch += channels;
477  }
478  if (!got_end) {
479  av_log(avctx, AV_LOG_ERROR, "no end tag found. incomplete packet.\n");
480  return AVERROR_INVALIDDATA;
481  }
482 
483  if (avpkt->size * 8 - get_bits_count(&alac->gb) > 8) {
484  av_log(avctx, AV_LOG_ERROR, "Error : %d bits left\n",
485  avpkt->size * 8 - get_bits_count(&alac->gb));
486  }
487 
488  *got_frame_ptr = 1;
489 
490  return avpkt->size;
491 }
492 
494 {
495  ALACContext *alac = avctx->priv_data;
496 
497  int ch;
498  for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) {
499  av_freep(&alac->predict_error_buffer[ch]);
500  if (!alac->direct_output)
501  av_freep(&alac->output_samples_buffer[ch]);
502  av_freep(&alac->extra_bits_buffer[ch]);
503  }
504 
505  return 0;
506 }
507 
508 static int allocate_buffers(ALACContext *alac)
509 {
510  int ch;
511  int buf_size;
512 
513  if (alac->max_samples_per_frame > INT_MAX / sizeof(int32_t))
514  goto buf_alloc_fail;
515  buf_size = alac->max_samples_per_frame * sizeof(int32_t);
516 
517  for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) {
519  buf_size, buf_alloc_fail);
520 
521  alac->direct_output = alac->sample_size > 16 && av_sample_fmt_is_planar(alac->avctx->sample_fmt);
522  if (!alac->direct_output) {
524  buf_size, buf_alloc_fail);
525  }
526 
527  FF_ALLOC_OR_GOTO(alac->avctx, alac->extra_bits_buffer[ch],
528  buf_size, buf_alloc_fail);
529  }
530  return 0;
531 buf_alloc_fail:
532  alac_decode_close(alac->avctx);
533  return AVERROR(ENOMEM);
534 }
535 
536 static int alac_set_info(ALACContext *alac)
537 {
538  GetByteContext gb;
539 
540  bytestream2_init(&gb, alac->avctx->extradata,
541  alac->avctx->extradata_size);
542 
543  bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4
544 
545  alac->max_samples_per_frame = bytestream2_get_be32u(&gb);
546  if (!alac->max_samples_per_frame || alac->max_samples_per_frame > INT_MAX) {
547  av_log(alac->avctx, AV_LOG_ERROR, "max samples per frame invalid: %u\n",
548  alac->max_samples_per_frame);
549  return AVERROR_INVALIDDATA;
550  }
551  bytestream2_skipu(&gb, 1); // compatible version
552  alac->sample_size = bytestream2_get_byteu(&gb);
553  alac->rice_history_mult = bytestream2_get_byteu(&gb);
554  alac->rice_initial_history = bytestream2_get_byteu(&gb);
555  alac->rice_limit = bytestream2_get_byteu(&gb);
556  alac->channels = bytestream2_get_byteu(&gb);
557  bytestream2_get_be16u(&gb); // maxRun
558  bytestream2_get_be32u(&gb); // max coded frame size
559  bytestream2_get_be32u(&gb); // average bitrate
560  bytestream2_get_be32u(&gb); // samplerate
561 
562  return 0;
563 }
564 
566 {
567  int ret;
568  int req_packed;
569  ALACContext *alac = avctx->priv_data;
570  alac->avctx = avctx;
571 
572  /* initialize from the extradata */
574  av_log(avctx, AV_LOG_ERROR, "extradata is too small\n");
575  return AVERROR_INVALIDDATA;
576  }
577  if (alac_set_info(alac)) {
578  av_log(avctx, AV_LOG_ERROR, "set_info failed\n");
579  return -1;
580  }
581 
583  switch (alac->sample_size) {
584  case 16: avctx->sample_fmt = req_packed ? AV_SAMPLE_FMT_S16 : AV_SAMPLE_FMT_S16P;
585  break;
586  case 24:
587  case 32: avctx->sample_fmt = req_packed ? AV_SAMPLE_FMT_S32 : AV_SAMPLE_FMT_S32P;
588  break;
589  default: avpriv_request_sample(avctx, "Sample depth %d", alac->sample_size);
590  return AVERROR_PATCHWELCOME;
591  }
592  avctx->bits_per_raw_sample = alac->sample_size;
593 
594  if (alac->channels < 1) {
595  av_log(avctx, AV_LOG_WARNING, "Invalid channel count\n");
596  alac->channels = avctx->channels;
597  } else {
598  if (alac->channels > ALAC_MAX_CHANNELS)
599  alac->channels = avctx->channels;
600  else
601  avctx->channels = alac->channels;
602  }
603  if (avctx->channels > ALAC_MAX_CHANNELS || avctx->channels <= 0 ) {
604  av_log(avctx, AV_LOG_ERROR, "Unsupported channel count: %d\n",
605  avctx->channels);
606  return AVERROR_PATCHWELCOME;
607  }
608  avctx->channel_layout = ff_alac_channel_layouts[alac->channels - 1];
609 
610  if ((ret = allocate_buffers(alac)) < 0) {
611  av_log(avctx, AV_LOG_ERROR, "Error allocating buffers\n");
612  return ret;
613  }
614 
615  return 0;
616 }
617 
619  .name = "alac",
620  .type = AVMEDIA_TYPE_AUDIO,
621  .id = AV_CODEC_ID_ALAC,
622  .priv_data_size = sizeof(ALACContext),
626  .capabilities = CODEC_CAP_DR1,
627  .long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"),
628 };
#define extra_bits(eb)
Definition: intrax8.c:151
float v
#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:75
This structure describes decoded (raw) audio or video data.
Definition: frame.h:76
#define ALAC_EXTRADATA_SIZE
Definition: alac.c:57
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:240
static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index, int channels)
Definition: alac.c:256
Definition: aac.h:56
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:154
Definition: aac.h:50
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
Definition: bytestream.h:130
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
signed 16 bits
Definition: samplefmt.h:52
int32_t * extra_bits_buffer[2]
Definition: alac.c:66
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:225
static int get_sbits_long(GetBitContext *s, int n)
Read 0-32 bits as a signed integer.
Definition: get_bits.h:344
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
Definition: mem.c:198
set threshold d
int32_t * predict_error_buffer[2]
Definition: alac.c:64
static int get_unary_0_9(GetBitContext *gb)
Definition: unary.h:51
#define LIBAVCODEC_VERSION_MAJOR
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
uint8_t
#define av_cold
Definition: attributes.h:78
uint8_t rice_initial_history
Definition: alac.c:71
Definition: aac.h:52
static av_cold int alac_decode_close(AVCodecContext *avctx)
Definition: alac.c:493
#define b
Definition: input.c:42
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
uint8_t * data
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:193
static av_always_inline void bytestream2_skipu(GetByteContext *g, unsigned int size)
Definition: bytestream.h:165
bitstream reader API header.
int32_t * output_samples_buffer[2]
Definition: alac.c:65
static int alac_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Definition: alac.c:437
signed 32 bits, planar
Definition: samplefmt.h:59
int extra_bits
number of extra bits beyond 16-bit
Definition: alac.c:74
frame
Definition: stft.m:14
Discrete Time axis x
#define U(x)
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:557
static void append_extra_bits(int32_t *buffer[2], int32_t *extra_bits_buffer[2], int extra_bits, int channels, int nb_samples)
Definition: alac.c:246
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:164
enum AVSampleFormat request_sample_fmt
desired sample format
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Spectrum Plot time data
static int sign_only(int v)
Definition: alac.c:159
AlacRawDataBlockType
Definition: alac_data.h:26
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
const char * name
Name of the codec implementation.
external API header
uint64_t channel_layout
Audio channel layout.
#define ALAC_MAX_CHANNELS
Definition: alac_data.h:38
uint32_t max_samples_per_frame
Definition: alac.c:68
signed 32 bits
Definition: samplefmt.h:53
static void decorrelate_stereo(int32_t *buffer[2], int nb_samples, int decorr_shift, int decorr_left_weight)
Definition: alac.c:227
audio channel layout utility functions
#define FFMIN(a, b)
Definition: common.h:58
#define FFSIGN(a)
Definition: common.h:54
ret
Definition: avfilter.c:821
GetBitContext gb
Definition: alac.c:61
int32_t
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:255
static int alac_set_info(ALACContext *alac)
Definition: alac.c:536
uint8_t rice_history_mult
Definition: alac.c:70
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
for k
NULL
Definition: eval.c:55
About Git write you should know how to use GIT properly Luckily Git comes with excellent documentation git help man git shows you the available git< command > help man git< command > shows information about the subcommand< command > The most comprehensive manual is the website Git Reference visit they are quite exhaustive You do not need a special username or password All you need is to provide a ssh public key to the Git server admin What follows now is a basic introduction to Git and some FFmpeg specific guidelines Read it at least if you are granted commit privileges to the FFmpeg project you are expected to be familiar with these rules I if not You can get git from etc no matter how small Every one of them has been saved from looking like a fool by this many times It s very easy for stray debug output or cosmetic modifications to slip please avoid problems through this extra level of scrutiny For cosmetics only commits you should e g by running git config global user name My Name git config global user email my email which is either set in your personal configuration file through git config core editor or set by one of the following environment VISUAL or EDITOR Log messages should be concise but descriptive Explain why you made a what you did will be obvious from the changes themselves most of the time Saying just bug fix or is bad Remember that people of varying skill levels look at and educate themselves while reading through your code Don t include filenames in log Git provides that information Possibly make the commit message have a descriptive first an empty line and then a full description The first line will be used to name the patch by git format patch Renaming moving copying files or contents of making those normal commits mv cp path file otherpath otherfile git add[-A] git commit Do not rename or copy files of which you are not the maintainer without discussing it on the mailing list first Reverting broken commits git revert< commit > git revert will generate a revert commit This will not make the faulty commit disappear from the history git reset< commit > git reset will uncommit the changes till< commit > rewriting the current branch history git commit amend allows to amend the last commit details quickly git rebase i origin master will replay local commits over the main repository allowing to merge or remove some of them in the process Note that the commit amend and rebase rewrite history
Definition: git-howto.txt:153
main external API structure.
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:375
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:273
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:265
int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt)
Check if the sample format is planar.
Definition: samplefmt.c:118
synthesis window for stochastic i
static unsigned int decode_scalar(GetBitContext *gb, int k, int bps)
Definition: alac.c:80
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:379
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:306
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer 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.Buffer references ownership and permissions
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:123
uint8_t sample_size
Definition: alac.c:69
int channels
Definition: alac.c:62
AVCodec ff_alac_decoder
Definition: alac.c:618
common internal api header.
static av_cold int alac_decode_init(AVCodecContext *avctx)
Definition: alac.c:565
#define FF_ALLOC_OR_GOTO(ctx, p, size, label)
the buffer and buffer reference mechanism is intended to as much as expensive copies of that data while still allowing the filters to produce correct results The data is stored in buffers represented by AVFilterBuffer structures They must not be accessed but through references stored in AVFilterBufferRef structures Several references can point to the same buffer
uint8_t rice_limit
Definition: alac.c:72
unsigned bps
Definition: movenc.c:895
static int allocate_buffers(ALACContext *alac)
Definition: alac.c:508
int channels
number of audio channels
#define av_log2
Definition: intmath.h:89
AVCodecContext * avctx
Definition: alac.c:60
signed 16 bits, planar
Definition: samplefmt.h:58
static int rice_decompress(ALACContext *alac, int32_t *output_buffer, int nb_samples, int bps, int rice_history_mult)
Definition: alac.c:102
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868
uint8_t ** extended_data
pointers to the data planes/channels.
Definition: frame.h:117
int direct_output
Definition: alac.c:77
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:127
for(j=16;j >0;--j)