h264: remove obsolete comment.
[FFMpeg-mirror/mplayer-patches.git] / libavcodec / flacdec.c
blob51fd19628cf89ebb99c34ff6228e5164044ab757
1 /*
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
22 /**
23 * @file
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.
34 #include <limits.h>
36 #include "libavutil/channel_layout.h"
37 #include "libavutil/crc.h"
38 #include "avcodec.h"
39 #include "internal.h"
40 #include "get_bits.h"
41 #include "bytestream.h"
42 #include "golomb.h"
43 #include "flac.h"
44 #include "flacdata.h"
45 #include "flacdsp.h"
47 #undef NDEBUG
48 #include <assert.h>
50 typedef struct FLACContext {
51 FLACSTREAMINFO
53 AVCodecContext *avctx; ///< parent AVCodecContext
54 AVFrame frame;
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;
66 FLACDSPContext dsp;
67 } FLACContext;
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) {
79 if (planar)
80 s->avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
81 else
82 s->avctx->sample_fmt = AV_SAMPLE_FMT_S32;
83 s->sample_shift = 32 - s->bps;
84 } else {
85 if (planar)
86 s->avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
87 else
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;
96 uint8_t *streaminfo;
97 int ret;
98 FLACContext *s = avctx->priv_data;
99 s->avctx = avctx;
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)
104 return 0;
106 if (!avpriv_flac_is_extradata_valid(avctx, &format, &streaminfo))
107 return -1;
109 /* initialize based on the demuxer-supplied streamdata header */
110 avpriv_flac_parse_streaminfo(avctx, (FLACStreaminfo *)s, streaminfo);
111 ret = allocate_buffers(s);
112 if (ret < 0)
113 return ret;
114 flac_set_bps(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;
121 return 0;
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)
135 int buf_size;
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);
141 if (buf_size < 0)
142 return buf_size;
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) {
165 /* need more data */
166 return 0;
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);
175 if (ret < 0)
176 return ret;
177 flac_set_bps(s);
178 ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt, s->bps);
179 s->got_streaminfo = 1;
181 return 0;
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;
195 buf += 4;
196 do {
197 if (buf_end - buf < 4)
198 return 0;
199 avpriv_flac_parse_block_header(buf, &metadata_last, NULL, &metadata_size);
200 buf += 4;
201 if (buf_end - buf < metadata_size) {
202 /* need more data in order to read the complete header */
203 return 0;
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;
215 int samples;
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",
220 method_type);
221 return -1;
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);
230 return -1;
233 rice_bits = 4 + method_type;
234 rice_esc = (1 << rice_bits) - 1;
236 decoded += pred_order;
237 i= 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);
244 } else {
245 for (; i < samples; i++) {
246 *decoded++ = get_sr_golomb_flac(&s->gb, tmp, INT_MAX, 0);
249 i= 0;
252 return 0;
255 static int decode_subframe_fixed(FLACContext *s, int32_t *decoded,
256 int pred_order, int bps)
258 const int blocksize = s->blocksize;
259 int a, b, c, d, i;
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)
267 return -1;
269 if (pred_order > 0)
270 a = decoded[pred_order-1];
271 if (pred_order > 1)
272 b = a - decoded[pred_order-2];
273 if (pred_order > 2)
274 c = b - decoded[pred_order-2] + decoded[pred_order-3];
275 if (pred_order > 3)
276 d = c - decoded[pred_order-2] + 2*decoded[pred_order-3] - decoded[pred_order-4];
278 switch (pred_order) {
279 case 0:
280 break;
281 case 1:
282 for (i = pred_order; i < blocksize; i++)
283 decoded[i] = a += decoded[i];
284 break;
285 case 2:
286 for (i = pred_order; i < blocksize; i++)
287 decoded[i] = a += b += decoded[i];
288 break;
289 case 3:
290 for (i = pred_order; i < blocksize; i++)
291 decoded[i] = a += b += c += decoded[i];
292 break;
293 case 4:
294 for (i = pred_order; i < blocksize; i++)
295 decoded[i] = a += b += c += d += decoded[i];
296 break;
297 default:
298 av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order);
299 return -1;
302 return 0;
305 static int decode_subframe_lpc(FLACContext *s, int32_t *decoded, int pred_order,
306 int bps)
308 int i;
309 int coeff_prec, qlevel;
310 int coeffs[32];
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");
320 return -1;
322 qlevel = get_sbits(&s->gb, 5);
323 if (qlevel < 0) {
324 av_log(s->avctx, AV_LOG_ERROR, "qlevel %d not supported, maybe buggy stream\n",
325 qlevel);
326 return -1;
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)
334 return -1;
336 s->dsp.lpc(decoded, coeffs, pred_order, qlevel, s->blocksize);
338 return 0;
341 static inline int decode_subframe(FLACContext *s, int channel)
343 int32_t *decoded = s->decoded[channel];
344 int type, wasted = 0;
345 int bps = s->bps;
346 int i, tmp;
348 if (channel == 0) {
349 if (s->ch_mode == FLAC_CHMODE_RIGHT_SIDE)
350 bps++;
351 } else {
352 if (s->ch_mode == FLAC_CHMODE_LEFT_SIDE || s->ch_mode == FLAC_CHMODE_MID_SIDE)
353 bps++;
356 if (get_bits1(&s->gb)) {
357 av_log(s->avctx, AV_LOG_ERROR, "invalid subframe padding\n");
358 return -1;
360 type = get_bits(&s->gb, 6);
362 if (get_bits1(&s->gb)) {
363 int left = get_bits_left(&s->gb);
364 wasted = 1;
365 if ( left < 0 ||
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",
370 bps, left);
371 return AVERROR_INVALIDDATA;
373 while (!get_bits1(&s->gb))
374 wasted++;
375 bps -= wasted;
377 if (bps > 32) {
378 av_log_missing_feature(s->avctx, "Decorrelated bit depth > 32", 0);
379 return AVERROR_PATCHWELCOME;
382 //FIXME use av_log2 for types
383 if (type == 0) {
384 tmp = get_sbits_long(&s->gb, bps);
385 for (i = 0; i < s->blocksize; i++)
386 decoded[i] = tmp;
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)
392 return -1;
393 } else if (type >= 32) {
394 if (decode_subframe_lpc(s, decoded, (type & ~0x20)+1, bps) < 0)
395 return -1;
396 } else {
397 av_log(s->avctx, AV_LOG_ERROR, "invalid coding type\n");
398 return -1;
401 if (wasted) {
402 int i;
403 for (i = 0; i < s->blocksize; i++)
404 decoded[i] <<= wasted;
407 return 0;
410 static int decode_frame(FLACContext *s)
412 int i, ret;
413 GetBitContext *gb = &s->gb;
414 FLACFrameInfo fi;
416 if (ff_flac_decode_frame_header(s->avctx, gb, &fi, 0)) {
417 av_log(s->avctx, AV_LOG_ERROR, "invalid frame header\n");
418 return -1;
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);
425 if (ret < 0)
426 return ret;
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");
435 return -1;
437 if (!fi.bps) {
438 fi.bps = s->bps;
439 } else if (s->bps && fi.bps != s->bps) {
440 av_log(s->avctx, AV_LOG_ERROR, "switching bps mid-stream is not "
441 "supported\n");
442 return -1;
445 if (!s->bps) {
446 s->bps = s->avctx->bits_per_raw_sample = fi.bps;
447 flac_set_bps(s);
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,
454 s->max_blocksize);
455 return -1;
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");
462 return -1;
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);
470 if (ret < 0)
471 return ret;
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);
479 /* subframes */
480 for (i = 0; i < s->channels; i++) {
481 if (decode_subframe(s, i) < 0)
482 return -1;
485 align_get_bits(gb);
487 /* frame footer */
488 skip_bits(gb, 16); /* data crc */
490 return 0;
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;
499 int bytes_read = 0;
500 int ret;
502 *got_frame_ptr = 0;
504 if (s->max_framesize == 0) {
505 s->max_framesize =
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)
514 return buf_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");
520 return -1;
522 return get_metadata_size(buf, buf_size);
525 /* decode frame */
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");
529 return -1;
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");
537 return ret;
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);
545 return -1;
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);
552 *got_frame_ptr = 1;
553 *(AVFrame *)data = s->frame;
555 return bytes_read;
558 static av_cold int flac_decode_close(AVCodecContext *avctx)
560 FLACContext *s = avctx->priv_data;
562 av_freep(&s->decoded_buffer);
564 return 0;
567 AVCodec ff_flac_decoder = {
568 .name = "flac",
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,
578 AV_SAMPLE_FMT_S16P,
579 AV_SAMPLE_FMT_S32,
580 AV_SAMPLE_FMT_S32P,
581 -1 },