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/channel_layout.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
63 uint8_t *decoded_buffer
;
64 unsigned int decoded_buffer_size
;
69 static int allocate_buffers(FLACContext
*s
);
71 static void flac_set_bps(FLACContext
*s
)
73 enum AVSampleFormat req
= s
->avctx
->request_sample_fmt
;
74 int need32
= s
->bps
> 16;
75 int want32
= av_get_bytes_per_sample(req
) > 2;
76 int planar
= av_sample_fmt_is_planar(req
);
78 if (need32
|| want32
) {
80 s
->avctx
->sample_fmt
= AV_SAMPLE_FMT_S32P
;
82 s
->avctx
->sample_fmt
= AV_SAMPLE_FMT_S32
;
83 s
->sample_shift
= 32 - s
->bps
;
86 s
->avctx
->sample_fmt
= AV_SAMPLE_FMT_S16P
;
88 s
->avctx
->sample_fmt
= AV_SAMPLE_FMT_S16
;
89 s
->sample_shift
= 16 - s
->bps
;
93 static av_cold
int flac_decode_init(AVCodecContext
*avctx
)
95 enum FLACExtradataFormat format
;
98 FLACContext
*s
= avctx
->priv_data
;
101 /* for now, the raw FLAC header is allowed to be passed to the decoder as
102 frame data instead of extradata. */
103 if (!avctx
->extradata
)
106 if (!avpriv_flac_is_extradata_valid(avctx
, &format
, &streaminfo
))
109 /* initialize based on the demuxer-supplied streamdata header */
110 avpriv_flac_parse_streaminfo(avctx
, (FLACStreaminfo
*)s
, streaminfo
);
111 ret
= allocate_buffers(s
);
115 ff_flacdsp_init(&s
->dsp
, avctx
->sample_fmt
, s
->bps
);
116 s
->got_streaminfo
= 1;
118 avcodec_get_frame_defaults(&s
->frame
);
119 avctx
->coded_frame
= &s
->frame
;
124 static void dump_headers(AVCodecContext
*avctx
, FLACStreaminfo
*s
)
126 av_log(avctx
, AV_LOG_DEBUG
, " Max Blocksize: %d\n", s
->max_blocksize
);
127 av_log(avctx
, AV_LOG_DEBUG
, " Max Framesize: %d\n", s
->max_framesize
);
128 av_log(avctx
, AV_LOG_DEBUG
, " Samplerate: %d\n", s
->samplerate
);
129 av_log(avctx
, AV_LOG_DEBUG
, " Channels: %d\n", s
->channels
);
130 av_log(avctx
, AV_LOG_DEBUG
, " Bits: %d\n", s
->bps
);
133 static int allocate_buffers(FLACContext
*s
)
137 assert(s
->max_blocksize
);
139 buf_size
= av_samples_get_buffer_size(NULL
, s
->channels
, s
->max_blocksize
,
140 AV_SAMPLE_FMT_S32P
, 0);
144 av_fast_malloc(&s
->decoded_buffer
, &s
->decoded_buffer_size
, buf_size
);
145 if (!s
->decoded_buffer
)
146 return AVERROR(ENOMEM
);
148 return av_samples_fill_arrays((uint8_t **)s
->decoded
, NULL
,
149 s
->decoded_buffer
, s
->channels
,
150 s
->max_blocksize
, AV_SAMPLE_FMT_S32P
, 0);
154 * Parse the STREAMINFO from an inline header.
155 * @param s the flac decoding context
156 * @param buf input buffer, starting with the "fLaC" marker
157 * @param buf_size buffer size
158 * @return non-zero if metadata is invalid
160 static int parse_streaminfo(FLACContext
*s
, const uint8_t *buf
, int buf_size
)
162 int metadata_type
, metadata_size
, ret
;
164 if (buf_size
< FLAC_STREAMINFO_SIZE
+8) {
168 avpriv_flac_parse_block_header(&buf
[4], NULL
, &metadata_type
, &metadata_size
);
169 if (metadata_type
!= FLAC_METADATA_TYPE_STREAMINFO
||
170 metadata_size
!= FLAC_STREAMINFO_SIZE
) {
171 return AVERROR_INVALIDDATA
;
173 avpriv_flac_parse_streaminfo(s
->avctx
, (FLACStreaminfo
*)s
, &buf
[8]);
174 ret
= allocate_buffers(s
);
178 ff_flacdsp_init(&s
->dsp
, s
->avctx
->sample_fmt
, s
->bps
);
179 s
->got_streaminfo
= 1;
185 * Determine the size of an inline header.
186 * @param buf input buffer, starting with the "fLaC" marker
187 * @param buf_size buffer size
188 * @return number of bytes in the header, or 0 if more data is needed
190 static int get_metadata_size(const uint8_t *buf
, int buf_size
)
192 int metadata_last
, metadata_size
;
193 const uint8_t *buf_end
= buf
+ buf_size
;
197 if (buf_end
- buf
< 4)
199 avpriv_flac_parse_block_header(buf
, &metadata_last
, NULL
, &metadata_size
);
201 if (buf_end
- buf
< metadata_size
) {
202 /* need more data in order to read the complete header */
205 buf
+= metadata_size
;
206 } while (!metadata_last
);
208 return buf_size
- (buf_end
- buf
);
211 static int decode_residuals(FLACContext
*s
, int32_t *decoded
, int pred_order
)
213 int i
, tmp
, partition
, method_type
, rice_order
;
214 int rice_bits
, rice_esc
;
217 method_type
= get_bits(&s
->gb
, 2);
218 if (method_type
> 1) {
219 av_log(s
->avctx
, AV_LOG_ERROR
, "illegal residual coding method %d\n",
224 rice_order
= get_bits(&s
->gb
, 4);
226 samples
= s
->blocksize
>> rice_order
;
227 if (pred_order
> samples
) {
228 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid predictor order: %i > %i\n",
229 pred_order
, samples
);
233 rice_bits
= 4 + method_type
;
234 rice_esc
= (1 << rice_bits
) - 1;
236 decoded
+= pred_order
;
238 for (partition
= 0; partition
< (1 << rice_order
); partition
++) {
239 tmp
= get_bits(&s
->gb
, rice_bits
);
240 if (tmp
== rice_esc
) {
241 tmp
= get_bits(&s
->gb
, 5);
242 for (; i
< samples
; i
++)
243 *decoded
++ = get_sbits_long(&s
->gb
, tmp
);
245 for (; i
< samples
; i
++) {
246 *decoded
++ = get_sr_golomb_flac(&s
->gb
, tmp
, INT_MAX
, 0);
255 static int decode_subframe_fixed(FLACContext
*s
, int32_t *decoded
,
256 int pred_order
, int bps
)
258 const int blocksize
= s
->blocksize
;
261 /* warm up samples */
262 for (i
= 0; i
< pred_order
; i
++) {
263 decoded
[i
] = get_sbits_long(&s
->gb
, bps
);
266 if (decode_residuals(s
, decoded
, pred_order
) < 0)
270 a
= decoded
[pred_order
-1];
272 b
= a
- decoded
[pred_order
-2];
274 c
= b
- decoded
[pred_order
-2] + decoded
[pred_order
-3];
276 d
= c
- decoded
[pred_order
-2] + 2*decoded
[pred_order
-3] - decoded
[pred_order
-4];
278 switch (pred_order
) {
282 for (i
= pred_order
; i
< blocksize
; i
++)
283 decoded
[i
] = a
+= decoded
[i
];
286 for (i
= pred_order
; i
< blocksize
; i
++)
287 decoded
[i
] = a
+= b
+= decoded
[i
];
290 for (i
= pred_order
; i
< blocksize
; i
++)
291 decoded
[i
] = a
+= b
+= c
+= decoded
[i
];
294 for (i
= pred_order
; i
< blocksize
; i
++)
295 decoded
[i
] = a
+= b
+= c
+= d
+= decoded
[i
];
298 av_log(s
->avctx
, AV_LOG_ERROR
, "illegal pred order %d\n", pred_order
);
305 static int decode_subframe_lpc(FLACContext
*s
, int32_t *decoded
, int pred_order
,
309 int coeff_prec
, qlevel
;
312 /* warm up samples */
313 for (i
= 0; i
< pred_order
; i
++) {
314 decoded
[i
] = get_sbits_long(&s
->gb
, bps
);
317 coeff_prec
= get_bits(&s
->gb
, 4) + 1;
318 if (coeff_prec
== 16) {
319 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid coeff precision\n");
322 qlevel
= get_sbits(&s
->gb
, 5);
324 av_log(s
->avctx
, AV_LOG_ERROR
, "qlevel %d not supported, maybe buggy stream\n",
329 for (i
= 0; i
< pred_order
; i
++) {
330 coeffs
[pred_order
- i
- 1] = get_sbits(&s
->gb
, coeff_prec
);
333 if (decode_residuals(s
, decoded
, pred_order
) < 0)
336 s
->dsp
.lpc(decoded
, coeffs
, pred_order
, qlevel
, s
->blocksize
);
341 static inline int decode_subframe(FLACContext
*s
, int channel
)
343 int32_t *decoded
= s
->decoded
[channel
];
344 int type
, wasted
= 0;
349 if (s
->ch_mode
== FLAC_CHMODE_RIGHT_SIDE
)
352 if (s
->ch_mode
== FLAC_CHMODE_LEFT_SIDE
|| s
->ch_mode
== FLAC_CHMODE_MID_SIDE
)
356 if (get_bits1(&s
->gb
)) {
357 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid subframe padding\n");
360 type
= get_bits(&s
->gb
, 6);
362 if (get_bits1(&s
->gb
)) {
363 int left
= get_bits_left(&s
->gb
);
366 (left
< bps
&& !show_bits_long(&s
->gb
, left
)) ||
367 !show_bits_long(&s
->gb
, bps
)) {
368 av_log(s
->avctx
, AV_LOG_ERROR
,
369 "Invalid number of wasted bits > available bits (%d) - left=%d\n",
371 return AVERROR_INVALIDDATA
;
373 while (!get_bits1(&s
->gb
))
378 av_log_missing_feature(s
->avctx
, "Decorrelated bit depth > 32", 0);
379 return AVERROR_PATCHWELCOME
;
382 //FIXME use av_log2 for types
384 tmp
= get_sbits_long(&s
->gb
, bps
);
385 for (i
= 0; i
< s
->blocksize
; i
++)
387 } else if (type
== 1) {
388 for (i
= 0; i
< s
->blocksize
; i
++)
389 decoded
[i
] = get_sbits_long(&s
->gb
, bps
);
390 } else if ((type
>= 8) && (type
<= 12)) {
391 if (decode_subframe_fixed(s
, decoded
, type
& ~0x8, bps
) < 0)
393 } else if (type
>= 32) {
394 if (decode_subframe_lpc(s
, decoded
, (type
& ~0x20)+1, bps
) < 0)
397 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid coding type\n");
403 for (i
= 0; i
< s
->blocksize
; i
++)
404 decoded
[i
] <<= wasted
;
410 static int decode_frame(FLACContext
*s
)
413 GetBitContext
*gb
= &s
->gb
;
416 if (ff_flac_decode_frame_header(s
->avctx
, gb
, &fi
, 0)) {
417 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid frame header\n");
421 if (s
->channels
&& fi
.channels
!= s
->channels
&& s
->got_streaminfo
) {
422 s
->channels
= s
->avctx
->channels
= fi
.channels
;
423 ff_flac_set_channel_layout(s
->avctx
);
424 ret
= allocate_buffers(s
);
428 s
->channels
= s
->avctx
->channels
= fi
.channels
;
429 if (!s
->avctx
->channel_layout
&& s
->channels
<= 6)
430 ff_flac_set_channel_layout(s
->avctx
);
431 s
->ch_mode
= fi
.ch_mode
;
433 if (!s
->bps
&& !fi
.bps
) {
434 av_log(s
->avctx
, AV_LOG_ERROR
, "bps not found in STREAMINFO or frame header\n");
439 } else if (s
->bps
&& fi
.bps
!= s
->bps
) {
440 av_log(s
->avctx
, AV_LOG_ERROR
, "switching bps mid-stream is not "
446 s
->bps
= s
->avctx
->bits_per_raw_sample
= fi
.bps
;
450 if (!s
->max_blocksize
)
451 s
->max_blocksize
= FLAC_MAX_BLOCKSIZE
;
452 if (fi
.blocksize
> s
->max_blocksize
) {
453 av_log(s
->avctx
, AV_LOG_ERROR
, "blocksize %d > %d\n", fi
.blocksize
,
457 s
->blocksize
= fi
.blocksize
;
459 if (!s
->samplerate
&& !fi
.samplerate
) {
460 av_log(s
->avctx
, AV_LOG_ERROR
, "sample rate not found in STREAMINFO"
461 " or frame header\n");
464 if (fi
.samplerate
== 0)
465 fi
.samplerate
= s
->samplerate
;
466 s
->samplerate
= s
->avctx
->sample_rate
= fi
.samplerate
;
468 if (!s
->got_streaminfo
) {
469 ret
= allocate_buffers(s
);
472 ff_flacdsp_init(&s
->dsp
, s
->avctx
->sample_fmt
, s
->bps
);
473 s
->got_streaminfo
= 1;
474 dump_headers(s
->avctx
, (FLACStreaminfo
*)s
);
477 // dump_headers(s->avctx, (FLACStreaminfo *)s);
480 for (i
= 0; i
< s
->channels
; i
++) {
481 if (decode_subframe(s
, i
) < 0)
488 skip_bits(gb
, 16); /* data crc */
493 static int flac_decode_frame(AVCodecContext
*avctx
, void *data
,
494 int *got_frame_ptr
, AVPacket
*avpkt
)
496 const uint8_t *buf
= avpkt
->data
;
497 int buf_size
= avpkt
->size
;
498 FLACContext
*s
= avctx
->priv_data
;
504 if (s
->max_framesize
== 0) {
506 ff_flac_get_max_frame_size(s
->max_blocksize
? s
->max_blocksize
: FLAC_MAX_BLOCKSIZE
,
507 FLAC_MAX_CHANNELS
, 32);
510 /* check that there is at least the smallest decodable amount of data.
511 this amount corresponds to the smallest valid FLAC frame possible.
512 FF F8 69 02 00 00 9A 00 00 34 46 */
513 if (buf_size
< FLAC_MIN_FRAME_SIZE
)
516 /* check for inline header */
517 if (AV_RB32(buf
) == MKBETAG('f','L','a','C')) {
518 if (!s
->got_streaminfo
&& parse_streaminfo(s
, buf
, buf_size
)) {
519 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid header\n");
522 return get_metadata_size(buf
, buf_size
);
526 init_get_bits(&s
->gb
, buf
, buf_size
*8);
527 if (decode_frame(s
) < 0) {
528 av_log(s
->avctx
, AV_LOG_ERROR
, "decode_frame() failed\n");
531 bytes_read
= (get_bits_count(&s
->gb
)+7)/8;
533 /* get output buffer */
534 s
->frame
.nb_samples
= s
->blocksize
;
535 if ((ret
= ff_get_buffer(avctx
, &s
->frame
)) < 0) {
536 av_log(avctx
, AV_LOG_ERROR
, "get_buffer() failed\n");
540 s
->dsp
.decorrelate
[s
->ch_mode
](s
->frame
.data
, s
->decoded
, s
->channels
,
541 s
->blocksize
, s
->sample_shift
);
543 if (bytes_read
> buf_size
) {
544 av_log(s
->avctx
, AV_LOG_ERROR
, "overread: %d\n", bytes_read
- buf_size
);
547 if (bytes_read
< buf_size
) {
548 av_log(s
->avctx
, AV_LOG_DEBUG
, "underread: %d orig size: %d\n",
549 buf_size
- bytes_read
, buf_size
);
553 *(AVFrame
*)data
= s
->frame
;
558 static av_cold
int flac_decode_close(AVCodecContext
*avctx
)
560 FLACContext
*s
= avctx
->priv_data
;
562 av_freep(&s
->decoded_buffer
);
567 AVCodec ff_flac_decoder
= {
569 .type
= AVMEDIA_TYPE_AUDIO
,
570 .id
= AV_CODEC_ID_FLAC
,
571 .priv_data_size
= sizeof(FLACContext
),
572 .init
= flac_decode_init
,
573 .close
= flac_decode_close
,
574 .decode
= flac_decode_frame
,
575 .capabilities
= CODEC_CAP_DR1
,
576 .long_name
= NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
577 .sample_fmts
= (const enum AVSampleFormat
[]) { AV_SAMPLE_FMT_S16
,