2 * FLAC (Free Lossless Audio Codec) decoder
3 * Copyright (c) 2003 Alex Beregszaszi
5 * This file is part of Libav.
7 * Libav 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.
12 * Libav 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.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with Libav; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 * FLAC (Free Lossless Audio Codec) decoder
25 * @author Alex Beregszaszi
26 * @see http://flac.sourceforge.net/
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.
36 #include "libavutil/audioconvert.h"
37 #include "libavutil/crc.h"
41 #include "bytestream.h"
50 typedef struct FLACContext {
53 AVCodecContext *avctx; ///< parent AVCodecContext
55 GetBitContext gb; ///< GetBitContext initialized to start at the current frame
57 int blocksize; ///< number of samples in the current frame
58 int sample_shift; ///< shift required to make output samples 16-bit or 32-bit
59 int ch_mode; ///< channel decorrelation type in the current frame
60 int got_streaminfo; ///< indicates if the STREAMINFO has been read
62 int32_t *decoded[FLAC_MAX_CHANNELS]; ///< decoded samples
67 static const int64_t flac_channel_layouts[6] = {
70 AV_CH_LAYOUT_SURROUND,
76 static void allocate_buffers(FLACContext *s);
78 int avpriv_flac_is_extradata_valid(AVCodecContext *avctx,
79 enum FLACExtradataFormat *format,
80 uint8_t **streaminfo_start)
82 if (!avctx->extradata || avctx->extradata_size < FLAC_STREAMINFO_SIZE) {
83 av_log(avctx, AV_LOG_ERROR, "extradata NULL or too small.\n");
86 if (AV_RL32(avctx->extradata) != MKTAG('f','L','a','C')) {
87 /* extradata contains STREAMINFO only */
88 if (avctx->extradata_size != FLAC_STREAMINFO_SIZE) {
89 av_log(avctx, AV_LOG_WARNING, "extradata contains %d bytes too many.\n",
90 FLAC_STREAMINFO_SIZE-avctx->extradata_size);
92 *format = FLAC_EXTRADATA_FORMAT_STREAMINFO;
93 *streaminfo_start = avctx->extradata;
95 if (avctx->extradata_size < 8+FLAC_STREAMINFO_SIZE) {
96 av_log(avctx, AV_LOG_ERROR, "extradata too small.\n");
99 *format = FLAC_EXTRADATA_FORMAT_FULL_HEADER;
100 *streaminfo_start = &avctx->extradata[8];
105 static void flac_set_bps(FLACContext *s)
107 enum AVSampleFormat req = s->avctx->request_sample_fmt;
108 int need32 = s->bps > 16;
109 int want32 = av_get_bytes_per_sample(req) > 2;
110 int planar = av_sample_fmt_is_planar(req);
112 if (need32 || want32) {
114 s->avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
116 s->avctx->sample_fmt = AV_SAMPLE_FMT_S32;
117 s->sample_shift = 32 - s->bps;
120 s->avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
122 s->avctx->sample_fmt = AV_SAMPLE_FMT_S16;
123 s->sample_shift = 16 - s->bps;
127 static av_cold int flac_decode_init(AVCodecContext *avctx)
129 enum FLACExtradataFormat format;
131 FLACContext *s = avctx->priv_data;
134 /* for now, the raw FLAC header is allowed to be passed to the decoder as
135 frame data instead of extradata. */
136 if (!avctx->extradata)
139 if (!avpriv_flac_is_extradata_valid(avctx, &format, &streaminfo))
142 /* initialize based on the demuxer-supplied streamdata header */
143 avpriv_flac_parse_streaminfo(avctx, (FLACStreaminfo *)s, streaminfo);
146 ff_flacdsp_init(&s->dsp, avctx->sample_fmt, s->bps);
147 s->got_streaminfo = 1;
149 avcodec_get_frame_defaults(&s->frame);
150 avctx->coded_frame = &s->frame;
152 if (avctx->channels <= FF_ARRAY_ELEMS(flac_channel_layouts))
153 avctx->channel_layout = flac_channel_layouts[avctx->channels - 1];
158 static void dump_headers(AVCodecContext *avctx, FLACStreaminfo *s)
160 av_log(avctx, AV_LOG_DEBUG, " Max Blocksize: %d\n", s->max_blocksize);
161 av_log(avctx, AV_LOG_DEBUG, " Max Framesize: %d\n", s->max_framesize);
162 av_log(avctx, AV_LOG_DEBUG, " Samplerate: %d\n", s->samplerate);
163 av_log(avctx, AV_LOG_DEBUG, " Channels: %d\n", s->channels);
164 av_log(avctx, AV_LOG_DEBUG, " Bits: %d\n", s->bps);
167 static void allocate_buffers(FLACContext *s)
171 assert(s->max_blocksize);
173 for (i = 0; i < s->channels; i++) {
174 s->decoded[i] = av_malloc(sizeof(int32_t)*s->max_blocksize);
178 void avpriv_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s,
179 const uint8_t *buffer)
182 init_get_bits(&gb, buffer, FLAC_STREAMINFO_SIZE*8);
184 skip_bits(&gb, 16); /* skip min blocksize */
185 s->max_blocksize = get_bits(&gb, 16);
186 if (s->max_blocksize < FLAC_MIN_BLOCKSIZE) {
187 av_log(avctx, AV_LOG_WARNING, "invalid max blocksize: %d\n",
189 s->max_blocksize = 16;
192 skip_bits(&gb, 24); /* skip min frame size */
193 s->max_framesize = get_bits_long(&gb, 24);
195 s->samplerate = get_bits_long(&gb, 20);
196 s->channels = get_bits(&gb, 3) + 1;
197 s->bps = get_bits(&gb, 5) + 1;
199 avctx->channels = s->channels;
200 avctx->sample_rate = s->samplerate;
201 avctx->bits_per_raw_sample = s->bps;
203 s->samples = get_bits_long(&gb, 32) << 4;
204 s->samples |= get_bits(&gb, 4);
206 skip_bits_long(&gb, 64); /* md5 sum */
207 skip_bits_long(&gb, 64); /* md5 sum */
209 dump_headers(avctx, s);
212 void avpriv_flac_parse_block_header(const uint8_t *block_header,
213 int *last, int *type, int *size)
215 int tmp = bytestream_get_byte(&block_header);
221 *size = bytestream_get_be24(&block_header);
225 * Parse the STREAMINFO from an inline header.
226 * @param s the flac decoding context
227 * @param buf input buffer, starting with the "fLaC" marker
228 * @param buf_size buffer size
229 * @return non-zero if metadata is invalid
231 static int parse_streaminfo(FLACContext *s, const uint8_t *buf, int buf_size)
233 int metadata_type, metadata_size;
235 if (buf_size < FLAC_STREAMINFO_SIZE+8) {
239 avpriv_flac_parse_block_header(&buf[4], NULL, &metadata_type, &metadata_size);
240 if (metadata_type != FLAC_METADATA_TYPE_STREAMINFO ||
241 metadata_size != FLAC_STREAMINFO_SIZE) {
242 return AVERROR_INVALIDDATA;
244 avpriv_flac_parse_streaminfo(s->avctx, (FLACStreaminfo *)s, &buf[8]);
247 ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt, s->bps);
248 s->got_streaminfo = 1;
254 * Determine the size of an inline header.
255 * @param buf input buffer, starting with the "fLaC" marker
256 * @param buf_size buffer size
257 * @return number of bytes in the header, or 0 if more data is needed
259 static int get_metadata_size(const uint8_t *buf, int buf_size)
261 int metadata_last, metadata_size;
262 const uint8_t *buf_end = buf + buf_size;
266 if (buf_end - buf < 4)
268 avpriv_flac_parse_block_header(buf, &metadata_last, NULL, &metadata_size);
270 if (buf_end - buf < metadata_size) {
271 /* need more data in order to read the complete header */
274 buf += metadata_size;
275 } while (!metadata_last);
277 return buf_size - (buf_end - buf);
280 static int decode_residuals(FLACContext *s, int channel, int pred_order)
282 int i, tmp, partition, method_type, rice_order;
283 int sample = 0, samples;
285 method_type = get_bits(&s->gb, 2);
286 if (method_type > 1) {
287 av_log(s->avctx, AV_LOG_ERROR, "illegal residual coding method %d\n",
292 rice_order = get_bits(&s->gb, 4);
294 samples= s->blocksize >> rice_order;
295 if (pred_order > samples) {
296 av_log(s->avctx, AV_LOG_ERROR, "invalid predictor order: %i > %i\n",
297 pred_order, samples);
303 for (partition = 0; partition < (1 << rice_order); partition++) {
304 tmp = get_bits(&s->gb, method_type == 0 ? 4 : 5);
305 if (tmp == (method_type == 0 ? 15 : 31)) {
306 tmp = get_bits(&s->gb, 5);
307 for (; i < samples; i++, sample++)
308 s->decoded[channel][sample] = get_sbits_long(&s->gb, tmp);
310 for (; i < samples; i++, sample++) {
311 s->decoded[channel][sample] = get_sr_golomb_flac(&s->gb, tmp, INT_MAX, 0);
320 static int decode_subframe_fixed(FLACContext *s, int channel, int pred_order,
323 const int blocksize = s->blocksize;
324 int32_t *decoded = s->decoded[channel];
327 /* warm up samples */
328 for (i = 0; i < pred_order; i++) {
329 decoded[i] = get_sbits_long(&s->gb, bps);
332 if (decode_residuals(s, channel, pred_order) < 0)
336 a = decoded[pred_order-1];
338 b = a - decoded[pred_order-2];
340 c = b - decoded[pred_order-2] + decoded[pred_order-3];
342 d = c - decoded[pred_order-2] + 2*decoded[pred_order-3] - decoded[pred_order-4];
344 switch (pred_order) {
348 for (i = pred_order; i < blocksize; i++)
349 decoded[i] = a += decoded[i];
352 for (i = pred_order; i < blocksize; i++)
353 decoded[i] = a += b += decoded[i];
356 for (i = pred_order; i < blocksize; i++)
357 decoded[i] = a += b += c += decoded[i];
360 for (i = pred_order; i < blocksize; i++)
361 decoded[i] = a += b += c += d += decoded[i];
364 av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order);
371 static int decode_subframe_lpc(FLACContext *s, int channel, int pred_order,
375 int coeff_prec, qlevel;
377 int32_t *decoded = s->decoded[channel];
379 /* warm up samples */
380 for (i = 0; i < pred_order; i++) {
381 decoded[i] = get_sbits_long(&s->gb, bps);
384 coeff_prec = get_bits(&s->gb, 4) + 1;
385 if (coeff_prec == 16) {
386 av_log(s->avctx, AV_LOG_ERROR, "invalid coeff precision\n");
389 qlevel = get_sbits(&s->gb, 5);
391 av_log(s->avctx, AV_LOG_ERROR, "qlevel %d not supported, maybe buggy stream\n",
396 for (i = 0; i < pred_order; i++) {
397 coeffs[i] = get_sbits(&s->gb, coeff_prec);
400 if (decode_residuals(s, channel, pred_order) < 0)
403 s->dsp.lpc(decoded, coeffs, pred_order, qlevel, s->blocksize);
408 static inline int decode_subframe(FLACContext *s, int channel)
410 int type, wasted = 0;
415 if (s->ch_mode == FLAC_CHMODE_RIGHT_SIDE)
418 if (s->ch_mode == FLAC_CHMODE_LEFT_SIDE || s->ch_mode == FLAC_CHMODE_MID_SIDE)
422 if (get_bits1(&s->gb)) {
423 av_log(s->avctx, AV_LOG_ERROR, "invalid subframe padding\n");
426 type = get_bits(&s->gb, 6);
428 if (get_bits1(&s->gb)) {
429 int left = get_bits_left(&s->gb);
432 (left < bps && !show_bits_long(&s->gb, left)) ||
433 !show_bits_long(&s->gb, bps)) {
434 av_log(s->avctx, AV_LOG_ERROR,
435 "Invalid number of wasted bits > available bits (%d) - left=%d\n",
437 return AVERROR_INVALIDDATA;
439 while (!get_bits1(&s->gb))
444 av_log_missing_feature(s->avctx, "decorrelated bit depth > 32", 0);
448 //FIXME use av_log2 for types
450 tmp = get_sbits_long(&s->gb, bps);
451 for (i = 0; i < s->blocksize; i++)
452 s->decoded[channel][i] = tmp;
453 } else if (type == 1) {
454 for (i = 0; i < s->blocksize; i++)
455 s->decoded[channel][i] = get_sbits_long(&s->gb, bps);
456 } else if ((type >= 8) && (type <= 12)) {
457 if (decode_subframe_fixed(s, channel, type & ~0x8, bps) < 0)
459 } else if (type >= 32) {
460 if (decode_subframe_lpc(s, channel, (type & ~0x20)+1, bps) < 0)
463 av_log(s->avctx, AV_LOG_ERROR, "invalid coding type\n");
469 for (i = 0; i < s->blocksize; i++)
470 s->decoded[channel][i] <<= wasted;
476 static int decode_frame(FLACContext *s)
479 GetBitContext *gb = &s->gb;
482 if (ff_flac_decode_frame_header(s->avctx, gb, &fi, 0)) {
483 av_log(s->avctx, AV_LOG_ERROR, "invalid frame header\n");
487 if (s->channels && fi.channels != s->channels) {
488 av_log(s->avctx, AV_LOG_ERROR, "switching channel layout mid-stream "
489 "is not supported\n");
492 s->channels = s->avctx->channels = fi.channels;
493 s->ch_mode = fi.ch_mode;
495 if (!s->bps && !fi.bps) {
496 av_log(s->avctx, AV_LOG_ERROR, "bps not found in STREAMINFO or frame header\n");
501 } else if (s->bps && fi.bps != s->bps) {
502 av_log(s->avctx, AV_LOG_ERROR, "switching bps mid-stream is not "
508 s->bps = s->avctx->bits_per_raw_sample = fi.bps;
512 if (!s->max_blocksize)
513 s->max_blocksize = FLAC_MAX_BLOCKSIZE;
514 if (fi.blocksize > s->max_blocksize) {
515 av_log(s->avctx, AV_LOG_ERROR, "blocksize %d > %d\n", fi.blocksize,
519 s->blocksize = fi.blocksize;
521 if (!s->samplerate && !fi.samplerate) {
522 av_log(s->avctx, AV_LOG_ERROR, "sample rate not found in STREAMINFO"
523 " or frame header\n");
526 if (fi.samplerate == 0) {
527 fi.samplerate = s->samplerate;
528 } else if (s->samplerate && fi.samplerate != s->samplerate) {
529 av_log(s->avctx, AV_LOG_WARNING, "sample rate changed from %d to %d\n",
530 s->samplerate, fi.samplerate);
532 s->samplerate = s->avctx->sample_rate = fi.samplerate;
534 if (!s->got_streaminfo) {
536 ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt, s->bps);
537 s->got_streaminfo = 1;
538 dump_headers(s->avctx, (FLACStreaminfo *)s);
541 // dump_headers(s->avctx, (FLACStreaminfo *)s);
544 for (i = 0; i < s->channels; i++) {
545 if (decode_subframe(s, i) < 0)
552 skip_bits(gb, 16); /* data crc */
557 static int flac_decode_frame(AVCodecContext *avctx, void *data,
558 int *got_frame_ptr, AVPacket *avpkt)
560 const uint8_t *buf = avpkt->data;
561 int buf_size = avpkt->size;
562 FLACContext *s = avctx->priv_data;
568 if (s->max_framesize == 0) {
570 ff_flac_get_max_frame_size(s->max_blocksize ? s->max_blocksize : FLAC_MAX_BLOCKSIZE,
571 FLAC_MAX_CHANNELS, 32);
574 /* check that there is at least the smallest decodable amount of data.
575 this amount corresponds to the smallest valid FLAC frame possible.
576 FF F8 69 02 00 00 9A 00 00 34 46 */
577 if (buf_size < FLAC_MIN_FRAME_SIZE)
580 /* check for inline header */
581 if (AV_RB32(buf) == MKBETAG('f','L','a','C')) {
582 if (!s->got_streaminfo && parse_streaminfo(s, buf, buf_size)) {
583 av_log(s->avctx, AV_LOG_ERROR, "invalid header\n");
586 return get_metadata_size(buf, buf_size);
590 init_get_bits(&s->gb, buf, buf_size*8);
591 if (decode_frame(s) < 0) {
592 av_log(s->avctx, AV_LOG_ERROR, "decode_frame() failed\n");
595 bytes_read = (get_bits_count(&s->gb)+7)/8;
597 /* get output buffer */
598 s->frame.nb_samples = s->blocksize;
599 if ((ret = avctx->get_buffer(avctx, &s->frame)) < 0) {
600 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
604 s->dsp.decorrelate[s->ch_mode](s->frame.data, s->decoded, s->channels,
605 s->blocksize, s->sample_shift);
607 if (bytes_read > buf_size) {
608 av_log(s->avctx, AV_LOG_ERROR, "overread: %d\n", bytes_read - buf_size);
611 if (bytes_read < buf_size) {
612 av_log(s->avctx, AV_LOG_DEBUG, "underread: %d orig size: %d\n",
613 buf_size - bytes_read, buf_size);
617 *(AVFrame *)data = s->frame;
622 static av_cold int flac_decode_close(AVCodecContext *avctx)
624 FLACContext *s = avctx->priv_data;
627 for (i = 0; i < s->channels; i++) {
628 av_freep(&s->decoded[i]);
634 AVCodec ff_flac_decoder = {
636 .type = AVMEDIA_TYPE_AUDIO,
638 .priv_data_size = sizeof(FLACContext),
639 .init = flac_decode_init,
640 .close = flac_decode_close,
641 .decode = flac_decode_frame,
642 .capabilities = CODEC_CAP_DR1,
643 .long_name = NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
644 .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16,