/src/ffmpeg/libavcodec/alac.c
Line | Count | Source (jump to first uncovered line) |
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 | | * 32 bits atom size |
33 | | * 32 bits tag ("alac") |
34 | | * 32 bits tag version (0) |
35 | | * 32 bits samples per frame (used when not set explicitly in the frames) |
36 | | * 8 bits compatible version (0) |
37 | | * 8 bits sample size |
38 | | * 8 bits history mult (40) |
39 | | * 8 bits initial history (10) |
40 | | * 8 bits rice param limit (14) |
41 | | * 8 bits channels |
42 | | * 16 bits maxRun (255) |
43 | | * 32 bits max coded frame size (0 means unknown) |
44 | | * 32 bits average bitrate (0 means unknown) |
45 | | * 32 bits samplerate |
46 | | */ |
47 | | |
48 | | #include <inttypes.h> |
49 | | |
50 | | #include "libavutil/channel_layout.h" |
51 | | #include "libavutil/mem.h" |
52 | | #include "libavutil/opt.h" |
53 | | #include "avcodec.h" |
54 | | #include "get_bits.h" |
55 | | #include "bytestream.h" |
56 | | #include "codec_internal.h" |
57 | | #include "thread.h" |
58 | | #include "unary.h" |
59 | | #include "mathops.h" |
60 | | #include "alac_data.h" |
61 | | #include "alacdsp.h" |
62 | | |
63 | 1.76k | #define ALAC_EXTRADATA_SIZE 36 |
64 | | |
65 | | typedef struct ALACContext { |
66 | | AVClass *class; |
67 | | AVCodecContext *avctx; |
68 | | GetBitContext gb; |
69 | | int channels; |
70 | | |
71 | | int32_t *predict_error_buffer[2]; |
72 | | int32_t *output_samples_buffer[2]; |
73 | | int32_t *extra_bits_buffer[2]; |
74 | | |
75 | | uint32_t max_samples_per_frame; |
76 | | uint8_t sample_size; |
77 | | uint8_t rice_history_mult; |
78 | | uint8_t rice_initial_history; |
79 | | uint8_t rice_limit; |
80 | | int sample_rate; |
81 | | |
82 | | int extra_bits; /**< number of extra bits beyond 16-bit */ |
83 | | int nb_samples; /**< number of samples in the current frame */ |
84 | | |
85 | | int direct_output; |
86 | | int extra_bit_bug; |
87 | | |
88 | | ALACDSPContext dsp; |
89 | | } ALACContext; |
90 | | |
91 | | static inline unsigned int decode_scalar(GetBitContext *gb, int k, int bps) |
92 | 16.7M | { |
93 | 16.7M | unsigned int x = get_unary_0_9(gb); |
94 | | |
95 | 16.7M | if (x > 8) { /* RICE THRESHOLD */ |
96 | | /* use alternative encoding */ |
97 | 269k | x = get_bits_long(gb, bps); |
98 | 16.4M | } else if (k != 1) { |
99 | 12.9M | int extrabits = show_bits(gb, k); |
100 | | |
101 | | /* multiply x by 2^k - 1, as part of their strange algorithm */ |
102 | 12.9M | x = (x << k) - x; |
103 | | |
104 | 12.9M | if (extrabits > 1) { |
105 | 6.45M | x += extrabits - 1; |
106 | 6.45M | skip_bits(gb, k); |
107 | 6.45M | } else |
108 | 6.44M | skip_bits(gb, k - 1); |
109 | 12.9M | } |
110 | 16.7M | return x; |
111 | 16.7M | } |
112 | | |
113 | | static int rice_decompress(ALACContext *alac, int32_t *output_buffer, |
114 | | int nb_samples, int bps, int rice_history_mult) |
115 | 28.3k | { |
116 | 28.3k | GetBitContext *gb = &alac->gb; |
117 | 28.3k | int i; |
118 | 28.3k | unsigned int history = alac->rice_initial_history; |
119 | 28.3k | int sign_modifier = 0; |
120 | | |
121 | 14.6M | for (i = 0; i < nb_samples; i++) { |
122 | 14.6M | int k; |
123 | 14.6M | unsigned int x; |
124 | | |
125 | 14.6M | if (get_bits_left(gb) <= 0) |
126 | 11.0k | return AVERROR_INVALIDDATA; |
127 | | |
128 | | /* calculate rice param and decode next value */ |
129 | 14.6M | k = av_log2((history >> 9) + 3); |
130 | 14.6M | k = FFMIN(k, alac->rice_limit); |
131 | 14.6M | x = decode_scalar(gb, k, bps); |
132 | 14.6M | x += sign_modifier; |
133 | 14.6M | sign_modifier = 0; |
134 | 14.6M | output_buffer[i] = (x >> 1) ^ -(x & 1); |
135 | | |
136 | | /* update the history */ |
137 | 14.6M | if (x > 0xffff) |
138 | 170k | history = 0xffff; |
139 | 14.4M | else |
140 | 14.4M | history += x * rice_history_mult - |
141 | 14.4M | ((history * rice_history_mult) >> 9); |
142 | | |
143 | | /* special case: there may be compressed blocks of 0 */ |
144 | 14.6M | if ((history < 128) && (i + 1 < nb_samples)) { |
145 | 2.07M | int block_size; |
146 | | |
147 | | /* calculate rice param and decode block size */ |
148 | 2.07M | k = 7 - av_log2(history) + ((history + 16) >> 6); |
149 | 2.07M | k = FFMIN(k, alac->rice_limit); |
150 | 2.07M | block_size = decode_scalar(gb, k, 16); |
151 | | |
152 | 2.07M | if (block_size > 0) { |
153 | 450k | if (block_size >= nb_samples - i) { |
154 | 10.7k | av_log(alac->avctx, AV_LOG_ERROR, |
155 | 10.7k | "invalid zero block size of %d %d %d\n", block_size, |
156 | 10.7k | nb_samples, i); |
157 | 10.7k | block_size = nb_samples - i - 1; |
158 | 10.7k | } |
159 | 450k | memset(&output_buffer[i + 1], 0, |
160 | 450k | block_size * sizeof(*output_buffer)); |
161 | 450k | i += block_size; |
162 | 450k | } |
163 | 2.07M | if (block_size <= 0xffff) |
164 | 2.07M | sign_modifier = 1; |
165 | 2.07M | history = 0; |
166 | 2.07M | } |
167 | 14.6M | } |
168 | 17.3k | return 0; |
169 | 28.3k | } |
170 | | |
171 | | static inline int sign_only(int v) |
172 | 543M | { |
173 | 543M | return FFDIFFSIGN(v, 0); |
174 | 543M | } |
175 | | |
176 | | static void lpc_prediction(int32_t *error_buffer, uint32_t *buffer_out, |
177 | | int nb_samples, int bps, int16_t *lpc_coefs, |
178 | | int lpc_order, int lpc_quant) |
179 | 18.0k | { |
180 | 18.0k | int i; |
181 | 18.0k | uint32_t *pred = buffer_out; |
182 | | |
183 | | /* first sample always copies */ |
184 | 18.0k | *buffer_out = *error_buffer; |
185 | | |
186 | 18.0k | if (nb_samples <= 1) |
187 | 1.37k | return; |
188 | | |
189 | 16.6k | if (!lpc_order) { |
190 | 2.71k | memcpy(&buffer_out[1], &error_buffer[1], |
191 | 2.71k | (nb_samples - 1) * sizeof(*buffer_out)); |
192 | 2.71k | return; |
193 | 2.71k | } |
194 | | |
195 | 13.9k | if (lpc_order == 31) { |
196 | | /* simple 1st-order prediction */ |
197 | 31.4M | for (i = 1; i < nb_samples; i++) { |
198 | 31.4M | buffer_out[i] = sign_extend(buffer_out[i - 1] + error_buffer[i], |
199 | 31.4M | bps); |
200 | 31.4M | } |
201 | 1.12k | return; |
202 | 1.12k | } |
203 | | |
204 | | /* read warm-up samples */ |
205 | 120k | for (i = 1; i <= lpc_order && i < nb_samples; i++) |
206 | 108k | buffer_out[i] = sign_extend(buffer_out[i - 1] + error_buffer[i], bps); |
207 | | |
208 | | /* NOTE: 4 and 8 are very common cases that could be optimized. */ |
209 | | |
210 | 68.8M | for (; i < nb_samples; i++) { |
211 | 68.8M | int j; |
212 | 68.8M | int val = 0; |
213 | 68.8M | unsigned error_val = error_buffer[i]; |
214 | 68.8M | int error_sign; |
215 | 68.8M | int d = *pred++; |
216 | | |
217 | | /* LPC prediction */ |
218 | 1.30G | for (j = 0; j < lpc_order; j++) |
219 | 1.23G | val += (pred[j] - d) * lpc_coefs[j]; |
220 | 68.8M | val = (val + (1LL << (lpc_quant - 1))) >> lpc_quant; |
221 | 68.8M | val += d + error_val; |
222 | 68.8M | buffer_out[i] = sign_extend(val, bps); |
223 | | |
224 | | /* adapt LPC coefficients */ |
225 | 68.8M | error_sign = sign_only(error_val); |
226 | 68.8M | if (error_sign) { |
227 | 492M | for (j = 0; j < lpc_order && (int)(error_val * error_sign) > 0; j++) { |
228 | 474M | int sign; |
229 | 474M | val = d - pred[j]; |
230 | 474M | sign = sign_only(val) * error_sign; |
231 | 474M | lpc_coefs[j] -= sign; |
232 | 474M | val *= (unsigned)sign; |
233 | 474M | error_val -= (val >> lpc_quant) * (j + 1U); |
234 | 474M | } |
235 | 18.0M | } |
236 | 68.8M | } |
237 | 12.7k | } |
238 | | |
239 | | static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index, |
240 | | int channels) |
241 | 123k | { |
242 | 123k | ALACContext *alac = avctx->priv_data; |
243 | 123k | int has_size, bps, is_compressed, decorr_shift, decorr_left_weight, ret; |
244 | 123k | GetBitContext *gb = &alac->gb; |
245 | 123k | uint32_t output_samples; |
246 | 123k | int i, ch; |
247 | | |
248 | 123k | skip_bits(gb, 4); /* element instance tag */ |
249 | 123k | skip_bits(gb, 12); /* unused header bits */ |
250 | | |
251 | | /* the number of output samples is stored in the frame */ |
252 | 123k | has_size = get_bits1(gb); |
253 | | |
254 | 123k | alac->extra_bits = get_bits(gb, 2) << 3; |
255 | 123k | bps = alac->sample_size - alac->extra_bits + channels - 1; |
256 | 123k | if (bps > 32) { |
257 | 311 | avpriv_report_missing_feature(avctx, "bps %d", bps); |
258 | 311 | return AVERROR_PATCHWELCOME; |
259 | 311 | } |
260 | 122k | if (bps < 1) |
261 | 5.54k | return AVERROR_INVALIDDATA; |
262 | | |
263 | | /* whether the frame is compressed */ |
264 | 117k | is_compressed = !get_bits1(gb); |
265 | | |
266 | 117k | if (has_size) |
267 | 14.2k | output_samples = get_bits_long(gb, 32); |
268 | 103k | else |
269 | 103k | output_samples = alac->max_samples_per_frame; |
270 | 117k | if (!output_samples || output_samples > alac->max_samples_per_frame) { |
271 | 9.54k | av_log(avctx, AV_LOG_ERROR, "invalid samples per frame: %"PRIu32"\n", |
272 | 9.54k | output_samples); |
273 | 9.54k | return AVERROR_INVALIDDATA; |
274 | 9.54k | } |
275 | 107k | if (!alac->nb_samples) { |
276 | | /* get output buffer */ |
277 | 101k | frame->nb_samples = output_samples; |
278 | 101k | if ((ret = ff_thread_get_buffer(avctx, frame, 0)) < 0) |
279 | 526 | return ret; |
280 | 101k | } else if (output_samples != alac->nb_samples) { |
281 | 608 | av_log(avctx, AV_LOG_ERROR, "sample count mismatch: %"PRIu32" != %d\n", |
282 | 608 | output_samples, alac->nb_samples); |
283 | 608 | return AVERROR_INVALIDDATA; |
284 | 608 | } |
285 | 106k | alac->nb_samples = output_samples; |
286 | 106k | if (alac->direct_output) { |
287 | 104k | for (ch = 0; ch < channels; ch++) |
288 | 58.0k | alac->output_samples_buffer[ch] = (int32_t *)frame->extended_data[ch_index + ch]; |
289 | 46.6k | } |
290 | | |
291 | 106k | if (is_compressed) { |
292 | 90.0k | int16_t lpc_coefs[2][32]; |
293 | 90.0k | int lpc_order[2]; |
294 | 90.0k | int prediction_type[2]; |
295 | 90.0k | int lpc_quant[2]; |
296 | 90.0k | int rice_history_mult[2]; |
297 | | |
298 | 90.0k | if (!alac->rice_limit) { |
299 | 7.36k | avpriv_request_sample(alac->avctx, |
300 | 7.36k | "Compression with rice limit 0"); |
301 | 7.36k | return AVERROR(ENOSYS); |
302 | 7.36k | } |
303 | | |
304 | 82.6k | decorr_shift = get_bits(gb, 8); |
305 | 82.6k | decorr_left_weight = get_bits(gb, 8); |
306 | | |
307 | 82.6k | if (channels == 2 && decorr_left_weight && decorr_shift > 31) |
308 | 1.62k | return AVERROR_INVALIDDATA; |
309 | | |
310 | 129k | for (ch = 0; ch < channels; ch++) { |
311 | 105k | prediction_type[ch] = get_bits(gb, 4); |
312 | 105k | lpc_quant[ch] = get_bits(gb, 4); |
313 | 105k | rice_history_mult[ch] = get_bits(gb, 3); |
314 | 105k | lpc_order[ch] = get_bits(gb, 5); |
315 | | |
316 | 105k | if (lpc_order[ch] >= alac->max_samples_per_frame || !lpc_quant[ch]) |
317 | 56.9k | return AVERROR_INVALIDDATA; |
318 | | |
319 | | /* read the predictor table */ |
320 | 508k | for (i = lpc_order[ch] - 1; i >= 0; i--) |
321 | 460k | lpc_coefs[ch][i] = get_sbits(gb, 16); |
322 | 48.0k | } |
323 | | |
324 | 24.0k | if (alac->extra_bits) { |
325 | 3.61k | const int extra_bits = alac->extra_bits; |
326 | 3.61k | if (get_bits_left(gb) < (int64_t)alac->nb_samples * channels * extra_bits) |
327 | 1.97k | return AVERROR_INVALIDDATA; |
328 | 664k | for (i = 0; i < alac->nb_samples; i++) { |
329 | 1.44M | for (ch = 0; ch < channels; ch++) |
330 | 776k | alac->extra_bits_buffer[ch][i] = get_bits(gb, extra_bits); |
331 | 663k | } |
332 | 1.64k | } |
333 | 39.3k | for (ch = 0; ch < channels; ch++) { |
334 | 28.3k | int ret = rice_decompress(alac, alac->predict_error_buffer[ch], |
335 | 28.3k | alac->nb_samples, bps, |
336 | 28.3k | rice_history_mult[ch] * alac->rice_history_mult / 4); |
337 | 28.3k | if (ret < 0) |
338 | 11.0k | return ret; |
339 | | |
340 | | /* adaptive FIR filter */ |
341 | 17.3k | if (prediction_type[ch] == 15) { |
342 | | /* Prediction type 15 runs the adaptive FIR twice. |
343 | | * The first pass uses the special-case coef_num = 31, while |
344 | | * the second pass uses the coefs from the bitstream. |
345 | | * |
346 | | * However, this prediction type is not currently used by the |
347 | | * reference encoder. |
348 | | */ |
349 | 693 | lpc_prediction(alac->predict_error_buffer[ch], |
350 | 693 | alac->predict_error_buffer[ch], |
351 | 693 | alac->nb_samples, bps, NULL, 31, 0); |
352 | 16.6k | } else if (prediction_type[ch] > 0) { |
353 | 14.3k | av_log(avctx, AV_LOG_WARNING, "unknown prediction type: %i\n", |
354 | 14.3k | prediction_type[ch]); |
355 | 14.3k | } |
356 | 17.3k | lpc_prediction(alac->predict_error_buffer[ch], |
357 | 17.3k | alac->output_samples_buffer[ch], alac->nb_samples, |
358 | 17.3k | bps, lpc_coefs[ch], lpc_order[ch], lpc_quant[ch]); |
359 | 17.3k | } |
360 | 22.0k | } else { |
361 | 16.6k | const int sample_size = alac->sample_size; |
362 | | /* not compressed, easy case */ |
363 | 16.6k | if (get_bits_left(gb) < (int64_t)alac->nb_samples * channels * sample_size) |
364 | 9.08k | return AVERROR_INVALIDDATA; |
365 | 200k | for (i = 0; i < alac->nb_samples; i++) { |
366 | 412k | for (ch = 0; ch < channels; ch++) { |
367 | 220k | alac->output_samples_buffer[ch][i] = |
368 | 220k | get_sbits_long(gb, sample_size); |
369 | 220k | } |
370 | 192k | } |
371 | 7.60k | alac->extra_bits = 0; |
372 | 7.60k | decorr_shift = 0; |
373 | 7.60k | decorr_left_weight = 0; |
374 | 7.60k | } |
375 | | |
376 | 18.6k | if (channels == 2) { |
377 | 5.44k | if (alac->extra_bits && alac->extra_bit_bug) { |
378 | 0 | alac->dsp.append_extra_bits[1](alac->output_samples_buffer, alac->extra_bits_buffer, |
379 | 0 | alac->extra_bits, channels, alac->nb_samples); |
380 | 0 | } |
381 | | |
382 | 5.44k | if (decorr_left_weight) { |
383 | 4.24k | alac->dsp.decorrelate_stereo(alac->output_samples_buffer, alac->nb_samples, |
384 | 4.24k | decorr_shift, decorr_left_weight); |
385 | 4.24k | } |
386 | | |
387 | 5.44k | if (alac->extra_bits && !alac->extra_bit_bug) { |
388 | 842 | alac->dsp.append_extra_bits[1](alac->output_samples_buffer, alac->extra_bits_buffer, |
389 | 842 | alac->extra_bits, channels, alac->nb_samples); |
390 | 842 | } |
391 | 13.2k | } else if (alac->extra_bits) { |
392 | 765 | alac->dsp.append_extra_bits[0](alac->output_samples_buffer, alac->extra_bits_buffer, |
393 | 765 | alac->extra_bits, channels, alac->nb_samples); |
394 | 765 | } |
395 | | |
396 | 18.6k | switch(alac->sample_size) { |
397 | 4.14k | case 16: { |
398 | 9.93k | for (ch = 0; ch < channels; ch++) { |
399 | 5.79k | int16_t *outbuffer = (int16_t *)frame->extended_data[ch_index + ch]; |
400 | 24.1M | for (i = 0; i < alac->nb_samples; i++) |
401 | 24.1M | *outbuffer++ = alac->output_samples_buffer[ch][i]; |
402 | 5.79k | }} |
403 | 4.14k | break; |
404 | 12.8k | case 20: { |
405 | 29.1k | for (ch = 0; ch < channels; ch++) { |
406 | 12.0M | for (i = 0; i < alac->nb_samples; i++) |
407 | 12.0M | alac->output_samples_buffer[ch][i] *= 1U << 12; |
408 | 16.2k | }} |
409 | 12.8k | break; |
410 | 459 | case 24: { |
411 | 1.26k | for (ch = 0; ch < channels; ch++) { |
412 | 1.01M | for (i = 0; i < alac->nb_samples; i++) |
413 | 1.01M | alac->output_samples_buffer[ch][i] *= 1U << 8; |
414 | 810 | }} |
415 | 459 | break; |
416 | 18.6k | } |
417 | | |
418 | 18.6k | return 0; |
419 | 18.6k | } |
420 | | |
421 | | static int alac_decode_frame(AVCodecContext *avctx, AVFrame *frame, |
422 | | int *got_frame_ptr, AVPacket *avpkt) |
423 | 215k | { |
424 | 215k | ALACContext *alac = avctx->priv_data; |
425 | 215k | enum AlacRawDataBlockType element; |
426 | 215k | int channels; |
427 | 215k | int ch, ret, got_end; |
428 | | |
429 | 215k | if ((ret = init_get_bits8(&alac->gb, avpkt->data, avpkt->size)) < 0) |
430 | 0 | return ret; |
431 | | |
432 | 215k | got_end = 0; |
433 | 215k | alac->nb_samples = 0; |
434 | 215k | ch = 0; |
435 | 237k | while (get_bits_left(&alac->gb) >= 3) { |
436 | 233k | element = get_bits(&alac->gb, 3); |
437 | 233k | if (element == TYPE_END) { |
438 | 93.3k | got_end = 1; |
439 | 93.3k | break; |
440 | 93.3k | } |
441 | 140k | if (element > TYPE_CPE && element != TYPE_LFE) { |
442 | 14.0k | avpriv_report_missing_feature(avctx, "Syntax element %d", element); |
443 | 14.0k | return AVERROR_PATCHWELCOME; |
444 | 14.0k | } |
445 | | |
446 | 126k | channels = (element == TYPE_CPE) ? 2 : 1; |
447 | 126k | if (ch + channels > alac->channels || |
448 | 126k | ff_alac_channel_layout_offsets[alac->channels - 1][ch] + channels > alac->channels) { |
449 | 3.08k | av_log(avctx, AV_LOG_ERROR, "invalid element channel count\n"); |
450 | 3.08k | return AVERROR_INVALIDDATA; |
451 | 3.08k | } |
452 | | |
453 | 123k | ret = decode_element(avctx, frame, |
454 | 123k | ff_alac_channel_layout_offsets[alac->channels - 1][ch], |
455 | 123k | channels); |
456 | 123k | if (ret < 0 && get_bits_left(&alac->gb)) |
457 | 101k | return ret; |
458 | | |
459 | 21.5k | ch += channels; |
460 | 21.5k | } |
461 | 96.9k | if (!got_end) { |
462 | 3.65k | av_log(avctx, AV_LOG_ERROR, "no end tag found. incomplete packet.\n"); |
463 | 3.65k | return AVERROR_INVALIDDATA; |
464 | 3.65k | } |
465 | | |
466 | 93.3k | if (avpkt->size * 8 - get_bits_count(&alac->gb) > 8) { |
467 | 25.9k | av_log(avctx, AV_LOG_ERROR, "Error : %d bits left\n", |
468 | 25.9k | avpkt->size * 8 - get_bits_count(&alac->gb)); |
469 | 25.9k | } |
470 | | |
471 | 93.3k | if (alac->channels == ch && alac->nb_samples) |
472 | 1.52k | *got_frame_ptr = 1; |
473 | 91.8k | else |
474 | 91.8k | av_log(avctx, AV_LOG_WARNING, "Failed to decode all channels\n"); |
475 | | |
476 | 93.3k | return avpkt->size; |
477 | 96.9k | } |
478 | | |
479 | | static av_cold int alac_decode_close(AVCodecContext *avctx) |
480 | 1.76k | { |
481 | 1.76k | ALACContext *alac = avctx->priv_data; |
482 | | |
483 | 1.76k | int ch; |
484 | 4.43k | for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) { |
485 | 2.66k | av_freep(&alac->predict_error_buffer[ch]); |
486 | 2.66k | if (!alac->direct_output) |
487 | 1.35k | av_freep(&alac->output_samples_buffer[ch]); |
488 | 2.66k | av_freep(&alac->extra_bits_buffer[ch]); |
489 | 2.66k | } |
490 | | |
491 | 1.76k | return 0; |
492 | 1.76k | } |
493 | | |
494 | | static int allocate_buffers(ALACContext *alac) |
495 | 1.47k | { |
496 | 1.47k | int ch; |
497 | 1.47k | unsigned buf_size = alac->max_samples_per_frame * sizeof(int32_t); |
498 | 1.47k | unsigned extra_buf_size = buf_size + AV_INPUT_BUFFER_PADDING_SIZE; |
499 | | |
500 | 4.41k | for (ch = 0; ch < 2; ch++) { |
501 | 2.94k | alac->predict_error_buffer[ch] = NULL; |
502 | 2.94k | alac->output_samples_buffer[ch] = NULL; |
503 | 2.94k | alac->extra_bits_buffer[ch] = NULL; |
504 | 2.94k | } |
505 | | |
506 | 4.07k | for (ch = 0; ch < FFMIN(alac->channels, 2); ch++) { |
507 | 2.60k | if (!(alac->predict_error_buffer[ch] = av_malloc(buf_size))) |
508 | 0 | return AVERROR(ENOMEM); |
509 | | |
510 | 2.60k | alac->direct_output = alac->sample_size > 16; |
511 | 2.60k | if (!alac->direct_output) { |
512 | 1.29k | if (!(alac->output_samples_buffer[ch] = av_malloc(extra_buf_size))) |
513 | 0 | return AVERROR(ENOMEM); |
514 | 1.29k | } |
515 | | |
516 | 2.60k | if (!(alac->extra_bits_buffer[ch] = av_malloc(extra_buf_size))) |
517 | 0 | return AVERROR(ENOMEM); |
518 | 2.60k | } |
519 | 1.47k | return 0; |
520 | 1.47k | } |
521 | | |
522 | | static int alac_set_info(ALACContext *alac) |
523 | 1.57k | { |
524 | 1.57k | GetByteContext gb; |
525 | | |
526 | 1.57k | bytestream2_init(&gb, alac->avctx->extradata, |
527 | 1.57k | alac->avctx->extradata_size); |
528 | | |
529 | 1.57k | bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4 |
530 | | |
531 | 1.57k | alac->max_samples_per_frame = bytestream2_get_be32u(&gb); |
532 | 1.57k | if (!alac->max_samples_per_frame || |
533 | 1.57k | alac->max_samples_per_frame > 4096 * 4096) { |
534 | 56 | av_log(alac->avctx, AV_LOG_ERROR, |
535 | 56 | "max samples per frame invalid: %"PRIu32"\n", |
536 | 56 | alac->max_samples_per_frame); |
537 | 56 | return AVERROR_INVALIDDATA; |
538 | 56 | } |
539 | 1.52k | bytestream2_skipu(&gb, 1); // compatible version |
540 | 1.52k | alac->sample_size = bytestream2_get_byteu(&gb); |
541 | 1.52k | alac->rice_history_mult = bytestream2_get_byteu(&gb); |
542 | 1.52k | alac->rice_initial_history = bytestream2_get_byteu(&gb); |
543 | 1.52k | alac->rice_limit = bytestream2_get_byteu(&gb); |
544 | 1.52k | alac->channels = bytestream2_get_byteu(&gb); |
545 | 1.52k | bytestream2_get_be16u(&gb); // maxRun |
546 | 1.52k | bytestream2_get_be32u(&gb); // max coded frame size |
547 | 1.52k | bytestream2_get_be32u(&gb); // average bitrate |
548 | 1.52k | alac->sample_rate = bytestream2_get_be32u(&gb); |
549 | | |
550 | 1.52k | return 0; |
551 | 1.57k | } |
552 | | |
553 | | static av_cold int alac_decode_init(AVCodecContext * avctx) |
554 | 1.76k | { |
555 | 1.76k | int ret; |
556 | 1.76k | ALACContext *alac = avctx->priv_data; |
557 | 1.76k | alac->avctx = avctx; |
558 | | |
559 | | /* initialize from the extradata */ |
560 | 1.76k | if (alac->avctx->extradata_size < ALAC_EXTRADATA_SIZE) { |
561 | 189 | av_log(avctx, AV_LOG_ERROR, "extradata is too small\n"); |
562 | 189 | return AVERROR_INVALIDDATA; |
563 | 189 | } |
564 | 1.57k | if ((ret = alac_set_info(alac)) < 0) { |
565 | 56 | av_log(avctx, AV_LOG_ERROR, "set_info failed\n"); |
566 | 56 | return ret; |
567 | 56 | } |
568 | | |
569 | 1.52k | switch (alac->sample_size) { |
570 | 747 | case 16: avctx->sample_fmt = AV_SAMPLE_FMT_S16P; |
571 | 747 | break; |
572 | 284 | case 20: |
573 | 354 | case 24: |
574 | 739 | case 32: avctx->sample_fmt = AV_SAMPLE_FMT_S32P; |
575 | 739 | break; |
576 | 34 | default: avpriv_request_sample(avctx, "Sample depth %d", alac->sample_size); |
577 | 34 | return AVERROR_PATCHWELCOME; |
578 | 1.52k | } |
579 | 1.48k | avctx->bits_per_raw_sample = alac->sample_size; |
580 | 1.48k | avctx->sample_rate = alac->sample_rate; |
581 | | |
582 | 1.48k | if (alac->channels < 1) { |
583 | 157 | av_log(avctx, AV_LOG_WARNING, "Invalid channel count\n"); |
584 | 157 | if (avctx->ch_layout.nb_channels < 1) |
585 | 1 | return AVERROR(EINVAL); |
586 | 156 | alac->channels = avctx->ch_layout.nb_channels; |
587 | 156 | } |
588 | 1.48k | if (alac->channels > ALAC_MAX_CHANNELS) { |
589 | 12 | avpriv_report_missing_feature(avctx, "Channel count %d", |
590 | 12 | alac->channels); |
591 | 12 | return AVERROR_PATCHWELCOME; |
592 | 12 | } |
593 | 1.47k | av_channel_layout_uninit(&avctx->ch_layout); |
594 | 1.47k | avctx->ch_layout = ff_alac_ch_layouts[alac->channels - 1]; |
595 | | |
596 | 1.47k | if ((ret = allocate_buffers(alac)) < 0) { |
597 | 0 | av_log(avctx, AV_LOG_ERROR, "Error allocating buffers\n"); |
598 | 0 | return ret; |
599 | 0 | } |
600 | | |
601 | 1.47k | ff_alacdsp_init(&alac->dsp); |
602 | | |
603 | 1.47k | return 0; |
604 | 1.47k | } |
605 | | |
606 | | static const AVOption options[] = { |
607 | | { "extra_bits_bug", "Force non-standard decoding process", |
608 | | offsetof(ALACContext, extra_bit_bug), AV_OPT_TYPE_BOOL, { .i64 = 0 }, |
609 | | 0, 1, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM }, |
610 | | { NULL }, |
611 | | }; |
612 | | |
613 | | static const AVClass alac_class = { |
614 | | .class_name = "alac", |
615 | | .item_name = av_default_item_name, |
616 | | .option = options, |
617 | | .version = LIBAVUTIL_VERSION_INT, |
618 | | }; |
619 | | |
620 | | const FFCodec ff_alac_decoder = { |
621 | | .p.name = "alac", |
622 | | CODEC_LONG_NAME("ALAC (Apple Lossless Audio Codec)"), |
623 | | .p.type = AVMEDIA_TYPE_AUDIO, |
624 | | .p.id = AV_CODEC_ID_ALAC, |
625 | | .priv_data_size = sizeof(ALACContext), |
626 | | .init = alac_decode_init, |
627 | | .close = alac_decode_close, |
628 | | FF_CODEC_DECODE_CB(alac_decode_frame), |
629 | | .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_CHANNEL_CONF, |
630 | | .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, |
631 | | .p.priv_class = &alac_class |
632 | | }; |