1 /*
2 * ALAC (Apple Lossless Audio Codec) decoder
3 * Copyright (c) 2005 David Hammerton
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 * ALAC (Apple Lossless Audio Codec) decoder
25 * @author 2005 David Hammerton
26 * @see http://crazney.net/programs/itunes/alac.html
27 *
28 * Note: This decoder expects a 36-byte QuickTime atom to be
29 * passed through the extradata[_size] fields. This atom is tacked onto
30 * the end of an 'alac' stsd atom and has the following format:
31 *
32 * 32bit atom size
33 * 32bit tag ("alac")
34 * 32bit tag version (0)
35 * 32bit samples per frame (used when not set explicitly in the frames)
36 * 8bit compatible version (0)
37 * 8bit sample size
38 * 8bit history mult (40)
39 * 8bit initial history (10)
40 * 8bit rice param limit (14)
41 * 8bit channels
42 * 16bit maxRun (255)
43 * 32bit max coded frame size (0 means unknown)
44 * 32bit average bitrate (0 means unknown)
45 * 32bit samplerate
46 */
47
57
58 #define ALAC_EXTRADATA_SIZE 36
59
64
68
74
75 int extra_bits;
/**< number of extra bits beyond 16-bit */
76 int nb_samples;
/**< number of samples in the current frame */
77
80
82 {
84
85 if (x > 8) { /* RICE THRESHOLD */
86 /* use alternative encoding */
88 } else if (k != 1) {
90
91 /* multiply x by 2^k - 1, as part of their strange algorithm */
92 x = (x << k) - x;
93
94 if (extrabits > 1) {
95 x += extrabits - 1;
97 } else
99 }
100 return x;
101 }
102
104 int nb_samples,
int bps,
int rice_history_mult)
105 {
106 int i;
108 int sign_modifier = 0;
109
110 for (i = 0; i < nb_samples; i++) {
111 int k;
112 unsigned int x;
113
115 return -1;
116
117 /* calculate rice param and decode next value */
118 k =
av_log2((history >> 9) + 3);
121 x += sign_modifier;
122 sign_modifier = 0;
123 output_buffer[i] = (x >> 1) ^ -(x & 1);
124
125 /* update the history */
126 if (x > 0xffff)
127 history = 0xffff;
128 else
129 history += x * rice_history_mult -
130 ((history * rice_history_mult) >> 9);
131
132 /* special case: there may be compressed blocks of 0 */
133 if ((history < 128) && (i + 1 < nb_samples)) {
134 int block_size;
135
136 /* calculate rice param and decode block size */
137 k = 7 -
av_log2(history) + ((history + 16) >> 6);
140
141 if (block_size > 0) {
142 if (block_size >= nb_samples - i) {
144 "invalid zero block size of %d %d %d\n", block_size,
145 nb_samples, i);
146 block_size = nb_samples - i - 1;
147 }
148 memset(&output_buffer[i + 1], 0,
149 block_size * sizeof(*output_buffer));
150 i += block_size;
151 }
152 if (block_size <= 0xffff)
153 sign_modifier = 1;
154 history = 0;
155 }
156 }
157 return 0;
158 }
159
161 {
163 }
164
166 int nb_samples,
int bps, int16_t *lpc_coefs,
167 int lpc_order, int lpc_quant)
168 {
169 int i;
171
172 /* first sample always copies */
173 *buffer_out = *error_buffer;
174
175 if (nb_samples <= 1)
176 return;
177
178 if (!lpc_order) {
179 memcpy(&buffer_out[1], &error_buffer[1],
180 (nb_samples - 1) * sizeof(*buffer_out));
181 return;
182 }
183
184 if (lpc_order == 31) {
185 /* simple 1st-order prediction */
186 for (i = 1; i < nb_samples; i++) {
187 buffer_out[i] =
sign_extend(buffer_out[i - 1] + error_buffer[i],
188 bps);
189 }
190 return;
191 }
192
193 /* read warm-up samples */
194 for (i = 1; i <= lpc_order && i < nb_samples; i++)
195 buffer_out[i] =
sign_extend(buffer_out[i - 1] + error_buffer[i], bps);
196
197 /* NOTE: 4 and 8 are very common cases that could be optimized. */
198
199 for (; i < nb_samples; i++) {
200 int j;
202 int error_val = error_buffer[i];
203 int error_sign;
204 int d = *pred++;
205
206 /* LPC prediction */
207 for (j = 0; j < lpc_order; j++)
208 val += (pred[j] - d) * lpc_coefs[j];
209 val = (val + (1 << (lpc_quant - 1))) >> lpc_quant;
210 val += d + error_val;
212
213 /* adapt LPC coefficients */
215 if (error_sign) {
216 for (j = 0; j < lpc_order && error_val * error_sign > 0; j++) {
217 int sign;
218 val = d - pred[j];
220 lpc_coefs[j] -= sign;
221 val *= sign;
222 error_val -= (val >> lpc_quant) * (j + 1);
223 }
224 }
225 }
226 }
227
229 int decorr_shift, int decorr_left_weight)
230 {
231 int i;
232
233 for (i = 0; i < nb_samples; i++) {
235
236 a = buffer[0][i];
237 b = buffer[1][i];
238
239 a -= (b * decorr_left_weight) >> decorr_shift;
241
244 }
245 }
246
249 {
250 int i, ch;
251
252 for (ch = 0; ch < channels; ch++)
253 for (i = 0; i < nb_samples; i++)
254 buffer[ch][i] = (buffer[ch][i] << extra_bits) | extra_bits_buffer[ch][i];
255 }
256
258 int channels)
259 {
261 int has_size,
bps, is_compressed, decorr_shift, decorr_left_weight,
ret;
262 uint32_t output_samples;
263 int i, ch;
264
265 skip_bits(&alac->
gb, 4);
/* element instance tag */
267
268 /* the number of output samples is stored in the frame */
270
276 }
277
278 /* whether the frame is compressed */
280
281 if (has_size)
283 else
287 output_samples);
289 }
292 /* get output buffer */
296 }
else if (output_samples != alac->
nb_samples) {
300 }
303 for (ch = 0; ch < channels; ch++)
305 }
306
307 if (is_compressed) {
308 int16_t lpc_coefs[2][32];
309 int lpc_order[2];
310 int prediction_type[2];
311 int lpc_quant[2];
312 int rice_history_mult[2];
313
316
317 for (ch = 0; ch < channels; ch++) {
320 rice_history_mult[ch] =
get_bits(&alac->
gb, 3);
322
325
326 /* read the predictor table */
327 for (i = lpc_order[ch] - 1; i >= 0; i--)
329 }
330
334 return -1;
335 for (ch = 0; ch < channels; ch++)
337 }
338 }
339 for (ch = 0; ch < channels; ch++) {
343 if(ret<0)
345
346 /* adaptive FIR filter */
347 if (prediction_type[ch] == 15) {
348 /* Prediction type 15 runs the adaptive FIR twice.
349 * The first pass uses the special-case coef_num = 31, while
350 * the second pass uses the coefs from the bitstream.
351 *
352 * However, this prediction type is not currently used by the
353 * reference encoder.
354 */
358 } else if (prediction_type[ch] > 0) {
360 prediction_type[ch]);
361 }
364 bps, lpc_coefs[ch], lpc_order[ch], lpc_quant[ch]);
365 }
366 } else {
367 /* not compressed, easy case */
370 return -1;
371 for (ch = 0; ch < channels; ch++) {
374 }
375 }
377 decorr_shift = 0;
378 decorr_left_weight = 0;
379 }
380
381 if (channels == 2 && decorr_left_weight) {
383 decorr_shift, decorr_left_weight);
384 }
385
389 }
390
393 case 16: {
394 for (ch = 0; ch < channels; ch++) {
395 int16_t *outbuffer = (int16_t *)frame->
extended_data[ch_index + ch];
398 }}
399 break;
400 case 24: {
401 for (ch = 0; ch < channels; ch++) {
404 }}
405 break;
406 }
407 }else{
409 case 16: {
410 int16_t *outbuffer = ((int16_t *)frame->
extended_data[0]) + ch_index;
412 for (ch = 0; ch < channels; ch++)
414 outbuffer += alac->
channels - channels;
415 }
416 }
417 break;
418 case 24: {
421 for (ch = 0; ch < channels; ch++)
423 outbuffer += alac->
channels - channels;
424 }
425 }
426 break;
427 case 32: {
430 for (ch = 0; ch < channels; ch++)
432 outbuffer += alac->
channels - channels;
433 }
434 }
435 break;
436 }
437 }
438
439 return 0;
440 }
441
443 int *got_frame_ptr,
AVPacket *avpkt)
444 {
448 int channels;
449 int ch,
ret, got_end;
450
453
454 got_end = 0;
456 ch = 0;
460 got_end = 1;
461 break;
462 }
466 }
467
468 channels = (element ==
TYPE_CPE) ? 2 : 1;
469 if (ch + channels > alac->
channels ||
473 }
474
477 channels);
480
481 ch += channels;
482 }
483 if (!got_end) {
486 }
487
491 }
492
494 *got_frame_ptr = 1;
495
497 }
498
500 {
502
503 int ch;
509 }
510
511 return 0;
512 }
513
515 {
516 int ch;
518
521 buf_size, buf_alloc_fail);
522
526 buf_size, buf_alloc_fail);
527 }
528
530 buf_size, buf_alloc_fail);
531 }
532 return 0;
533 buf_alloc_fail:
536 }
537
539 {
541
544
546
553 }
558 alac->
rice_limit = bytestream2_get_byteu(&gb);
559 alac->
channels = bytestream2_get_byteu(&gb);
560 bytestream2_get_be16u(&gb); // maxRun
561 bytestream2_get_be32u(&gb); // max coded frame size
562 bytestream2_get_be32u(&gb); // average bitrate
563 bytestream2_get_be32u(&gb); // samplerate
564
565 return 0;
566 }
567
569 {
571 int req_packed;
574
575 /* initialize from the extradata */
579 }
582 return -1;
583 }
584
588 break;
589 case 24:
591 break;
594 }
596
600 } else {
603 else
605 }
610 }
612
616 }
617
618 return 0;
619 }
620
622 {
626 }
627
639 };