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.
37 #include "bitstream.h"
39 #include "bytestream.h"
45 typedef struct FLACContext {
48 AVCodecContext *avctx; ///< parent AVCodecContext
49 BitstreamContext bc; ///< BitstreamContext initialized to start at the current frame
51 int blocksize; ///< number of samples in the current frame
52 int sample_shift; ///< shift required to make output samples 16-bit or 32-bit
53 int ch_mode; ///< channel decorrelation type in the current frame
54 int got_streaminfo; ///< indicates if the STREAMINFO has been read
56 int32_t *decoded[FLAC_MAX_CHANNELS]; ///< decoded samples
57 uint8_t *decoded_buffer;
58 unsigned int decoded_buffer_size;
63 static int allocate_buffers(FLACContext *s);
65 static void flac_set_bps(FLACContext *s)
67 enum AVSampleFormat req = s->avctx->request_sample_fmt;
68 int need32 = s->bps > 16;
69 int want32 = av_get_bytes_per_sample(req) > 2;
70 int planar = av_sample_fmt_is_planar(req);
72 if (need32 || want32) {
74 s->avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
76 s->avctx->sample_fmt = AV_SAMPLE_FMT_S32;
77 s->sample_shift = 32 - s->bps;
80 s->avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
82 s->avctx->sample_fmt = AV_SAMPLE_FMT_S16;
83 s->sample_shift = 16 - s->bps;
87 static av_cold int flac_decode_init(AVCodecContext *avctx)
89 enum FLACExtradataFormat format;
92 FLACContext *s = avctx->priv_data;
95 /* for now, the raw FLAC header is allowed to be passed to the decoder as
96 frame data instead of extradata. */
97 if (!avctx->extradata)
100 if (!ff_flac_is_extradata_valid(avctx, &format, &streaminfo))
101 return AVERROR_INVALIDDATA;
103 /* initialize based on the demuxer-supplied streamdata header */
104 ff_flac_parse_streaminfo(avctx, (FLACStreaminfo *)s, streaminfo);
105 ret = allocate_buffers(s);
109 ff_flacdsp_init(&s->dsp, avctx->sample_fmt, s->bps);
110 s->got_streaminfo = 1;
115 static void dump_headers(AVCodecContext *avctx, FLACStreaminfo *s)
117 av_log(avctx, AV_LOG_DEBUG, " Max Blocksize: %d\n", s->max_blocksize);
118 av_log(avctx, AV_LOG_DEBUG, " Max Framesize: %d\n", s->max_framesize);
119 av_log(avctx, AV_LOG_DEBUG, " Samplerate: %d\n", s->samplerate);
120 av_log(avctx, AV_LOG_DEBUG, " Channels: %d\n", s->channels);
121 av_log(avctx, AV_LOG_DEBUG, " Bits: %d\n", s->bps);
124 static int allocate_buffers(FLACContext *s)
128 buf_size = av_samples_get_buffer_size(NULL, s->channels, s->max_blocksize,
129 AV_SAMPLE_FMT_S32P, 0);
133 av_fast_malloc(&s->decoded_buffer, &s->decoded_buffer_size, buf_size);
134 if (!s->decoded_buffer)
135 return AVERROR(ENOMEM);
137 return av_samples_fill_arrays((uint8_t **)s->decoded, NULL,
138 s->decoded_buffer, s->channels,
139 s->max_blocksize, AV_SAMPLE_FMT_S32P, 0);
143 * Parse the STREAMINFO from an inline header.
144 * @param s the flac decoding context
145 * @param buf input buffer, starting with the "fLaC" marker
146 * @param buf_size buffer size
147 * @return non-zero if metadata is invalid
149 static int parse_streaminfo(FLACContext *s, const uint8_t *buf, int buf_size)
151 int metadata_type, metadata_size, ret;
153 if (buf_size < FLAC_STREAMINFO_SIZE+8) {
157 flac_parse_block_header(&buf[4], NULL, &metadata_type, &metadata_size);
158 if (metadata_type != FLAC_METADATA_TYPE_STREAMINFO ||
159 metadata_size != FLAC_STREAMINFO_SIZE) {
160 return AVERROR_INVALIDDATA;
162 ff_flac_parse_streaminfo(s->avctx, (FLACStreaminfo *)s, &buf[8]);
163 ret = allocate_buffers(s);
167 ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt, s->bps);
168 s->got_streaminfo = 1;
174 * Determine the size of an inline header.
175 * @param buf input buffer, starting with the "fLaC" marker
176 * @param buf_size buffer size
177 * @return number of bytes in the header, or 0 if more data is needed
179 static int get_metadata_size(const uint8_t *buf, int buf_size)
181 int metadata_last, metadata_size;
182 const uint8_t *buf_end = buf + buf_size;
186 if (buf_end - buf < 4)
188 flac_parse_block_header(buf, &metadata_last, NULL, &metadata_size);
190 if (buf_end - buf < metadata_size) {
191 /* need more data in order to read the complete header */
194 buf += metadata_size;
195 } while (!metadata_last);
197 return buf_size - (buf_end - buf);
200 static int decode_residuals(FLACContext *s, int32_t *decoded, int pred_order)
202 BitstreamContext bc = s->bc;
203 int i, tmp, partition, method_type, rice_order;
204 int rice_bits, rice_esc;
207 method_type = bitstream_read(&bc, 2);
208 rice_order = bitstream_read(&bc, 4);
210 samples = s->blocksize >> rice_order;
211 rice_bits = 4 + method_type;
212 rice_esc = (1 << rice_bits) - 1;
214 decoded += pred_order;
217 if (method_type > 1) {
218 av_log(s->avctx, AV_LOG_ERROR, "illegal residual coding method %d\n",
220 return AVERROR_INVALIDDATA;
223 if (pred_order > samples) {
224 av_log(s->avctx, AV_LOG_ERROR, "invalid predictor order: %i > %i\n",
225 pred_order, samples);
226 return AVERROR_INVALIDDATA;
229 for (partition = 0; partition < (1 << rice_order); partition++) {
230 tmp = bitstream_read(&bc, rice_bits);
231 if (tmp == rice_esc) {
232 tmp = bitstream_read(&bc, 5);
233 for (; i < samples; i++)
234 *decoded++ = bitstream_read_signed(&bc, tmp);
236 for (; i < samples; i++) {
237 *decoded++ = get_sr_golomb_flac(&bc, tmp, INT_MAX, 0);
248 static int decode_subframe_fixed(FLACContext *s, int32_t *decoded,
249 int pred_order, int bps)
251 const int blocksize = s->blocksize;
252 int a, b, c, d, i, ret;
254 /* warm up samples */
255 for (i = 0; i < pred_order; i++) {
256 decoded[i] = bitstream_read_signed(&s->bc, bps);
259 if ((ret = decode_residuals(s, decoded, pred_order)) < 0)
263 a = decoded[pred_order-1];
265 b = a - decoded[pred_order-2];
267 c = b - decoded[pred_order-2] + decoded[pred_order-3];
269 d = c - decoded[pred_order-2] + 2*decoded[pred_order-3] - decoded[pred_order-4];
271 switch (pred_order) {
275 for (i = pred_order; i < blocksize; i++)
276 decoded[i] = a += decoded[i];
279 for (i = pred_order; i < blocksize; i++)
280 decoded[i] = a += b += decoded[i];
283 for (i = pred_order; i < blocksize; i++)
284 decoded[i] = a += b += c += decoded[i];
287 for (i = pred_order; i < blocksize; i++)
288 decoded[i] = a += b += c += d += decoded[i];
291 av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order);
292 return AVERROR_INVALIDDATA;
298 static int decode_subframe_lpc(FLACContext *s, int32_t *decoded, int pred_order,
302 int coeff_prec, qlevel;
305 /* warm up samples */
306 for (i = 0; i < pred_order; i++) {
307 decoded[i] = bitstream_read_signed(&s->bc, bps);
310 coeff_prec = bitstream_read(&s->bc, 4) + 1;
311 if (coeff_prec == 16) {
312 av_log(s->avctx, AV_LOG_ERROR, "invalid coeff precision\n");
313 return AVERROR_INVALIDDATA;
315 qlevel = bitstream_read_signed(&s->bc, 5);
317 av_log(s->avctx, AV_LOG_ERROR, "qlevel %d not supported, maybe buggy stream\n",
319 return AVERROR_INVALIDDATA;
322 for (i = 0; i < pred_order; i++) {
323 coeffs[pred_order - i - 1] = bitstream_read_signed(&s->bc, coeff_prec);
326 if ((ret = decode_residuals(s, decoded, pred_order)) < 0)
329 s->dsp.lpc(decoded, coeffs, pred_order, qlevel, s->blocksize);
334 static inline int decode_subframe(FLACContext *s, int channel)
336 int32_t *decoded = s->decoded[channel];
337 int type, wasted = 0;
342 if (s->ch_mode == FLAC_CHMODE_RIGHT_SIDE)
345 if (s->ch_mode == FLAC_CHMODE_LEFT_SIDE || s->ch_mode == FLAC_CHMODE_MID_SIDE)
349 if (bitstream_read_bit(&s->bc)) {
350 av_log(s->avctx, AV_LOG_ERROR, "invalid subframe padding\n");
351 return AVERROR_INVALIDDATA;
353 type = bitstream_read(&s->bc, 6);
355 if (bitstream_read_bit(&s->bc)) {
356 int left = bitstream_bits_left(&s->bc);
359 (left < bps && !bitstream_peek(&s->bc, left)) ||
360 !bitstream_peek(&s->bc, bps)) {
361 av_log(s->avctx, AV_LOG_ERROR,
362 "Invalid number of wasted bits > available bits (%d) - left=%d\n",
364 return AVERROR_INVALIDDATA;
366 while (!bitstream_read_bit(&s->bc))
371 avpriv_report_missing_feature(s->avctx, "Decorrelated bit depth > 32");
372 return AVERROR_PATCHWELCOME;
375 //FIXME use av_log2 for types
377 tmp = bitstream_read_signed(&s->bc, bps);
378 for (i = 0; i < s->blocksize; i++)
380 } else if (type == 1) {
381 for (i = 0; i < s->blocksize; i++)
382 decoded[i] = bitstream_read_signed(&s->bc, bps);
383 } else if ((type >= 8) && (type <= 12)) {
384 if ((ret = decode_subframe_fixed(s, decoded, type & ~0x8, bps)) < 0)
386 } else if (type >= 32) {
387 if ((ret = decode_subframe_lpc(s, decoded, (type & ~0x20)+1, bps)) < 0)
390 av_log(s->avctx, AV_LOG_ERROR, "invalid coding type\n");
391 return AVERROR_INVALIDDATA;
396 for (i = 0; i < s->blocksize; i++)
397 decoded[i] <<= wasted;
403 static int decode_frame(FLACContext *s)
406 BitstreamContext *bc = &s->bc;
409 if ((ret = ff_flac_decode_frame_header(s->avctx, bc, &fi, 0)) < 0) {
410 av_log(s->avctx, AV_LOG_ERROR, "invalid frame header\n");
414 if (s->channels && fi.channels != s->channels && s->got_streaminfo) {
415 s->channels = s->avctx->channels = fi.channels;
416 ff_flac_set_channel_layout(s->avctx);
417 ret = allocate_buffers(s);
421 s->channels = s->avctx->channels = fi.channels;
422 if (!s->avctx->channel_layout)
423 ff_flac_set_channel_layout(s->avctx);
424 s->ch_mode = fi.ch_mode;
426 if (!s->bps && !fi.bps) {
427 av_log(s->avctx, AV_LOG_ERROR, "bps not found in STREAMINFO or frame header\n");
428 return AVERROR_INVALIDDATA;
432 } else if (s->bps && fi.bps != s->bps) {
433 av_log(s->avctx, AV_LOG_ERROR, "switching bps mid-stream is not "
435 return AVERROR_INVALIDDATA;
439 s->bps = s->avctx->bits_per_raw_sample = fi.bps;
443 if (!s->max_blocksize)
444 s->max_blocksize = FLAC_MAX_BLOCKSIZE;
445 if (fi.blocksize > s->max_blocksize) {
446 av_log(s->avctx, AV_LOG_ERROR, "blocksize %d > %d\n", fi.blocksize,
448 return AVERROR_INVALIDDATA;
450 s->blocksize = fi.blocksize;
452 if (!s->samplerate && !fi.samplerate) {
453 av_log(s->avctx, AV_LOG_ERROR, "sample rate not found in STREAMINFO"
454 " or frame header\n");
455 return AVERROR_INVALIDDATA;
457 if (fi.samplerate == 0)
458 fi.samplerate = s->samplerate;
459 s->samplerate = s->avctx->sample_rate = fi.samplerate;
461 if (!s->got_streaminfo) {
462 ret = allocate_buffers(s);
465 ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt, s->bps);
466 s->got_streaminfo = 1;
467 dump_headers(s->avctx, (FLACStreaminfo *)s);
470 // dump_headers(s->avctx, (FLACStreaminfo *)s);
473 for (i = 0; i < s->channels; i++) {
474 if ((ret = decode_subframe(s, i)) < 0)
481 bitstream_skip(bc, 16); /* data crc */
486 static int flac_decode_frame(AVCodecContext *avctx, void *data,
487 int *got_frame_ptr, AVPacket *avpkt)
489 AVFrame *frame = data;
490 const uint8_t *buf = avpkt->data;
491 int buf_size = avpkt->size;
492 FLACContext *s = avctx->priv_data;
498 if (s->max_framesize == 0) {
500 ff_flac_get_max_frame_size(s->max_blocksize ? s->max_blocksize : FLAC_MAX_BLOCKSIZE,
501 FLAC_MAX_CHANNELS, 32);
504 /* check that there is at least the smallest decodable amount of data.
505 this amount corresponds to the smallest valid FLAC frame possible.
506 FF F8 69 02 00 00 9A 00 00 34 46 */
507 if (buf_size < FLAC_MIN_FRAME_SIZE)
510 /* check for inline header */
511 if (AV_RB32(buf) == MKBETAG('f','L','a','C')) {
512 if (!s->got_streaminfo && (ret = parse_streaminfo(s, buf, buf_size))) {
513 av_log(s->avctx, AV_LOG_ERROR, "invalid header\n");
516 return get_metadata_size(buf, buf_size);
520 bitstream_init8(&s->bc, buf, buf_size);
521 if ((ret = decode_frame(s)) < 0) {
522 av_log(s->avctx, AV_LOG_ERROR, "decode_frame() failed\n");
525 bytes_read = (bitstream_tell(&s->bc) + 7) / 8;
527 /* get output buffer */
528 frame->nb_samples = s->blocksize;
529 if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) {
530 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
534 s->dsp.decorrelate[s->ch_mode](frame->data, s->decoded, s->channels,
535 s->blocksize, s->sample_shift);
537 if (bytes_read > buf_size) {
538 av_log(s->avctx, AV_LOG_ERROR, "overread: %d\n", bytes_read - buf_size);
539 return AVERROR_INVALIDDATA;
541 if (bytes_read < buf_size) {
542 av_log(s->avctx, AV_LOG_DEBUG, "underread: %d orig size: %d\n",
543 buf_size - bytes_read, buf_size);
551 static av_cold int flac_decode_close(AVCodecContext *avctx)
553 FLACContext *s = avctx->priv_data;
555 av_freep(&s->decoded_buffer);
560 AVCodec ff_flac_decoder = {
562 .long_name = NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
563 .type = AVMEDIA_TYPE_AUDIO,
564 .id = AV_CODEC_ID_FLAC,
565 .priv_data_size = sizeof(FLACContext),
566 .init = flac_decode_init,
567 .close = flac_decode_close,
568 .decode = flac_decode_frame,
569 .capabilities = AV_CODEC_CAP_DR1,
570 .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16,