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
54 GetBitContext gb
; ///< GetBitContext initialized to start at the current frame
56 int blocksize
; ///< number of samples in the current frame
57 int sample_shift
; ///< shift required to make output samples 16-bit or 32-bit
58 int ch_mode
; ///< channel decorrelation type in the current frame
59 int got_streaminfo
; ///< indicates if the STREAMINFO has been read
61 int32_t *decoded
[FLAC_MAX_CHANNELS
]; ///< decoded samples
62 uint8_t *decoded_buffer
;
63 unsigned int decoded_buffer_size
;
68 static int allocate_buffers(FLACContext
*s
);
70 static void flac_set_bps(FLACContext
*s
)
72 enum AVSampleFormat req
= s
->avctx
->request_sample_fmt
;
73 int need32
= s
->bps
> 16;
74 int want32
= av_get_bytes_per_sample(req
) > 2;
75 int planar
= av_sample_fmt_is_planar(req
);
77 if (need32
|| want32
) {
79 s
->avctx
->sample_fmt
= AV_SAMPLE_FMT_S32P
;
81 s
->avctx
->sample_fmt
= AV_SAMPLE_FMT_S32
;
82 s
->sample_shift
= 32 - s
->bps
;
85 s
->avctx
->sample_fmt
= AV_SAMPLE_FMT_S16P
;
87 s
->avctx
->sample_fmt
= AV_SAMPLE_FMT_S16
;
88 s
->sample_shift
= 16 - s
->bps
;
92 static av_cold
int flac_decode_init(AVCodecContext
*avctx
)
94 enum FLACExtradataFormat format
;
97 FLACContext
*s
= avctx
->priv_data
;
100 /* for now, the raw FLAC header is allowed to be passed to the decoder as
101 frame data instead of extradata. */
102 if (!avctx
->extradata
)
105 if (!avpriv_flac_is_extradata_valid(avctx
, &format
, &streaminfo
))
108 /* initialize based on the demuxer-supplied streamdata header */
109 avpriv_flac_parse_streaminfo(avctx
, (FLACStreaminfo
*)s
, streaminfo
);
110 ret
= allocate_buffers(s
);
114 ff_flacdsp_init(&s
->dsp
, avctx
->sample_fmt
, s
->bps
);
115 s
->got_streaminfo
= 1;
120 static void dump_headers(AVCodecContext
*avctx
, FLACStreaminfo
*s
)
122 av_log(avctx
, AV_LOG_DEBUG
, " Max Blocksize: %d\n", s
->max_blocksize
);
123 av_log(avctx
, AV_LOG_DEBUG
, " Max Framesize: %d\n", s
->max_framesize
);
124 av_log(avctx
, AV_LOG_DEBUG
, " Samplerate: %d\n", s
->samplerate
);
125 av_log(avctx
, AV_LOG_DEBUG
, " Channels: %d\n", s
->channels
);
126 av_log(avctx
, AV_LOG_DEBUG
, " Bits: %d\n", s
->bps
);
129 static int allocate_buffers(FLACContext
*s
)
133 assert(s
->max_blocksize
);
135 buf_size
= av_samples_get_buffer_size(NULL
, s
->channels
, s
->max_blocksize
,
136 AV_SAMPLE_FMT_S32P
, 0);
140 av_fast_malloc(&s
->decoded_buffer
, &s
->decoded_buffer_size
, buf_size
);
141 if (!s
->decoded_buffer
)
142 return AVERROR(ENOMEM
);
144 return av_samples_fill_arrays((uint8_t **)s
->decoded
, NULL
,
145 s
->decoded_buffer
, s
->channels
,
146 s
->max_blocksize
, AV_SAMPLE_FMT_S32P
, 0);
150 * Parse the STREAMINFO from an inline header.
151 * @param s the flac decoding context
152 * @param buf input buffer, starting with the "fLaC" marker
153 * @param buf_size buffer size
154 * @return non-zero if metadata is invalid
156 static int parse_streaminfo(FLACContext
*s
, const uint8_t *buf
, int buf_size
)
158 int metadata_type
, metadata_size
, ret
;
160 if (buf_size
< FLAC_STREAMINFO_SIZE
+8) {
164 avpriv_flac_parse_block_header(&buf
[4], NULL
, &metadata_type
, &metadata_size
);
165 if (metadata_type
!= FLAC_METADATA_TYPE_STREAMINFO
||
166 metadata_size
!= FLAC_STREAMINFO_SIZE
) {
167 return AVERROR_INVALIDDATA
;
169 avpriv_flac_parse_streaminfo(s
->avctx
, (FLACStreaminfo
*)s
, &buf
[8]);
170 ret
= allocate_buffers(s
);
174 ff_flacdsp_init(&s
->dsp
, s
->avctx
->sample_fmt
, s
->bps
);
175 s
->got_streaminfo
= 1;
181 * Determine the size of an inline header.
182 * @param buf input buffer, starting with the "fLaC" marker
183 * @param buf_size buffer size
184 * @return number of bytes in the header, or 0 if more data is needed
186 static int get_metadata_size(const uint8_t *buf
, int buf_size
)
188 int metadata_last
, metadata_size
;
189 const uint8_t *buf_end
= buf
+ buf_size
;
193 if (buf_end
- buf
< 4)
195 avpriv_flac_parse_block_header(buf
, &metadata_last
, NULL
, &metadata_size
);
197 if (buf_end
- buf
< metadata_size
) {
198 /* need more data in order to read the complete header */
201 buf
+= metadata_size
;
202 } while (!metadata_last
);
204 return buf_size
- (buf_end
- buf
);
207 static int decode_residuals(FLACContext
*s
, int32_t *decoded
, int pred_order
)
209 int i
, tmp
, partition
, method_type
, rice_order
;
210 int rice_bits
, rice_esc
;
213 method_type
= get_bits(&s
->gb
, 2);
214 if (method_type
> 1) {
215 av_log(s
->avctx
, AV_LOG_ERROR
, "illegal residual coding method %d\n",
220 rice_order
= get_bits(&s
->gb
, 4);
222 samples
= s
->blocksize
>> rice_order
;
223 if (pred_order
> samples
) {
224 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid predictor order: %i > %i\n",
225 pred_order
, samples
);
229 rice_bits
= 4 + method_type
;
230 rice_esc
= (1 << rice_bits
) - 1;
232 decoded
+= pred_order
;
234 for (partition
= 0; partition
< (1 << rice_order
); partition
++) {
235 tmp
= get_bits(&s
->gb
, rice_bits
);
236 if (tmp
== rice_esc
) {
237 tmp
= get_bits(&s
->gb
, 5);
238 for (; i
< samples
; i
++)
239 *decoded
++ = get_sbits_long(&s
->gb
, tmp
);
241 for (; i
< samples
; i
++) {
242 *decoded
++ = get_sr_golomb_flac(&s
->gb
, tmp
, INT_MAX
, 0);
251 static int decode_subframe_fixed(FLACContext
*s
, int32_t *decoded
,
252 int pred_order
, int bps
)
254 const int blocksize
= s
->blocksize
;
257 /* warm up samples */
258 for (i
= 0; i
< pred_order
; i
++) {
259 decoded
[i
] = get_sbits_long(&s
->gb
, bps
);
262 if (decode_residuals(s
, decoded
, pred_order
) < 0)
266 a
= decoded
[pred_order
-1];
268 b
= a
- decoded
[pred_order
-2];
270 c
= b
- decoded
[pred_order
-2] + decoded
[pred_order
-3];
272 d
= c
- decoded
[pred_order
-2] + 2*decoded
[pred_order
-3] - decoded
[pred_order
-4];
274 switch (pred_order
) {
278 for (i
= pred_order
; i
< blocksize
; i
++)
279 decoded
[i
] = a
+= decoded
[i
];
282 for (i
= pred_order
; i
< blocksize
; i
++)
283 decoded
[i
] = a
+= b
+= decoded
[i
];
286 for (i
= pred_order
; i
< blocksize
; i
++)
287 decoded
[i
] = a
+= b
+= c
+= decoded
[i
];
290 for (i
= pred_order
; i
< blocksize
; i
++)
291 decoded
[i
] = a
+= b
+= c
+= d
+= decoded
[i
];
294 av_log(s
->avctx
, AV_LOG_ERROR
, "illegal pred order %d\n", pred_order
);
301 static int decode_subframe_lpc(FLACContext
*s
, int32_t *decoded
, int pred_order
,
305 int coeff_prec
, qlevel
;
308 /* warm up samples */
309 for (i
= 0; i
< pred_order
; i
++) {
310 decoded
[i
] = get_sbits_long(&s
->gb
, bps
);
313 coeff_prec
= get_bits(&s
->gb
, 4) + 1;
314 if (coeff_prec
== 16) {
315 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid coeff precision\n");
318 qlevel
= get_sbits(&s
->gb
, 5);
320 av_log(s
->avctx
, AV_LOG_ERROR
, "qlevel %d not supported, maybe buggy stream\n",
325 for (i
= 0; i
< pred_order
; i
++) {
326 coeffs
[pred_order
- i
- 1] = get_sbits(&s
->gb
, coeff_prec
);
329 if (decode_residuals(s
, decoded
, pred_order
) < 0)
332 s
->dsp
.lpc(decoded
, coeffs
, pred_order
, qlevel
, s
->blocksize
);
337 static inline int decode_subframe(FLACContext
*s
, int channel
)
339 int32_t *decoded
= s
->decoded
[channel
];
340 int type
, wasted
= 0;
345 if (s
->ch_mode
== FLAC_CHMODE_RIGHT_SIDE
)
348 if (s
->ch_mode
== FLAC_CHMODE_LEFT_SIDE
|| s
->ch_mode
== FLAC_CHMODE_MID_SIDE
)
352 if (get_bits1(&s
->gb
)) {
353 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid subframe padding\n");
356 type
= get_bits(&s
->gb
, 6);
358 if (get_bits1(&s
->gb
)) {
359 int left
= get_bits_left(&s
->gb
);
362 (left
< bps
&& !show_bits_long(&s
->gb
, left
)) ||
363 !show_bits_long(&s
->gb
, bps
)) {
364 av_log(s
->avctx
, AV_LOG_ERROR
,
365 "Invalid number of wasted bits > available bits (%d) - left=%d\n",
367 return AVERROR_INVALIDDATA
;
369 while (!get_bits1(&s
->gb
))
374 av_log_missing_feature(s
->avctx
, "Decorrelated bit depth > 32", 0);
375 return AVERROR_PATCHWELCOME
;
378 //FIXME use av_log2 for types
380 tmp
= get_sbits_long(&s
->gb
, bps
);
381 for (i
= 0; i
< s
->blocksize
; i
++)
383 } else if (type
== 1) {
384 for (i
= 0; i
< s
->blocksize
; i
++)
385 decoded
[i
] = get_sbits_long(&s
->gb
, bps
);
386 } else if ((type
>= 8) && (type
<= 12)) {
387 if (decode_subframe_fixed(s
, decoded
, type
& ~0x8, bps
) < 0)
389 } else if (type
>= 32) {
390 if (decode_subframe_lpc(s
, decoded
, (type
& ~0x20)+1, bps
) < 0)
393 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid coding type\n");
399 for (i
= 0; i
< s
->blocksize
; i
++)
400 decoded
[i
] <<= wasted
;
406 static int decode_frame(FLACContext
*s
)
409 GetBitContext
*gb
= &s
->gb
;
412 if (ff_flac_decode_frame_header(s
->avctx
, gb
, &fi
, 0)) {
413 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid frame header\n");
417 if (s
->channels
&& fi
.channels
!= s
->channels
&& s
->got_streaminfo
) {
418 s
->channels
= s
->avctx
->channels
= fi
.channels
;
419 ff_flac_set_channel_layout(s
->avctx
);
420 ret
= allocate_buffers(s
);
424 s
->channels
= s
->avctx
->channels
= fi
.channels
;
425 if (!s
->avctx
->channel_layout
)
426 ff_flac_set_channel_layout(s
->avctx
);
427 s
->ch_mode
= fi
.ch_mode
;
429 if (!s
->bps
&& !fi
.bps
) {
430 av_log(s
->avctx
, AV_LOG_ERROR
, "bps not found in STREAMINFO or frame header\n");
435 } else if (s
->bps
&& fi
.bps
!= s
->bps
) {
436 av_log(s
->avctx
, AV_LOG_ERROR
, "switching bps mid-stream is not "
442 s
->bps
= s
->avctx
->bits_per_raw_sample
= fi
.bps
;
446 if (!s
->max_blocksize
)
447 s
->max_blocksize
= FLAC_MAX_BLOCKSIZE
;
448 if (fi
.blocksize
> s
->max_blocksize
) {
449 av_log(s
->avctx
, AV_LOG_ERROR
, "blocksize %d > %d\n", fi
.blocksize
,
453 s
->blocksize
= fi
.blocksize
;
455 if (!s
->samplerate
&& !fi
.samplerate
) {
456 av_log(s
->avctx
, AV_LOG_ERROR
, "sample rate not found in STREAMINFO"
457 " or frame header\n");
460 if (fi
.samplerate
== 0)
461 fi
.samplerate
= s
->samplerate
;
462 s
->samplerate
= s
->avctx
->sample_rate
= fi
.samplerate
;
464 if (!s
->got_streaminfo
) {
465 ret
= allocate_buffers(s
);
468 ff_flacdsp_init(&s
->dsp
, s
->avctx
->sample_fmt
, s
->bps
);
469 s
->got_streaminfo
= 1;
470 dump_headers(s
->avctx
, (FLACStreaminfo
*)s
);
473 // dump_headers(s->avctx, (FLACStreaminfo *)s);
476 for (i
= 0; i
< s
->channels
; i
++) {
477 if (decode_subframe(s
, i
) < 0)
484 skip_bits(gb
, 16); /* data crc */
489 static int flac_decode_frame(AVCodecContext
*avctx
, void *data
,
490 int *got_frame_ptr
, AVPacket
*avpkt
)
492 AVFrame
*frame
= data
;
493 const uint8_t *buf
= avpkt
->data
;
494 int buf_size
= avpkt
->size
;
495 FLACContext
*s
= avctx
->priv_data
;
501 if (s
->max_framesize
== 0) {
503 ff_flac_get_max_frame_size(s
->max_blocksize
? s
->max_blocksize
: FLAC_MAX_BLOCKSIZE
,
504 FLAC_MAX_CHANNELS
, 32);
507 /* check that there is at least the smallest decodable amount of data.
508 this amount corresponds to the smallest valid FLAC frame possible.
509 FF F8 69 02 00 00 9A 00 00 34 46 */
510 if (buf_size
< FLAC_MIN_FRAME_SIZE
)
513 /* check for inline header */
514 if (AV_RB32(buf
) == MKBETAG('f','L','a','C')) {
515 if (!s
->got_streaminfo
&& parse_streaminfo(s
, buf
, buf_size
)) {
516 av_log(s
->avctx
, AV_LOG_ERROR
, "invalid header\n");
519 return get_metadata_size(buf
, buf_size
);
523 init_get_bits(&s
->gb
, buf
, buf_size
*8);
524 if (decode_frame(s
) < 0) {
525 av_log(s
->avctx
, AV_LOG_ERROR
, "decode_frame() failed\n");
528 bytes_read
= (get_bits_count(&s
->gb
)+7)/8;
530 /* get output buffer */
531 frame
->nb_samples
= s
->blocksize
;
532 if ((ret
= ff_get_buffer(avctx
, frame
, 0)) < 0) {
533 av_log(avctx
, AV_LOG_ERROR
, "get_buffer() failed\n");
537 s
->dsp
.decorrelate
[s
->ch_mode
](frame
->data
, s
->decoded
, s
->channels
,
538 s
->blocksize
, s
->sample_shift
);
540 if (bytes_read
> buf_size
) {
541 av_log(s
->avctx
, AV_LOG_ERROR
, "overread: %d\n", bytes_read
- buf_size
);
544 if (bytes_read
< buf_size
) {
545 av_log(s
->avctx
, AV_LOG_DEBUG
, "underread: %d orig size: %d\n",
546 buf_size
- bytes_read
, buf_size
);
554 static av_cold
int flac_decode_close(AVCodecContext
*avctx
)
556 FLACContext
*s
= avctx
->priv_data
;
558 av_freep(&s
->decoded_buffer
);
563 AVCodec ff_flac_decoder
= {
565 .type
= AVMEDIA_TYPE_AUDIO
,
566 .id
= AV_CODEC_ID_FLAC
,
567 .priv_data_size
= sizeof(FLACContext
),
568 .init
= flac_decode_init
,
569 .close
= flac_decode_close
,
570 .decode
= flac_decode_frame
,
571 .capabilities
= CODEC_CAP_DR1
,
572 .long_name
= NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"),
573 .sample_fmts
= (const enum AVSampleFormat
[]) { AV_SAMPLE_FMT_S16
,