libavcodec/flacdec.c
Go to the documentation of this file.
1 /*
2  * FLAC (Free Lossless Audio Codec) decoder
3  * Copyright (c) 2003 Alex Beregszaszi
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  * FLAC (Free Lossless Audio Codec) decoder
25  * @author Alex Beregszaszi
26  * @see http://flac.sourceforge.net/
27  *
28  * This decoder can be used in 1 of 2 ways: Either raw FLAC data can be fed
29  * through, starting from the initial 'fLaC' signature; or by passing the
30  * 34-byte streaminfo structure through avctx->extradata[_size] followed
31  * by data starting with the 0xFFF8 marker.
32  */
33 
34 #include <limits.h>
35 
36 #include "libavutil/avassert.h"
38 #include "libavutil/crc.h"
39 #include "avcodec.h"
40 #include "internal.h"
41 #include "get_bits.h"
42 #include "bytestream.h"
43 #include "golomb.h"
44 #include "flac.h"
45 #include "flacdata.h"
46 #include "flacdsp.h"
47 
48 typedef struct FLACContext {
50 
51  AVCodecContext *avctx; ///< parent AVCodecContext
52  GetBitContext gb; ///< GetBitContext initialized to start at the current frame
53 
54  int blocksize; ///< number of samples in the current frame
55  int sample_shift; ///< shift required to make output samples 16-bit or 32-bit
56  int ch_mode; ///< channel decorrelation type in the current frame
57  int got_streaminfo; ///< indicates if the STREAMINFO has been read
58 
59  int32_t *decoded[FLAC_MAX_CHANNELS]; ///< decoded samples
61  unsigned int decoded_buffer_size;
62 
64 } FLACContext;
65 
66 static int allocate_buffers(FLACContext *s);
67 
68 static void flac_set_bps(FLACContext *s)
69 {
71  int need32 = s->bps > 16;
72  int want32 = av_get_bytes_per_sample(req) > 2;
73  int planar = av_sample_fmt_is_planar(req);
74 
75  if (need32 || want32) {
76  if (planar)
78  else
80  s->sample_shift = 32 - s->bps;
81  } else {
82  if (planar)
84  else
86  s->sample_shift = 16 - s->bps;
87  }
88 }
89 
91 {
93  uint8_t *streaminfo;
94  int ret;
95  FLACContext *s = avctx->priv_data;
96  s->avctx = avctx;
97 
98  /* for now, the raw FLAC header is allowed to be passed to the decoder as
99  frame data instead of extradata. */
100  if (!avctx->extradata)
101  return 0;
102 
103  if (!avpriv_flac_is_extradata_valid(avctx, &format, &streaminfo))
104  return AVERROR_INVALIDDATA;
105 
106  /* initialize based on the demuxer-supplied streamdata header */
107  avpriv_flac_parse_streaminfo(avctx, (FLACStreaminfo *)s, streaminfo);
108  ret = allocate_buffers(s);
109  if (ret < 0)
110  return ret;
111  flac_set_bps(s);
112  ff_flacdsp_init(&s->dsp, avctx->sample_fmt, s->bps);
113  s->got_streaminfo = 1;
114 
115  return 0;
116 }
117 
119 {
120  av_log(avctx, AV_LOG_DEBUG, " Max Blocksize: %d\n", s->max_blocksize);
121  av_log(avctx, AV_LOG_DEBUG, " Max Framesize: %d\n", s->max_framesize);
122  av_log(avctx, AV_LOG_DEBUG, " Samplerate: %d\n", s->samplerate);
123  av_log(avctx, AV_LOG_DEBUG, " Channels: %d\n", s->channels);
124  av_log(avctx, AV_LOG_DEBUG, " Bits: %d\n", s->bps);
125 }
126 
128 {
129  int buf_size;
130 
131  av_assert0(s->max_blocksize);
132 
133  buf_size = av_samples_get_buffer_size(NULL, s->channels, s->max_blocksize,
134  AV_SAMPLE_FMT_S32P, 0);
135  if (buf_size < 0)
136  return buf_size;
137 
139  if (!s->decoded_buffer)
140  return AVERROR(ENOMEM);
141 
143  s->decoded_buffer, s->channels,
144  s->max_blocksize, AV_SAMPLE_FMT_S32P, 0);
145 }
146 
147 /**
148  * Parse the STREAMINFO from an inline header.
149  * @param s the flac decoding context
150  * @param buf input buffer, starting with the "fLaC" marker
151  * @param buf_size buffer size
152  * @return non-zero if metadata is invalid
153  */
154 static int parse_streaminfo(FLACContext *s, const uint8_t *buf, int buf_size)
155 {
156  int metadata_type, metadata_size, ret;
157 
158  if (buf_size < FLAC_STREAMINFO_SIZE+8) {
159  /* need more data */
160  return 0;
161  }
162  avpriv_flac_parse_block_header(&buf[4], NULL, &metadata_type, &metadata_size);
163  if (metadata_type != FLAC_METADATA_TYPE_STREAMINFO ||
164  metadata_size != FLAC_STREAMINFO_SIZE) {
165  return AVERROR_INVALIDDATA;
166  }
168  ret = allocate_buffers(s);
169  if (ret < 0)
170  return ret;
171  flac_set_bps(s);
172  ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt, s->bps);
173  s->got_streaminfo = 1;
174 
175  return 0;
176 }
177 
178 /**
179  * Determine the size of an inline header.
180  * @param buf input buffer, starting with the "fLaC" marker
181  * @param buf_size buffer size
182  * @return number of bytes in the header, or 0 if more data is needed
183  */
184 static int get_metadata_size(const uint8_t *buf, int buf_size)
185 {
186  int metadata_last, metadata_size;
187  const uint8_t *buf_end = buf + buf_size;
188 
189  buf += 4;
190  do {
191  if (buf_end - buf < 4)
192  return 0;
193  avpriv_flac_parse_block_header(buf, &metadata_last, NULL, &metadata_size);
194  buf += 4;
195  if (buf_end - buf < metadata_size) {
196  /* need more data in order to read the complete header */
197  return 0;
198  }
199  buf += metadata_size;
200  } while (!metadata_last);
201 
202  return buf_size - (buf_end - buf);
203 }
204 
205 static int decode_residuals(FLACContext *s, int32_t *decoded, int pred_order)
206 {
207  int i, tmp, partition, method_type, rice_order;
208  int rice_bits, rice_esc;
209  int samples;
210 
211  method_type = get_bits(&s->gb, 2);
212  if (method_type > 1) {
213  av_log(s->avctx, AV_LOG_ERROR, "illegal residual coding method %d\n",
214  method_type);
215  return AVERROR_INVALIDDATA;
216  }
217 
218  rice_order = get_bits(&s->gb, 4);
219 
220  samples= s->blocksize >> rice_order;
221  if (pred_order > samples) {
222  av_log(s->avctx, AV_LOG_ERROR, "invalid predictor order: %i > %i\n",
223  pred_order, samples);
224  return AVERROR_INVALIDDATA;
225  }
226 
227  rice_bits = 4 + method_type;
228  rice_esc = (1 << rice_bits) - 1;
229 
230  decoded += pred_order;
231  i= pred_order;
232  for (partition = 0; partition < (1 << rice_order); partition++) {
233  tmp = get_bits(&s->gb, rice_bits);
234  if (tmp == rice_esc) {
235  tmp = get_bits(&s->gb, 5);
236  for (; i < samples; i++)
237  *decoded++ = get_sbits_long(&s->gb, tmp);
238  } else {
239  for (; i < samples; i++) {
240  *decoded++ = get_sr_golomb_flac(&s->gb, tmp, INT_MAX, 0);
241  }
242  }
243  i= 0;
244  }
245 
246  return 0;
247 }
248 
250  int pred_order, int bps)
251 {
252  const int blocksize = s->blocksize;
253  int av_uninit(a), av_uninit(b), av_uninit(c), av_uninit(d), i;
254  int ret;
255 
256  /* warm up samples */
257  for (i = 0; i < pred_order; i++) {
258  decoded[i] = get_sbits_long(&s->gb, bps);
259  }
260 
261  if ((ret = decode_residuals(s, decoded, pred_order)) < 0)
262  return ret;
263 
264  if (pred_order > 0)
265  a = decoded[pred_order-1];
266  if (pred_order > 1)
267  b = a - decoded[pred_order-2];
268  if (pred_order > 2)
269  c = b - decoded[pred_order-2] + decoded[pred_order-3];
270  if (pred_order > 3)
271  d = c - decoded[pred_order-2] + 2*decoded[pred_order-3] - decoded[pred_order-4];
272 
273  switch (pred_order) {
274  case 0:
275  break;
276  case 1:
277  for (i = pred_order; i < blocksize; i++)
278  decoded[i] = a += decoded[i];
279  break;
280  case 2:
281  for (i = pred_order; i < blocksize; i++)
282  decoded[i] = a += b += decoded[i];
283  break;
284  case 3:
285  for (i = pred_order; i < blocksize; i++)
286  decoded[i] = a += b += c += decoded[i];
287  break;
288  case 4:
289  for (i = pred_order; i < blocksize; i++)
290  decoded[i] = a += b += c += d += decoded[i];
291  break;
292  default:
293  av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order);
294  return AVERROR_INVALIDDATA;
295  }
296 
297  return 0;
298 }
299 
300 static int decode_subframe_lpc(FLACContext *s, int32_t *decoded, int pred_order,
301  int bps)
302 {
303  int i, ret;
304  int coeff_prec, qlevel;
305  int coeffs[32];
306 
307  /* warm up samples */
308  for (i = 0; i < pred_order; i++) {
309  decoded[i] = get_sbits_long(&s->gb, bps);
310  }
311 
312  coeff_prec = get_bits(&s->gb, 4) + 1;
313  if (coeff_prec == 16) {
314  av_log(s->avctx, AV_LOG_ERROR, "invalid coeff precision\n");
315  return AVERROR_INVALIDDATA;
316  }
317  qlevel = get_sbits(&s->gb, 5);
318  if (qlevel < 0) {
319  av_log(s->avctx, AV_LOG_ERROR, "qlevel %d not supported, maybe buggy stream\n",
320  qlevel);
321  return AVERROR_INVALIDDATA;
322  }
323 
324  for (i = 0; i < pred_order; i++) {
325  coeffs[pred_order - i - 1] = get_sbits(&s->gb, coeff_prec);
326  }
327 
328  if ((ret = decode_residuals(s, decoded, pred_order)) < 0)
329  return ret;
330 
331  s->dsp.lpc(decoded, coeffs, pred_order, qlevel, s->blocksize);
332 
333  return 0;
334 }
335 
336 static inline int decode_subframe(FLACContext *s, int channel)
337 {
338  int32_t *decoded = s->decoded[channel];
339  int type, wasted = 0;
340  int bps = s->bps;
341  int i, tmp, ret;
342 
343  if (channel == 0) {
345  bps++;
346  } else {
348  bps++;
349  }
350 
351  if (get_bits1(&s->gb)) {
352  av_log(s->avctx, AV_LOG_ERROR, "invalid subframe padding\n");
353  return AVERROR_INVALIDDATA;
354  }
355  type = get_bits(&s->gb, 6);
356 
357  if (get_bits1(&s->gb)) {
358  int left = get_bits_left(&s->gb);
359  wasted = 1;
360  if ( left < 0 ||
361  (left < bps && !show_bits_long(&s->gb, left)) ||
362  !show_bits_long(&s->gb, bps)) {
364  "Invalid number of wasted bits > available bits (%d) - left=%d\n",
365  bps, left);
366  return AVERROR_INVALIDDATA;
367  }
368  while (!get_bits1(&s->gb))
369  wasted++;
370  bps -= wasted;
371  }
372  if (bps > 32) {
373  avpriv_report_missing_feature(s->avctx, "Decorrelated bit depth > 32");
374  return AVERROR_PATCHWELCOME;
375  }
376 
377 //FIXME use av_log2 for types
378  if (type == 0) {
379  tmp = get_sbits_long(&s->gb, bps);
380  for (i = 0; i < s->blocksize; i++)
381  decoded[i] = tmp;
382  } else if (type == 1) {
383  for (i = 0; i < s->blocksize; i++)
384  decoded[i] = get_sbits_long(&s->gb, bps);
385  } else if ((type >= 8) && (type <= 12)) {
386  if ((ret = decode_subframe_fixed(s, decoded, type & ~0x8, bps)) < 0)
387  return ret;
388  } else if (type >= 32) {
389  if ((ret = decode_subframe_lpc(s, decoded, (type & ~0x20)+1, bps)) < 0)
390  return ret;
391  } else {
392  av_log(s->avctx, AV_LOG_ERROR, "invalid coding type\n");
393  return AVERROR_INVALIDDATA;
394  }
395 
396  if (wasted) {
397  int i;
398  for (i = 0; i < s->blocksize; i++)
399  decoded[i] <<= wasted;
400  }
401 
402  return 0;
403 }
404 
406 {
407  int i, ret;
408  GetBitContext *gb = &s->gb;
410 
411  if (ff_flac_decode_frame_header(s->avctx, gb, &fi, 0)) {
412  av_log(s->avctx, AV_LOG_ERROR, "invalid frame header\n");
413  return AVERROR_INVALIDDATA;
414  }
415 
416  if (s->channels && fi.channels != s->channels && s->got_streaminfo) {
417  s->channels = s->avctx->channels = fi.channels;
419  ret = allocate_buffers(s);
420  if (ret < 0)
421  return ret;
422  }
423  s->channels = s->avctx->channels = fi.channels;
424  if (!s->avctx->channel_layout)
426  s->ch_mode = fi.ch_mode;
427 
428  if (!s->bps && !fi.bps) {
429  av_log(s->avctx, AV_LOG_ERROR, "bps not found in STREAMINFO or frame header\n");
430  return AVERROR_INVALIDDATA;
431  }
432  if (!fi.bps) {
433  fi.bps = s->bps;
434  } else if (s->bps && fi.bps != s->bps) {
435  av_log(s->avctx, AV_LOG_ERROR, "switching bps mid-stream is not "
436  "supported\n");
437  return -1;
438  }
439 
440  if (!s->bps) {
441  s->bps = s->avctx->bits_per_raw_sample = fi.bps;
442  flac_set_bps(s);
443  }
444 
445  if (!s->max_blocksize)
446  s->max_blocksize = FLAC_MAX_BLOCKSIZE;
447  if (fi.blocksize > s->max_blocksize) {
448  av_log(s->avctx, AV_LOG_ERROR, "blocksize %d > %d\n", fi.blocksize,
449  s->max_blocksize);
450  return AVERROR_INVALIDDATA;
451  }
452  s->blocksize = fi.blocksize;
453 
454  if (!s->samplerate && !fi.samplerate) {
455  av_log(s->avctx, AV_LOG_ERROR, "sample rate not found in STREAMINFO"
456  " or frame header\n");
457  return AVERROR_INVALIDDATA;
458  }
459  if (fi.samplerate == 0)
460  fi.samplerate = s->samplerate;
461  s->samplerate = s->avctx->sample_rate = fi.samplerate;
462 
463  if (!s->got_streaminfo) {
464  ret = allocate_buffers(s);
465  if (ret < 0)
466  return ret;
467  ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt, s->bps);
468  s->got_streaminfo = 1;
470  }
471 
472 // dump_headers(s->avctx, (FLACStreaminfo *)s);
473 
474  /* subframes */
475  for (i = 0; i < s->channels; i++) {
476  if ((ret = decode_subframe(s, i)) < 0)
477  return ret;
478  }
479 
480  align_get_bits(gb);
481 
482  /* frame footer */
483  skip_bits(gb, 16); /* data crc */
484 
485  return 0;
486 }
487 
489  int *got_frame_ptr, AVPacket *avpkt)
490 {
491  AVFrame *frame = data;
492  const uint8_t *buf = avpkt->data;
493  int buf_size = avpkt->size;
494  FLACContext *s = avctx->priv_data;
495  int bytes_read = 0;
496  int ret;
497 
498  *got_frame_ptr = 0;
499 
500  if (s->max_framesize == 0) {
501  s->max_framesize =
502  ff_flac_get_max_frame_size(s->max_blocksize ? s->max_blocksize : FLAC_MAX_BLOCKSIZE,
503  FLAC_MAX_CHANNELS, 32);
504  }
505 
506  if (buf_size > 5 && !memcmp(buf, "\177FLAC", 5)) {
507  av_log(s->avctx, AV_LOG_DEBUG, "skiping flac header packet 1\n");
508  return buf_size;
509  }
510 
511  if (buf_size > 0 && (*buf & 0x7F) == FLAC_METADATA_TYPE_VORBIS_COMMENT) {
512  av_log(s->avctx, AV_LOG_DEBUG, "skiping vorbis comment\n");
513  return buf_size;
514  }
515 
516  /* check that there is at least the smallest decodable amount of data.
517  this amount corresponds to the smallest valid FLAC frame possible.
518  FF F8 69 02 00 00 9A 00 00 34 46 */
519  if (buf_size < FLAC_MIN_FRAME_SIZE)
520  return buf_size;
521 
522  /* check for inline header */
523  if (AV_RB32(buf) == MKBETAG('f','L','a','C')) {
524  if (!s->got_streaminfo && parse_streaminfo(s, buf, buf_size)) {
525  av_log(s->avctx, AV_LOG_ERROR, "invalid header\n");
526  return AVERROR_INVALIDDATA;
527  }
528  return get_metadata_size(buf, buf_size);
529  }
530 
531  /* decode frame */
532  init_get_bits(&s->gb, buf, buf_size*8);
533  if ((ret = decode_frame(s)) < 0) {
534  av_log(s->avctx, AV_LOG_ERROR, "decode_frame() failed\n");
535  return ret;
536  }
537  bytes_read = get_bits_count(&s->gb)/8;
538 
539  if ((s->avctx->err_recognition & AV_EF_CRCCHECK) &&
541  0, buf, bytes_read)) {
542  av_log(s->avctx, AV_LOG_ERROR, "CRC error at PTS %"PRId64"\n", avpkt->pts);
544  return AVERROR_INVALIDDATA;
545  }
546 
547  /* get output buffer */
548  frame->nb_samples = s->blocksize;
549  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
550  return ret;
551 
552  s->dsp.decorrelate[s->ch_mode](frame->data, s->decoded, s->channels,
553  s->blocksize, s->sample_shift);
554 
555  if (bytes_read > buf_size) {
556  av_log(s->avctx, AV_LOG_ERROR, "overread: %d\n", bytes_read - buf_size);
557  return AVERROR_INVALIDDATA;
558  }
559  if (bytes_read < buf_size) {
560  av_log(s->avctx, AV_LOG_DEBUG, "underread: %d orig size: %d\n",
561  buf_size - bytes_read, buf_size);
562  }
563 
564  *got_frame_ptr = 1;
565 
566  return bytes_read;
567 }
568 
570 {
571  FLACContext *s = avctx->priv_data;
572 
574 
575  return 0;
576 }
577 
579  .name = "flac",
580  .type = AVMEDIA_TYPE_AUDIO,
581  .id = AV_CODEC_ID_FLAC,
582  .priv_data_size = sizeof(FLACContext),
586  .capabilities = CODEC_CAP_DR1,
587  .long_name = NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
588  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16,
593 };
static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
Definition: get_bits.h:352
static int get_sr_golomb_flac(GetBitContext *gb, int k, int limit, int esc_len)
read signed golomb rice code (flac).
Definition: golomb.h:358
const char * s
Definition: avisynth_c.h:668
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
This structure describes decoded (raw) audio or video data.
Definition: frame.h:76
int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align)
Get the required buffer size for the given audio parameters.
Definition: samplefmt.c:125
void avpriv_flac_parse_block_header(const uint8_t *block_header, int *last, int *type, int *size)
Parse the metadata block parameters from the header.
Definition: flac.c:236
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
Definition: crc.c:275
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:240
struct FLACContext FLACContext
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static int allocate_buffers(FLACContext *s)
av_cold void ff_flacdsp_init(FLACDSPContext *c, enum AVSampleFormat fmt, int bps)
Definition: flacdsp.c:88
int ff_flac_get_max_frame_size(int blocksize, int ch, int bps)
Calculate an estimate for the maximum frame size based on verbatim mode.
Definition: flac.c:148
void(* lpc)(int32_t *samples, const int coeffs[32], int order, int qlevel, int len)
Definition: flacdsp.h:28
int avpriv_flac_is_extradata_valid(AVCodecContext *avctx, enum FLACExtradataFormat *format, uint8_t **streaminfo_start)
Validate the FLAC extradata.
Definition: flac.c:169
#define FLAC_MAX_BLOCKSIZE
Definition: flac.h:36
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
static int decode_residuals(FLACContext *s, int32_t *decoded, int pred_order)
signed 16 bits
Definition: samplefmt.h:52
FLACCOMMONINFO int blocksize
block size of the frame
Definition: flac.h:85
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
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, const uint8_t *buf, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align)
Fill plane data pointers and linesize for samples with sample format sample_fmt.
Definition: samplefmt.c:155
enum AVSampleFormat sample_fmt
audio sample format
uint8_t
#define av_cold
Definition: attributes.h:78
FLACDSPContext dsp
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
Definition: crc.c:261
#define AV_RB32
#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.
static void flac_set_bps(FLACContext *s)
uint8_t * decoded_buffer
uint8_t * data
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:193
bitstream reader API header.
unsigned int decoded_buffer_size
signed 32 bits, planar
Definition: samplefmt.h:59
frame
Definition: stft.m:14
FLACExtradataFormat
Definition: flac.h:57
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:557
AVS_FilterInfo ** fi
Definition: avisynth_c.h:635
int32_t * decoded[FLAC_MAX_CHANNELS]
decoded samples
int ch_mode
channel decorrelation mode
Definition: flac.h:86
#define AV_EF_EXPLODE
FLAC (Free Lossless Audio Codec) decoder/demuxer common functions.
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 decode_subframe_lpc(FLACContext *s, int32_t *decoded, int pred_order, int bps)
simple assert() macros that are a bit more flexible than ISO C assert().
static int get_metadata_size(const uint8_t *buf, int buf_size)
Determine the size of an inline header.
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
GetBitContext gb
GetBitContext initialized to start at the current frame.
const char * name
Name of the codec implementation.
static void dump_headers(AVCodecContext *avctx, FLACStreaminfo *s)
void avpriv_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, const uint8_t *buffer)
Parse the Streaminfo metadata block.
Definition: flac.c:204
#define FLACSTREAMINFO
Data needed from the Streaminfo header for use by the raw FLAC demuxer and/or the FLAC decoder...
Definition: flac.h:72
int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, FLACFrameInfo *fi, int log_level_offset)
Validate and decode a frame header.
Definition: flac.c:50
external API header
static int decode_subframe_fixed(FLACContext *s, int32_t *decoded, int pred_order, int bps)
uint64_t channel_layout
Audio channel layout.
signed 32 bits
Definition: samplefmt.h:53
audio channel layout utility functions
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
int got_streaminfo
indicates if the STREAMINFO has been read
ret
Definition: avfilter.c:821
int32_t
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 format(the sample packing is implied by the sample format) and sample rate.The lists are not just lists
#define FLAC_STREAMINFO_SIZE
Definition: flac.h:33
int sample_shift
shift required to make output samples 16-bit or 32-bit
AVCodec ff_flac_decoder
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample.
Definition: samplefmt.c:104
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:62
NULL
Definition: eval.c:55
int sample_rate
samples per second
static int decode_frame(FLACContext *s)
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
void * buf
Definition: avisynth_c.h:594
void ff_flac_set_channel_layout(AVCodecContext *avctx)
Definition: flac.c:196
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 int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:379
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
#define type
static int parse_streaminfo(FLACContext *s, const uint8_t *buf, int buf_size)
Parse the STREAMINFO from an inline header.
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:87
int blocksize
number of samples in the current frame
static int decode_subframe(FLACContext *s, int channel)
FLACSTREAMINFO AVCodecContext * avctx
parent AVCodecContext
common internal api header.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:162
static double c[64]
AVSampleFormat
Audio Sample Formats.
Definition: samplefmt.h:49
#define FLAC_MIN_FRAME_SIZE
Definition: flac.h:37
unsigned bps
Definition: movenc.c:895
#define AV_EF_CRCCHECK
#define MKBETAG(a, b, c, d)
Definition: common.h:283
int channels
number of audio channels
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:418
signed 16 bits, planar
Definition: samplefmt.h:58
#define av_uninit(x)
Definition: attributes.h:137
static av_cold int flac_decode_init(AVCodecContext *avctx)
Filter the word “frame” indicates either a video frame or a group of audio samples
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868
exp golomb vlc stuff
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:127
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
void(* decorrelate[4])(uint8_t **out, int32_t **in, int channels, int len, int shift)
Definition: flacdsp.h:26
#define FLAC_MAX_CHANNELS
Definition: flac.h:34
static av_cold int flac_decode_close(AVCodecContext *avctx)
int ch_mode
channel decorrelation type in the current frame
static int flac_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)