You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

691 lines
23KB

  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. * @file
  23. * ALAC (Apple Lossless Audio Codec) decoder
  24. * @author 2005 David Hammerton
  25. * @see http://crazney.net/programs/itunes/alac.html
  26. *
  27. * Note: This decoder expects a 36- (0x24-)byte QuickTime atom to be
  28. * passed through the extradata[_size] fields. This atom is tacked onto
  29. * the end of an 'alac' stsd atom and has the following format:
  30. * bytes 0-3 atom size (0x24), big-endian
  31. * bytes 4-7 atom type ('alac', not the 'alac' tag from start of stsd)
  32. * bytes 8-35 data bytes needed by decoder
  33. *
  34. * Extradata:
  35. * 32bit size
  36. * 32bit tag (=alac)
  37. * 32bit zero?
  38. * 32bit max sample per frame
  39. * 8bit ?? (zero?)
  40. * 8bit sample size
  41. * 8bit history mult
  42. * 8bit initial history
  43. * 8bit kmodifier
  44. * 8bit channels?
  45. * 16bit ??
  46. * 32bit max coded frame size
  47. * 32bit bitrate?
  48. * 32bit samplerate
  49. */
  50. #include "avcodec.h"
  51. #include "get_bits.h"
  52. #include "bytestream.h"
  53. #include "unary.h"
  54. #include "mathops.h"
  55. #define ALAC_EXTRADATA_SIZE 36
  56. #define MAX_CHANNELS 2
  57. typedef struct {
  58. AVCodecContext *avctx;
  59. GetBitContext gb;
  60. int numchannels;
  61. int bytespersample;
  62. /* buffers */
  63. int32_t *predicterror_buffer[MAX_CHANNELS];
  64. int32_t *outputsamples_buffer[MAX_CHANNELS];
  65. int32_t *wasted_bits_buffer[MAX_CHANNELS];
  66. /* stuff from setinfo */
  67. uint32_t setinfo_max_samples_per_frame; /* 0x1000 = 4096 */ /* max samples per frame? */
  68. uint8_t setinfo_sample_size; /* 0x10 */
  69. uint8_t setinfo_rice_historymult; /* 0x28 */
  70. uint8_t setinfo_rice_initialhistory; /* 0x0a */
  71. uint8_t setinfo_rice_kmodifier; /* 0x0e */
  72. /* end setinfo stuff */
  73. int wasted_bits;
  74. } ALACContext;
  75. static void allocate_buffers(ALACContext *alac)
  76. {
  77. int chan;
  78. for (chan = 0; chan < MAX_CHANNELS; chan++) {
  79. alac->predicterror_buffer[chan] =
  80. av_malloc(alac->setinfo_max_samples_per_frame * 4);
  81. alac->outputsamples_buffer[chan] =
  82. av_malloc(alac->setinfo_max_samples_per_frame * 4);
  83. alac->wasted_bits_buffer[chan] = av_malloc(alac->setinfo_max_samples_per_frame * 4);
  84. }
  85. }
  86. static int alac_set_info(ALACContext *alac)
  87. {
  88. const unsigned char *ptr = alac->avctx->extradata;
  89. ptr += 4; /* size */
  90. ptr += 4; /* alac */
  91. ptr += 4; /* 0 ? */
  92. if(AV_RB32(ptr) >= UINT_MAX/4){
  93. av_log(alac->avctx, AV_LOG_ERROR, "setinfo_max_samples_per_frame too large\n");
  94. return -1;
  95. }
  96. /* buffer size / 2 ? */
  97. alac->setinfo_max_samples_per_frame = bytestream_get_be32(&ptr);
  98. ptr++; /* ??? */
  99. alac->setinfo_sample_size = *ptr++;
  100. if (alac->setinfo_sample_size > 32) {
  101. av_log(alac->avctx, AV_LOG_ERROR, "setinfo_sample_size too large\n");
  102. return -1;
  103. }
  104. alac->setinfo_rice_historymult = *ptr++;
  105. alac->setinfo_rice_initialhistory = *ptr++;
  106. alac->setinfo_rice_kmodifier = *ptr++;
  107. ptr++; /* channels? */
  108. bytestream_get_be16(&ptr); /* ??? */
  109. bytestream_get_be32(&ptr); /* max coded frame size */
  110. bytestream_get_be32(&ptr); /* bitrate ? */
  111. bytestream_get_be32(&ptr); /* samplerate */
  112. allocate_buffers(alac);
  113. return 0;
  114. }
  115. static inline int decode_scalar(GetBitContext *gb, int k, int limit, int readsamplesize){
  116. /* read x - number of 1s before 0 represent the rice */
  117. int x = get_unary_0_9(gb);
  118. if (x > 8) { /* RICE THRESHOLD */
  119. /* use alternative encoding */
  120. x = get_bits(gb, readsamplesize);
  121. } else {
  122. if (k >= limit)
  123. k = limit;
  124. if (k != 1) {
  125. int extrabits = show_bits(gb, k);
  126. /* multiply x by 2^k - 1, as part of their strange algorithm */
  127. x = (x << k) - x;
  128. if (extrabits > 1) {
  129. x += extrabits - 1;
  130. skip_bits(gb, k);
  131. } else
  132. skip_bits(gb, k - 1);
  133. }
  134. }
  135. return x;
  136. }
  137. static void bastardized_rice_decompress(ALACContext *alac,
  138. int32_t *output_buffer,
  139. int output_size,
  140. int readsamplesize, /* arg_10 */
  141. int rice_initialhistory, /* arg424->b */
  142. int rice_kmodifier, /* arg424->d */
  143. int rice_historymult, /* arg424->c */
  144. int rice_kmodifier_mask /* arg424->e */
  145. )
  146. {
  147. int output_count;
  148. unsigned int history = rice_initialhistory;
  149. int sign_modifier = 0;
  150. for (output_count = 0; output_count < output_size; output_count++) {
  151. int32_t x;
  152. int32_t x_modified;
  153. int32_t final_val;
  154. /* standard rice encoding */
  155. int k; /* size of extra bits */
  156. /* read k, that is bits as is */
  157. k = av_log2((history >> 9) + 3);
  158. x= decode_scalar(&alac->gb, k, rice_kmodifier, readsamplesize);
  159. x_modified = sign_modifier + x;
  160. final_val = (x_modified + 1) / 2;
  161. if (x_modified & 1) final_val *= -1;
  162. output_buffer[output_count] = final_val;
  163. sign_modifier = 0;
  164. /* now update the history */
  165. history += x_modified * rice_historymult
  166. - ((history * rice_historymult) >> 9);
  167. if (x_modified > 0xffff)
  168. history = 0xffff;
  169. /* special case: there may be compressed blocks of 0 */
  170. if ((history < 128) && (output_count+1 < output_size)) {
  171. int k;
  172. unsigned int block_size;
  173. sign_modifier = 1;
  174. k = 7 - av_log2(history) + ((history + 16) >> 6 /* / 64 */);
  175. block_size= decode_scalar(&alac->gb, k, rice_kmodifier, 16);
  176. if (block_size > 0) {
  177. if(block_size >= output_size - output_count){
  178. av_log(alac->avctx, AV_LOG_ERROR, "invalid zero block size of %d %d %d\n", block_size, output_size, output_count);
  179. block_size= output_size - output_count - 1;
  180. }
  181. memset(&output_buffer[output_count+1], 0, block_size * 4);
  182. output_count += block_size;
  183. }
  184. if (block_size > 0xffff)
  185. sign_modifier = 0;
  186. history = 0;
  187. }
  188. }
  189. }
  190. static inline int sign_only(int v)
  191. {
  192. return v ? FFSIGN(v) : 0;
  193. }
  194. static void predictor_decompress_fir_adapt(int32_t *error_buffer,
  195. int32_t *buffer_out,
  196. int output_size,
  197. int readsamplesize,
  198. int16_t *predictor_coef_table,
  199. int predictor_coef_num,
  200. int predictor_quantitization)
  201. {
  202. int i;
  203. /* first sample always copies */
  204. *buffer_out = *error_buffer;
  205. if (!predictor_coef_num) {
  206. if (output_size <= 1)
  207. return;
  208. memcpy(buffer_out+1, error_buffer+1, (output_size-1) * 4);
  209. return;
  210. }
  211. if (predictor_coef_num == 0x1f) { /* 11111 - max value of predictor_coef_num */
  212. /* second-best case scenario for fir decompression,
  213. * error describes a small difference from the previous sample only
  214. */
  215. if (output_size <= 1)
  216. return;
  217. for (i = 0; i < output_size - 1; i++) {
  218. int32_t prev_value;
  219. int32_t error_value;
  220. prev_value = buffer_out[i];
  221. error_value = error_buffer[i+1];
  222. buffer_out[i+1] =
  223. sign_extend((prev_value + error_value), readsamplesize);
  224. }
  225. return;
  226. }
  227. /* read warm-up samples */
  228. if (predictor_coef_num > 0)
  229. for (i = 0; i < predictor_coef_num; i++) {
  230. int32_t val;
  231. val = buffer_out[i] + error_buffer[i+1];
  232. val = sign_extend(val, readsamplesize);
  233. buffer_out[i+1] = val;
  234. }
  235. /* 4 and 8 are very common cases (the only ones i've seen). these
  236. * should be unrolled and optimized
  237. */
  238. /* general case */
  239. if (predictor_coef_num > 0) {
  240. for (i = predictor_coef_num + 1; i < output_size; i++) {
  241. int j;
  242. int sum = 0;
  243. int outval;
  244. int error_val = error_buffer[i];
  245. for (j = 0; j < predictor_coef_num; j++) {
  246. sum += (buffer_out[predictor_coef_num-j] - buffer_out[0]) *
  247. predictor_coef_table[j];
  248. }
  249. outval = (1 << (predictor_quantitization-1)) + sum;
  250. outval = outval >> predictor_quantitization;
  251. outval = outval + buffer_out[0] + error_val;
  252. outval = sign_extend(outval, readsamplesize);
  253. buffer_out[predictor_coef_num+1] = outval;
  254. if (error_val > 0) {
  255. int predictor_num = predictor_coef_num - 1;
  256. while (predictor_num >= 0 && error_val > 0) {
  257. int val = buffer_out[0] - buffer_out[predictor_coef_num - predictor_num];
  258. int sign = sign_only(val);
  259. predictor_coef_table[predictor_num] -= sign;
  260. val *= sign; /* absolute value */
  261. error_val -= ((val >> predictor_quantitization) *
  262. (predictor_coef_num - predictor_num));
  263. predictor_num--;
  264. }
  265. } else if (error_val < 0) {
  266. int predictor_num = predictor_coef_num - 1;
  267. while (predictor_num >= 0 && error_val < 0) {
  268. int val = buffer_out[0] - buffer_out[predictor_coef_num - predictor_num];
  269. int sign = - sign_only(val);
  270. predictor_coef_table[predictor_num] -= sign;
  271. val *= sign; /* neg value */
  272. error_val -= ((val >> predictor_quantitization) *
  273. (predictor_coef_num - predictor_num));
  274. predictor_num--;
  275. }
  276. }
  277. buffer_out++;
  278. }
  279. }
  280. }
  281. static void reconstruct_stereo_16(int32_t *buffer[MAX_CHANNELS],
  282. int16_t *buffer_out,
  283. int numchannels, int numsamples,
  284. uint8_t interlacing_shift,
  285. uint8_t interlacing_leftweight)
  286. {
  287. int i;
  288. if (numsamples <= 0)
  289. return;
  290. /* weighted interlacing */
  291. if (interlacing_leftweight) {
  292. for (i = 0; i < numsamples; i++) {
  293. int32_t a, b;
  294. a = buffer[0][i];
  295. b = buffer[1][i];
  296. a -= (b * interlacing_leftweight) >> interlacing_shift;
  297. b += a;
  298. buffer_out[i*numchannels] = b;
  299. buffer_out[i*numchannels + 1] = a;
  300. }
  301. return;
  302. }
  303. /* otherwise basic interlacing took place */
  304. for (i = 0; i < numsamples; i++) {
  305. int16_t left, right;
  306. left = buffer[0][i];
  307. right = buffer[1][i];
  308. buffer_out[i*numchannels] = left;
  309. buffer_out[i*numchannels + 1] = right;
  310. }
  311. }
  312. static void decorrelate_stereo_24(int32_t *buffer[MAX_CHANNELS],
  313. int32_t *buffer_out,
  314. int32_t *wasted_bits_buffer[MAX_CHANNELS],
  315. int wasted_bits,
  316. int numchannels, int numsamples,
  317. uint8_t interlacing_shift,
  318. uint8_t interlacing_leftweight)
  319. {
  320. int i;
  321. if (numsamples <= 0)
  322. return;
  323. /* weighted interlacing */
  324. if (interlacing_leftweight) {
  325. for (i = 0; i < numsamples; i++) {
  326. int32_t a, b;
  327. a = buffer[0][i];
  328. b = buffer[1][i];
  329. a -= (b * interlacing_leftweight) >> interlacing_shift;
  330. b += a;
  331. if (wasted_bits) {
  332. b = (b << wasted_bits) | wasted_bits_buffer[0][i];
  333. a = (a << wasted_bits) | wasted_bits_buffer[1][i];
  334. }
  335. buffer_out[i * numchannels] = b << 8;
  336. buffer_out[i * numchannels + 1] = a << 8;
  337. }
  338. } else {
  339. for (i = 0; i < numsamples; i++) {
  340. int32_t left, right;
  341. left = buffer[0][i];
  342. right = buffer[1][i];
  343. if (wasted_bits) {
  344. left = (left << wasted_bits) | wasted_bits_buffer[0][i];
  345. right = (right << wasted_bits) | wasted_bits_buffer[1][i];
  346. }
  347. buffer_out[i * numchannels] = left << 8;
  348. buffer_out[i * numchannels + 1] = right << 8;
  349. }
  350. }
  351. }
  352. static int alac_decode_frame(AVCodecContext *avctx,
  353. void *outbuffer, int *outputsize,
  354. AVPacket *avpkt)
  355. {
  356. const uint8_t *inbuffer = avpkt->data;
  357. int input_buffer_size = avpkt->size;
  358. ALACContext *alac = avctx->priv_data;
  359. int channels;
  360. unsigned int outputsamples;
  361. int hassize;
  362. unsigned int readsamplesize;
  363. int isnotcompressed;
  364. uint8_t interlacing_shift;
  365. uint8_t interlacing_leftweight;
  366. /* short-circuit null buffers */
  367. if (!inbuffer || !input_buffer_size)
  368. return -1;
  369. init_get_bits(&alac->gb, inbuffer, input_buffer_size * 8);
  370. channels = get_bits(&alac->gb, 3) + 1;
  371. if (channels > MAX_CHANNELS) {
  372. av_log(avctx, AV_LOG_ERROR, "channels > %d not supported\n",
  373. MAX_CHANNELS);
  374. return -1;
  375. }
  376. /* 2^result = something to do with output waiting.
  377. * perhaps matters if we read > 1 frame in a pass?
  378. */
  379. skip_bits(&alac->gb, 4);
  380. skip_bits(&alac->gb, 12); /* unknown, skip 12 bits */
  381. /* the output sample size is stored soon */
  382. hassize = get_bits1(&alac->gb);
  383. alac->wasted_bits = get_bits(&alac->gb, 2) << 3;
  384. /* whether the frame is compressed */
  385. isnotcompressed = get_bits1(&alac->gb);
  386. if (hassize) {
  387. /* now read the number of samples as a 32bit integer */
  388. outputsamples = get_bits_long(&alac->gb, 32);
  389. if(outputsamples > alac->setinfo_max_samples_per_frame){
  390. av_log(avctx, AV_LOG_ERROR, "outputsamples %d > %d\n", outputsamples, alac->setinfo_max_samples_per_frame);
  391. return -1;
  392. }
  393. } else
  394. outputsamples = alac->setinfo_max_samples_per_frame;
  395. switch (alac->setinfo_sample_size) {
  396. case 16: avctx->sample_fmt = AV_SAMPLE_FMT_S16;
  397. alac->bytespersample = channels << 1;
  398. break;
  399. case 24: avctx->sample_fmt = AV_SAMPLE_FMT_S32;
  400. alac->bytespersample = channels << 2;
  401. break;
  402. default: av_log(avctx, AV_LOG_ERROR, "Sample depth %d is not supported.\n",
  403. alac->setinfo_sample_size);
  404. return -1;
  405. }
  406. if(outputsamples > *outputsize / alac->bytespersample){
  407. av_log(avctx, AV_LOG_ERROR, "sample buffer too small\n");
  408. return -1;
  409. }
  410. *outputsize = outputsamples * alac->bytespersample;
  411. readsamplesize = alac->setinfo_sample_size - (alac->wasted_bits) + channels - 1;
  412. if (readsamplesize > MIN_CACHE_BITS) {
  413. av_log(avctx, AV_LOG_ERROR, "readsamplesize too big (%d)\n", readsamplesize);
  414. return -1;
  415. }
  416. if (!isnotcompressed) {
  417. /* so it is compressed */
  418. int16_t predictor_coef_table[MAX_CHANNELS][32];
  419. int predictor_coef_num[MAX_CHANNELS];
  420. int prediction_type[MAX_CHANNELS];
  421. int prediction_quantitization[MAX_CHANNELS];
  422. int ricemodifier[MAX_CHANNELS];
  423. int i, chan;
  424. interlacing_shift = get_bits(&alac->gb, 8);
  425. interlacing_leftweight = get_bits(&alac->gb, 8);
  426. for (chan = 0; chan < channels; chan++) {
  427. prediction_type[chan] = get_bits(&alac->gb, 4);
  428. prediction_quantitization[chan] = get_bits(&alac->gb, 4);
  429. ricemodifier[chan] = get_bits(&alac->gb, 3);
  430. predictor_coef_num[chan] = get_bits(&alac->gb, 5);
  431. /* read the predictor table */
  432. for (i = 0; i < predictor_coef_num[chan]; i++)
  433. predictor_coef_table[chan][i] = (int16_t)get_bits(&alac->gb, 16);
  434. }
  435. if (alac->wasted_bits) {
  436. int i, ch;
  437. for (i = 0; i < outputsamples; i++) {
  438. for (ch = 0; ch < channels; ch++)
  439. alac->wasted_bits_buffer[ch][i] = get_bits(&alac->gb, alac->wasted_bits);
  440. }
  441. }
  442. for (chan = 0; chan < channels; chan++) {
  443. bastardized_rice_decompress(alac,
  444. alac->predicterror_buffer[chan],
  445. outputsamples,
  446. readsamplesize,
  447. alac->setinfo_rice_initialhistory,
  448. alac->setinfo_rice_kmodifier,
  449. ricemodifier[chan] * alac->setinfo_rice_historymult / 4,
  450. (1 << alac->setinfo_rice_kmodifier) - 1);
  451. if (prediction_type[chan] == 0) {
  452. /* adaptive fir */
  453. predictor_decompress_fir_adapt(alac->predicterror_buffer[chan],
  454. alac->outputsamples_buffer[chan],
  455. outputsamples,
  456. readsamplesize,
  457. predictor_coef_table[chan],
  458. predictor_coef_num[chan],
  459. prediction_quantitization[chan]);
  460. } else {
  461. av_log(avctx, AV_LOG_ERROR, "FIXME: unhandled prediction type: %i\n", prediction_type[chan]);
  462. /* I think the only other prediction type (or perhaps this is
  463. * just a boolean?) runs adaptive fir twice.. like:
  464. * predictor_decompress_fir_adapt(predictor_error, tempout, ...)
  465. * predictor_decompress_fir_adapt(predictor_error, outputsamples ...)
  466. * little strange..
  467. */
  468. }
  469. }
  470. } else {
  471. /* not compressed, easy case */
  472. int i, chan;
  473. if (alac->setinfo_sample_size <= 16) {
  474. for (i = 0; i < outputsamples; i++)
  475. for (chan = 0; chan < channels; chan++) {
  476. int32_t audiobits;
  477. audiobits = get_sbits_long(&alac->gb, alac->setinfo_sample_size);
  478. alac->outputsamples_buffer[chan][i] = audiobits;
  479. }
  480. } else {
  481. for (i = 0; i < outputsamples; i++) {
  482. for (chan = 0; chan < channels; chan++) {
  483. alac->outputsamples_buffer[chan][i] = get_bits(&alac->gb,
  484. alac->setinfo_sample_size);
  485. alac->outputsamples_buffer[chan][i] = sign_extend(alac->outputsamples_buffer[chan][i],
  486. alac->setinfo_sample_size);
  487. }
  488. }
  489. }
  490. alac->wasted_bits = 0;
  491. interlacing_shift = 0;
  492. interlacing_leftweight = 0;
  493. }
  494. if (get_bits(&alac->gb, 3) != 7)
  495. av_log(avctx, AV_LOG_ERROR, "Error : Wrong End Of Frame\n");
  496. switch(alac->setinfo_sample_size) {
  497. case 16:
  498. if (channels == 2) {
  499. reconstruct_stereo_16(alac->outputsamples_buffer,
  500. (int16_t*)outbuffer,
  501. alac->numchannels,
  502. outputsamples,
  503. interlacing_shift,
  504. interlacing_leftweight);
  505. } else {
  506. int i;
  507. for (i = 0; i < outputsamples; i++) {
  508. ((int16_t*)outbuffer)[i] = alac->outputsamples_buffer[0][i];
  509. }
  510. }
  511. break;
  512. case 24:
  513. if (channels == 2) {
  514. decorrelate_stereo_24(alac->outputsamples_buffer,
  515. outbuffer,
  516. alac->wasted_bits_buffer,
  517. alac->wasted_bits,
  518. alac->numchannels,
  519. outputsamples,
  520. interlacing_shift,
  521. interlacing_leftweight);
  522. } else {
  523. int i;
  524. for (i = 0; i < outputsamples; i++)
  525. ((int32_t *)outbuffer)[i] = alac->outputsamples_buffer[0][i] << 8;
  526. }
  527. break;
  528. }
  529. if (input_buffer_size * 8 - get_bits_count(&alac->gb) > 8)
  530. av_log(avctx, AV_LOG_ERROR, "Error : %d bits left\n", input_buffer_size * 8 - get_bits_count(&alac->gb));
  531. return input_buffer_size;
  532. }
  533. static av_cold int alac_decode_init(AVCodecContext * avctx)
  534. {
  535. ALACContext *alac = avctx->priv_data;
  536. alac->avctx = avctx;
  537. alac->numchannels = alac->avctx->channels;
  538. /* initialize from the extradata */
  539. if (alac->avctx->extradata_size != ALAC_EXTRADATA_SIZE) {
  540. av_log(avctx, AV_LOG_ERROR, "alac: expected %d extradata bytes\n",
  541. ALAC_EXTRADATA_SIZE);
  542. return -1;
  543. }
  544. if (alac_set_info(alac)) {
  545. av_log(avctx, AV_LOG_ERROR, "alac: set_info failed\n");
  546. return -1;
  547. }
  548. return 0;
  549. }
  550. static av_cold int alac_decode_close(AVCodecContext *avctx)
  551. {
  552. ALACContext *alac = avctx->priv_data;
  553. int chan;
  554. for (chan = 0; chan < MAX_CHANNELS; chan++) {
  555. av_freep(&alac->predicterror_buffer[chan]);
  556. av_freep(&alac->outputsamples_buffer[chan]);
  557. av_freep(&alac->wasted_bits_buffer[chan]);
  558. }
  559. return 0;
  560. }
  561. AVCodec ff_alac_decoder = {
  562. .name = "alac",
  563. .type = AVMEDIA_TYPE_AUDIO,
  564. .id = CODEC_ID_ALAC,
  565. .priv_data_size = sizeof(ALACContext),
  566. .init = alac_decode_init,
  567. .close = alac_decode_close,
  568. .decode = alac_decode_frame,
  569. .long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"),
  570. };