1 /*
2 * FLAC (Free Lossless Audio Codec) decoder
3 * Copyright (c) 2003 Alex Beregszaszi
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg 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.
11 *
12 * FFmpeg 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.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 /**
23 * @file
24 * FLAC (Free Lossless Audio Codec) decoder
25 * @author Alex Beregszaszi
26 * @see http://flac.sourceforge.net/
27 *
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.
32 */
33
35
48
49
52
55
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
60
64
67
69
71 {
73 int need32 = s->bps > 16;
76
77 if (need32 || want32) {
78 if (planar)
80 else
83 } else {
84 if (planar)
86 else
89 }
90 }
91
93 {
99
100 /* for now, the raw FLAC header is allowed to be passed to the decoder as
101 frame data instead of extradata. */
103 return 0;
104
107
108 /* initialize based on the demuxer-supplied streamdata header */
111 if (ret < 0)
116
117 return 0;
118 }
119
121 {
127 }
128
130 {
131 int buf_size;
133
135
138 if (buf_size < 0)
139 return buf_size;
140
144
148 return ret < 0 ? ret : 0;
149 }
150
151 /**
152 * Parse the STREAMINFO from an inline header.
153 * @param s the flac decoding context
154 * @param buf input buffer, starting with the "fLaC" marker
155 * @param buf_size buffer size
156 * @return non-zero if metadata is invalid
157 */
159 {
160 int metadata_type, metadata_size,
ret;
161
163 /* need more data */
164 return 0;
165 }
170 }
173 if (ret < 0)
178
179 return 0;
180 }
181
182 /**
183 * Determine the size of an inline header.
184 * @param buf input buffer, starting with the "fLaC" marker
185 * @param buf_size buffer size
186 * @return number of bytes in the header, or 0 if more data is needed
187 */
189 {
190 int metadata_last, metadata_size;
191 const uint8_t *buf_end = buf + buf_size;
192
193 buf += 4;
194 do {
195 if (buf_end - buf < 4)
196 return 0;
198 buf += 4;
199 if (buf_end - buf < metadata_size) {
200 /* need more data in order to read the complete header */
201 return 0;
202 }
203 buf += metadata_size;
204 } while (!metadata_last);
205
206 return buf_size - (buf_end -
buf);
207 }
208
210 {
211 int i, tmp, partition, method_type, rice_order;
212 int rice_bits, rice_esc;
213 int samples;
214
216 if (method_type > 1) {
218 method_type);
220 }
221
223
225 if (samples << rice_order != s->
blocksize) {
229 }
230
231 if (pred_order > samples) {
233 pred_order, samples);
235 }
236
237 rice_bits = 4 + method_type;
238 rice_esc = (1 << rice_bits) - 1;
239
240 decoded += pred_order;
241 i= pred_order;
242 for (partition = 0; partition < (1 << rice_order); partition++) {
244 if (tmp == rice_esc) {
246 for (; i < samples; i++)
248 } else {
249 for (; i < samples; i++) {
251 }
252 }
253 i= 0;
254 }
255
256 return 0;
257 }
258
260 int pred_order,
int bps)
261 {
265
266 /* warm up samples */
267 for (i = 0; i < pred_order; i++) {
269 }
270
273
274 if (pred_order > 0)
275 a = decoded[pred_order-1];
276 if (pred_order > 1)
277 b =
a - decoded[pred_order-2];
278 if (pred_order > 2)
279 c =
b - decoded[pred_order-2] + decoded[pred_order-3];
280 if (pred_order > 3)
281 d =
c - decoded[pred_order-2] + 2*decoded[pred_order-3] - decoded[pred_order-4];
282
283 switch (pred_order) {
284 case 0:
285 break;
286 case 1:
287 for (i = pred_order; i < blocksize; i++)
288 decoded[i] =
a += decoded[i];
289 break;
290 case 2:
291 for (i = pred_order; i < blocksize; i++)
292 decoded[i] =
a +=
b += decoded[i];
293 break;
294 case 3:
295 for (i = pred_order; i < blocksize; i++)
296 decoded[i] =
a +=
b +=
c += decoded[i];
297 break;
298 case 4:
299 for (i = pred_order; i < blocksize; i++)
300 decoded[i] =
a +=
b +=
c += d += decoded[i];
301 break;
302 default:
305 }
306
307 return 0;
308 }
309
312 {
314 int coeff_prec, qlevel;
315 int coeffs[32];
316
317 /* warm up samples */
318 for (i = 0; i < pred_order; i++) {
320 }
321
323 if (coeff_prec == 16) {
326 }
328 if (qlevel < 0) {
330 qlevel);
332 }
333
334 for (i = 0; i < pred_order; i++) {
335 coeffs[pred_order - i - 1] =
get_sbits(&s->
gb, coeff_prec);
336 }
337
340
342
343 return 0;
344 }
345
347 {
349 int type, wasted = 0;
352
353 if (channel == 0) {
355 bps++;
356 } else {
358 bps++;
359 }
360
364 }
366
369 if ( left <= 0 ||
373 "Invalid number of wasted bits > available bits (%d) - left=%d\n",
374 bps, left);
376 }
378 bps -= wasted;
379 }
380 if (bps > 32) {
383 }
384
385 //FIXME use av_log2 for types
386 if (type == 0) {
389 decoded[i] = tmp;
390 } else if (type == 1) {
393 } else if ((type >= 8) && (type <= 12)) {
396 } else if (type >= 32) {
399 } else {
402 }
403
404 if (wasted) {
405 int i;
407 decoded[i] <<= wasted;
408 }
409
410 return 0;
411 }
412
414 {
418
422 }
423
424 if (s->channels && fi.channels != s->channels && s->
got_streaminfo) {
428 if (ret < 0)
430 }
435
436 if (!s->bps && !fi.bps) {
439 }
440 if (!fi.bps) {
441 fi.bps = s->bps;
442 } else if (s->bps && fi.bps != s->bps) {
444 "supported\n");
446 }
447
448 if (!s->bps) {
451 }
452
453 if (!s->max_blocksize)
457 s->max_blocksize);
459 }
461
462 if (!s->samplerate && !fi.samplerate) {
464 " or frame header\n");
466 }
467 if (fi.samplerate == 0)
468 fi.samplerate = s->samplerate;
470
473 if (ret < 0)
477 }
479
480 // dump_headers(s->avctx, (FLACStreaminfo *)s);
481
482 /* subframes */
483 for (i = 0; i < s->channels; i++) {
486 }
487
489
490 /* frame footer */
492
493 return 0;
494 }
495
497 int *got_frame_ptr,
AVPacket *avpkt)
498 {
502 int buf_size = avpkt->
size;
504 int bytes_read = 0;
506
507 *got_frame_ptr = 0;
508
509 if (s->max_framesize == 0) {
510 s->max_framesize =
513 }
514
515 if (buf_size > 5 && !memcmp(buf, "177円FLAC", 5)) {
517 return buf_size;
518 }
519
522 return buf_size;
523 }
524
525 /* check that there is at least the smallest decodable amount of data.
526 this amount corresponds to the smallest valid FLAC frame possible.
527 FF F8 69 02 00 00 9A 00 00 34 46 */
529 return buf_size;
530
531 /* check for inline header */
536 }
538 }
539
540 /* decode frame */
546 }
548
551 0, buf, bytes_read)) {
555 }
556
557 /* get output buffer */
561
564
565 if (bytes_read > buf_size) {
568 }
569 if (bytes_read < buf_size) {
571 buf_size - bytes_read, buf_size);
572 }
573
574 *got_frame_ptr = 1;
575
576 return bytes_read;
577 }
578
580 {
585 if (s->max_blocksize)
587 return 0;
588 }
589
591 {
593
595
596 return 0;
597 }
598
615 };