lavc decoders: work with refcounted frames.
[FFMpeg-mirror/mplayer-patches.git] / libavcodec / flacdec.c
blob91412ef82140ad68b6d30efbd43df61ff90eed59
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 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;
65 FLACDSPContext dsp;
66 } FLACContext;
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) {
78 if (planar)
79 s->avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
80 else
81 s->avctx->sample_fmt = AV_SAMPLE_FMT_S32;
82 s->sample_shift = 32 - s->bps;
83 } else {
84 if (planar)
85 s->avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
86 else
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;
95 uint8_t *streaminfo;
96 int ret;
97 FLACContext *s = avctx->priv_data;
98 s->avctx = avctx;
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)
103 return 0;
105 if (!avpriv_flac_is_extradata_valid(avctx, &format, &streaminfo))
106 return -1;
108 /* initialize based on the demuxer-supplied streamdata header */
109 avpriv_flac_parse_streaminfo(avctx, (FLACStreaminfo *)s, streaminfo);
110 ret = allocate_buffers(s);
111 if (ret < 0)
112 return ret;
113 flac_set_bps(s);
114 ff_flacdsp_init(&s->dsp, avctx->sample_fmt, s->bps);
115 s->got_streaminfo = 1;
117 return 0;
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)
131 int buf_size;
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);
137 if (buf_size < 0)
138 return buf_size;
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) {
161 /* need more data */
162 return 0;
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);
171 if (ret < 0)
172 return ret;
173 flac_set_bps(s);
174 ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt, s->bps);
175 s->got_streaminfo = 1;
177 return 0;
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;
191 buf += 4;
192 do {
193 if (buf_end - buf < 4)
194 return 0;
195 avpriv_flac_parse_block_header(buf, &metadata_last, NULL, &metadata_size);
196 buf += 4;
197 if (buf_end - buf < metadata_size) {
198 /* need more data in order to read the complete header */
199 return 0;
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;
211 int samples;
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",
216 method_type);
217 return -1;
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);
226 return -1;
229 rice_bits = 4 + method_type;
230 rice_esc = (1 << rice_bits) - 1;
232 decoded += pred_order;
233 i= 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);
240 } else {
241 for (; i < samples; i++) {
242 *decoded++ = get_sr_golomb_flac(&s->gb, tmp, INT_MAX, 0);
245 i= 0;
248 return 0;
251 static int decode_subframe_fixed(FLACContext *s, int32_t *decoded,
252 int pred_order, int bps)
254 const int blocksize = s->blocksize;
255 int a, b, c, d, i;
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)
263 return -1;
265 if (pred_order > 0)
266 a = decoded[pred_order-1];
267 if (pred_order > 1)
268 b = a - decoded[pred_order-2];
269 if (pred_order > 2)
270 c = b - decoded[pred_order-2] + decoded[pred_order-3];
271 if (pred_order > 3)
272 d = c - decoded[pred_order-2] + 2*decoded[pred_order-3] - decoded[pred_order-4];
274 switch (pred_order) {
275 case 0:
276 break;
277 case 1:
278 for (i = pred_order; i < blocksize; i++)
279 decoded[i] = a += decoded[i];
280 break;
281 case 2:
282 for (i = pred_order; i < blocksize; i++)
283 decoded[i] = a += b += decoded[i];
284 break;
285 case 3:
286 for (i = pred_order; i < blocksize; i++)
287 decoded[i] = a += b += c += decoded[i];
288 break;
289 case 4:
290 for (i = pred_order; i < blocksize; i++)
291 decoded[i] = a += b += c += d += decoded[i];
292 break;
293 default:
294 av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order);
295 return -1;
298 return 0;
301 static int decode_subframe_lpc(FLACContext *s, int32_t *decoded, int pred_order,
302 int bps)
304 int i;
305 int coeff_prec, qlevel;
306 int coeffs[32];
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");
316 return -1;
318 qlevel = get_sbits(&s->gb, 5);
319 if (qlevel < 0) {
320 av_log(s->avctx, AV_LOG_ERROR, "qlevel %d not supported, maybe buggy stream\n",
321 qlevel);
322 return -1;
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)
330 return -1;
332 s->dsp.lpc(decoded, coeffs, pred_order, qlevel, s->blocksize);
334 return 0;
337 static inline int decode_subframe(FLACContext *s, int channel)
339 int32_t *decoded = s->decoded[channel];
340 int type, wasted = 0;
341 int bps = s->bps;
342 int i, tmp;
344 if (channel == 0) {
345 if (s->ch_mode == FLAC_CHMODE_RIGHT_SIDE)
346 bps++;
347 } else {
348 if (s->ch_mode == FLAC_CHMODE_LEFT_SIDE || s->ch_mode == FLAC_CHMODE_MID_SIDE)
349 bps++;
352 if (get_bits1(&s->gb)) {
353 av_log(s->avctx, AV_LOG_ERROR, "invalid subframe padding\n");
354 return -1;
356 type = get_bits(&s->gb, 6);
358 if (get_bits1(&s->gb)) {
359 int left = get_bits_left(&s->gb);
360 wasted = 1;
361 if ( left < 0 ||
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",
366 bps, left);
367 return AVERROR_INVALIDDATA;
369 while (!get_bits1(&s->gb))
370 wasted++;
371 bps -= wasted;
373 if (bps > 32) {
374 av_log_missing_feature(s->avctx, "Decorrelated bit depth > 32", 0);
375 return AVERROR_PATCHWELCOME;
378 //FIXME use av_log2 for types
379 if (type == 0) {
380 tmp = get_sbits_long(&s->gb, bps);
381 for (i = 0; i < s->blocksize; i++)
382 decoded[i] = tmp;
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)
388 return -1;
389 } else if (type >= 32) {
390 if (decode_subframe_lpc(s, decoded, (type & ~0x20)+1, bps) < 0)
391 return -1;
392 } else {
393 av_log(s->avctx, AV_LOG_ERROR, "invalid coding type\n");
394 return -1;
397 if (wasted) {
398 int i;
399 for (i = 0; i < s->blocksize; i++)
400 decoded[i] <<= wasted;
403 return 0;
406 static int decode_frame(FLACContext *s)
408 int i, ret;
409 GetBitContext *gb = &s->gb;
410 FLACFrameInfo fi;
412 if (ff_flac_decode_frame_header(s->avctx, gb, &fi, 0)) {
413 av_log(s->avctx, AV_LOG_ERROR, "invalid frame header\n");
414 return -1;
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);
421 if (ret < 0)
422 return ret;
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");
431 return -1;
433 if (!fi.bps) {
434 fi.bps = s->bps;
435 } else if (s->bps && fi.bps != s->bps) {
436 av_log(s->avctx, AV_LOG_ERROR, "switching bps mid-stream is not "
437 "supported\n");
438 return -1;
441 if (!s->bps) {
442 s->bps = s->avctx->bits_per_raw_sample = fi.bps;
443 flac_set_bps(s);
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,
450 s->max_blocksize);
451 return -1;
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");
458 return -1;
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);
466 if (ret < 0)
467 return ret;
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);
475 /* subframes */
476 for (i = 0; i < s->channels; i++) {
477 if (decode_subframe(s, i) < 0)
478 return -1;
481 align_get_bits(gb);
483 /* frame footer */
484 skip_bits(gb, 16); /* data crc */
486 return 0;
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;
496 int bytes_read = 0;
497 int ret;
499 *got_frame_ptr = 0;
501 if (s->max_framesize == 0) {
502 s->max_framesize =
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)
511 return buf_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");
517 return -1;
519 return get_metadata_size(buf, buf_size);
522 /* decode frame */
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");
526 return -1;
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");
534 return ret;
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);
542 return -1;
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);
549 *got_frame_ptr = 1;
551 return bytes_read;
554 static av_cold int flac_decode_close(AVCodecContext *avctx)
556 FLACContext *s = avctx->priv_data;
558 av_freep(&s->decoded_buffer);
560 return 0;
563 AVCodec ff_flac_decoder = {
564 .name = "flac",
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,
574 AV_SAMPLE_FMT_S16P,
575 AV_SAMPLE_FMT_S32,
576 AV_SAMPLE_FMT_S32P,
577 -1 },