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.

850 lines
28KB

  1. /*
  2. * ALAC (Apple Lossless Audio Codec) decoder
  3. * Copyright (c) 2005 David Hammerton
  4. * All rights reserved.
  5. *
  6. * This library is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 2 of the License, or (at your option) any later version.
  10. *
  11. * This library is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public
  17. * License along with this library; if not, write to the Free Software
  18. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  19. */
  20. /**
  21. * @file alac.c
  22. * ALAC (Apple Lossless Audio Codec) decoder
  23. * @author 2005 David Hammerton
  24. *
  25. * For more information on the ALAC format, visit:
  26. * http://crazney.net/programs/itunes/alac.html
  27. *
  28. * Note: This decoder expects a 36- (0x24-)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. * bytes 0-3 atom size (0x24), big-endian
  32. * bytes 4-7 atom type ('alac', not the 'alac' tag from start of stsd)
  33. * bytes 8-35 data bytes needed by decoder
  34. *
  35. * Extradata:
  36. * 32bit size
  37. * 32bit tag (=alac)
  38. * 32bit zero?
  39. * 32bit max sample per frame
  40. * 8bit ?? (zero?)
  41. * 8bit sample size
  42. * 8bit history mult
  43. * 8bit initial history
  44. * 8bit kmodifier
  45. * 8bit channels?
  46. * 16bit ??
  47. * 32bit max coded frame size
  48. * 32bit bitrate?
  49. * 32bit samplerate
  50. */
  51. #include "avcodec.h"
  52. #include "bitstream.h"
  53. #define ALAC_EXTRADATA_SIZE 36
  54. typedef struct {
  55. AVCodecContext *avctx;
  56. GetBitContext gb;
  57. /* init to 0; first frame decode should initialize from extradata and
  58. * set this to 1 */
  59. int context_initialized;
  60. int samplesize;
  61. int numchannels;
  62. int bytespersample;
  63. /* buffers */
  64. int32_t *predicterror_buffer_a;
  65. int32_t *predicterror_buffer_b;
  66. int32_t *outputsamples_buffer_a;
  67. int32_t *outputsamples_buffer_b;
  68. /* stuff from setinfo */
  69. uint32_t setinfo_max_samples_per_frame; /* 0x1000 = 4096 */ /* max samples per frame? */
  70. uint8_t setinfo_7a; /* 0x00 */
  71. uint8_t setinfo_sample_size; /* 0x10 */
  72. uint8_t setinfo_rice_historymult; /* 0x28 */
  73. uint8_t setinfo_rice_initialhistory; /* 0x0a */
  74. uint8_t setinfo_rice_kmodifier; /* 0x0e */
  75. uint8_t setinfo_7f; /* 0x02 */
  76. uint16_t setinfo_80; /* 0x00ff */
  77. uint32_t setinfo_82; /* 0x000020e7 */
  78. uint32_t setinfo_86; /* 0x00069fe4 */
  79. uint32_t setinfo_8a_rate; /* 0x0000ac44 */
  80. /* end setinfo stuff */
  81. } ALACContext;
  82. static void allocate_buffers(ALACContext *alac)
  83. {
  84. alac->predicterror_buffer_a = av_malloc(alac->setinfo_max_samples_per_frame * 4);
  85. alac->predicterror_buffer_b = av_malloc(alac->setinfo_max_samples_per_frame * 4);
  86. alac->outputsamples_buffer_a = av_malloc(alac->setinfo_max_samples_per_frame * 4);
  87. alac->outputsamples_buffer_b = av_malloc(alac->setinfo_max_samples_per_frame * 4);
  88. }
  89. static void alac_set_info(ALACContext *alac)
  90. {
  91. unsigned char *ptr = alac->avctx->extradata;
  92. ptr += 4; /* size */
  93. ptr += 4; /* alac */
  94. ptr += 4; /* 0 ? */
  95. alac->setinfo_max_samples_per_frame = BE_32(ptr); /* buffer size / 2 ? */
  96. ptr += 4;
  97. alac->setinfo_7a = *ptr++;
  98. alac->setinfo_sample_size = *ptr++;
  99. alac->setinfo_rice_historymult = *ptr++;
  100. alac->setinfo_rice_initialhistory = *ptr++;
  101. alac->setinfo_rice_kmodifier = *ptr++;
  102. alac->setinfo_7f = *ptr++; // channels?
  103. alac->setinfo_80 = BE_16(ptr);
  104. ptr += 2;
  105. alac->setinfo_82 = BE_32(ptr); // max coded frame size
  106. ptr += 4;
  107. alac->setinfo_86 = BE_32(ptr); // bitrate ?
  108. ptr += 4;
  109. alac->setinfo_8a_rate = BE_32(ptr); // samplerate
  110. ptr += 4;
  111. allocate_buffers(alac);
  112. }
  113. /* hideously inefficient. could use a bitmask search,
  114. * alternatively bsr on x86,
  115. */
  116. static int count_leading_zeros(int32_t input)
  117. {
  118. int i = 0;
  119. while (!(0x80000000 & input) && i < 32) {
  120. i++;
  121. input = input << 1;
  122. }
  123. return i;
  124. }
  125. static void bastardized_rice_decompress(ALACContext *alac,
  126. int32_t *output_buffer,
  127. int output_size,
  128. int readsamplesize, /* arg_10 */
  129. int rice_initialhistory, /* arg424->b */
  130. int rice_kmodifier, /* arg424->d */
  131. int rice_historymult, /* arg424->c */
  132. int rice_kmodifier_mask /* arg424->e */
  133. )
  134. {
  135. int output_count;
  136. unsigned int history = rice_initialhistory;
  137. int sign_modifier = 0;
  138. for (output_count = 0; output_count < output_size; output_count++) {
  139. int32_t x = 0;
  140. int32_t x_modified;
  141. int32_t final_val;
  142. /* read x - number of 1s before 0 represent the rice */
  143. while (x <= 8 && get_bits1(&alac->gb)) {
  144. x++;
  145. }
  146. if (x > 8) { /* RICE THRESHOLD */
  147. /* use alternative encoding */
  148. int32_t value;
  149. value = get_bits(&alac->gb, readsamplesize);
  150. /* mask value to readsamplesize size */
  151. if (readsamplesize != 32)
  152. value &= (0xffffffff >> (32 - readsamplesize));
  153. x = value;
  154. } else {
  155. /* standard rice encoding */
  156. int extrabits;
  157. int k; /* size of extra bits */
  158. /* read k, that is bits as is */
  159. k = 31 - rice_kmodifier - count_leading_zeros((history >> 9) + 3);
  160. if (k < 0)
  161. k += rice_kmodifier;
  162. else
  163. k = rice_kmodifier;
  164. if (k != 1) {
  165. extrabits = show_bits(&alac->gb, k);
  166. /* multiply x by 2^k - 1, as part of their strange algorithm */
  167. x = (x << k) - x;
  168. if (extrabits > 1) {
  169. x += extrabits - 1;
  170. get_bits(&alac->gb, k);
  171. } else {
  172. get_bits(&alac->gb, k - 1);
  173. }
  174. }
  175. }
  176. x_modified = sign_modifier + x;
  177. final_val = (x_modified + 1) / 2;
  178. if (x_modified & 1) final_val *= -1;
  179. output_buffer[output_count] = final_val;
  180. sign_modifier = 0;
  181. /* now update the history */
  182. history += (x_modified * rice_historymult)
  183. - ((history * rice_historymult) >> 9);
  184. if (x_modified > 0xffff)
  185. history = 0xffff;
  186. /* special case: there may be compressed blocks of 0 */
  187. if ((history < 128) && (output_count+1 < output_size)) {
  188. int block_size;
  189. sign_modifier = 1;
  190. x = 0;
  191. while (x <= 8 && get_bits1(&alac->gb)) {
  192. x++;
  193. }
  194. if (x > 8) {
  195. block_size = get_bits(&alac->gb, 16);
  196. block_size &= 0xffff;
  197. } else {
  198. int k;
  199. int extrabits;
  200. k = count_leading_zeros(history) + ((history + 16) >> 6 /* / 64 */) - 24;
  201. extrabits = show_bits(&alac->gb, k);
  202. block_size = (((1 << k) - 1) & rice_kmodifier_mask) * x
  203. + extrabits - 1;
  204. if (extrabits < 2) {
  205. x = 1 - extrabits;
  206. block_size += x;
  207. get_bits(&alac->gb, k - 1);
  208. } else {
  209. get_bits(&alac->gb, k);
  210. }
  211. }
  212. if (block_size > 0) {
  213. memset(&output_buffer[output_count+1], 0, block_size * 4);
  214. output_count += block_size;
  215. }
  216. if (block_size > 0xffff)
  217. sign_modifier = 0;
  218. history = 0;
  219. }
  220. }
  221. }
  222. #define SIGN_EXTENDED32(val, bits) ((val << (32 - bits)) >> (32 - bits))
  223. #define SIGN_ONLY(v) \
  224. ((v < 0) ? (-1) : \
  225. ((v > 0) ? (1) : \
  226. (0)))
  227. static void predictor_decompress_fir_adapt(int32_t *error_buffer,
  228. int32_t *buffer_out,
  229. int output_size,
  230. int readsamplesize,
  231. int16_t *predictor_coef_table,
  232. int predictor_coef_num,
  233. int predictor_quantitization)
  234. {
  235. int i;
  236. /* first sample always copies */
  237. *buffer_out = *error_buffer;
  238. if (!predictor_coef_num) {
  239. if (output_size <= 1) return;
  240. memcpy(buffer_out+1, error_buffer+1, (output_size-1) * 4);
  241. return;
  242. }
  243. if (predictor_coef_num == 0x1f) { /* 11111 - max value of predictor_coef_num */
  244. /* second-best case scenario for fir decompression,
  245. * error describes a small difference from the previous sample only
  246. */
  247. if (output_size <= 1) return;
  248. for (i = 0; i < output_size - 1; i++) {
  249. int32_t prev_value;
  250. int32_t error_value;
  251. prev_value = buffer_out[i];
  252. error_value = error_buffer[i+1];
  253. buffer_out[i+1] = SIGN_EXTENDED32((prev_value + error_value), readsamplesize);
  254. }
  255. return;
  256. }
  257. /* read warm-up samples */
  258. if (predictor_coef_num > 0) {
  259. int i;
  260. for (i = 0; i < predictor_coef_num; i++) {
  261. int32_t val;
  262. val = buffer_out[i] + error_buffer[i+1];
  263. val = SIGN_EXTENDED32(val, readsamplesize);
  264. buffer_out[i+1] = val;
  265. }
  266. }
  267. #if 0
  268. /* 4 and 8 are very common cases (the only ones i've seen). these
  269. * should be unrolled and optimised
  270. */
  271. if (predictor_coef_num == 4) {
  272. /* FIXME: optimised general case */
  273. return;
  274. }
  275. if (predictor_coef_table == 8) {
  276. /* FIXME: optimised general case */
  277. return;
  278. }
  279. #endif
  280. /* general case */
  281. if (predictor_coef_num > 0) {
  282. for (i = predictor_coef_num + 1;
  283. i < output_size;
  284. i++) {
  285. int j;
  286. int sum = 0;
  287. int outval;
  288. int error_val = error_buffer[i];
  289. for (j = 0; j < predictor_coef_num; j++) {
  290. sum += (buffer_out[predictor_coef_num-j] - buffer_out[0]) *
  291. predictor_coef_table[j];
  292. }
  293. outval = (1 << (predictor_quantitization-1)) + sum;
  294. outval = outval >> predictor_quantitization;
  295. outval = outval + buffer_out[0] + error_val;
  296. outval = SIGN_EXTENDED32(outval, readsamplesize);
  297. buffer_out[predictor_coef_num+1] = outval;
  298. if (error_val > 0) {
  299. int predictor_num = predictor_coef_num - 1;
  300. while (predictor_num >= 0 && error_val > 0) {
  301. int val = buffer_out[0] - buffer_out[predictor_coef_num - predictor_num];
  302. int sign = SIGN_ONLY(val);
  303. predictor_coef_table[predictor_num] -= sign;
  304. val *= sign; /* absolute value */
  305. error_val -= ((val >> predictor_quantitization) *
  306. (predictor_coef_num - predictor_num));
  307. predictor_num--;
  308. }
  309. } else if (error_val < 0) {
  310. int predictor_num = predictor_coef_num - 1;
  311. while (predictor_num >= 0 && error_val < 0) {
  312. int val = buffer_out[0] - buffer_out[predictor_coef_num - predictor_num];
  313. int sign = - SIGN_ONLY(val);
  314. predictor_coef_table[predictor_num] -= sign;
  315. val *= sign; /* neg value */
  316. error_val -= ((val >> predictor_quantitization) *
  317. (predictor_coef_num - predictor_num));
  318. predictor_num--;
  319. }
  320. }
  321. buffer_out++;
  322. }
  323. }
  324. }
  325. void deinterlace_16(int32_t *buffer_a, int32_t *buffer_b,
  326. int16_t *buffer_out,
  327. int numchannels, int numsamples,
  328. uint8_t interlacing_shift,
  329. uint8_t interlacing_leftweight)
  330. {
  331. int i;
  332. if (numsamples <= 0) return;
  333. /* weighted interlacing */
  334. if (interlacing_leftweight) {
  335. for (i = 0; i < numsamples; i++) {
  336. int32_t difference, midright;
  337. int16_t left;
  338. int16_t right;
  339. midright = buffer_a[i];
  340. difference = buffer_b[i];
  341. right = midright - ((difference * interlacing_leftweight) >> interlacing_shift);
  342. left = (midright - ((difference * interlacing_leftweight) >> interlacing_shift))
  343. + difference;
  344. buffer_out[i*numchannels] = left;
  345. buffer_out[i*numchannels + 1] = right;
  346. }
  347. return;
  348. }
  349. /* otherwise basic interlacing took place */
  350. for (i = 0; i < numsamples; i++) {
  351. int16_t left, right;
  352. left = buffer_a[i];
  353. right = buffer_b[i];
  354. buffer_out[i*numchannels] = left;
  355. buffer_out[i*numchannels + 1] = right;
  356. }
  357. }
  358. static int alac_decode_frame(AVCodecContext *avctx,
  359. void *outbuffer, int *outputsize,
  360. uint8_t *inbuffer, int input_buffer_size)
  361. {
  362. ALACContext *alac = avctx->priv_data;
  363. int channels;
  364. int32_t outputsamples;
  365. /* short-circuit null buffers */
  366. if (!inbuffer || !input_buffer_size)
  367. return input_buffer_size;
  368. /* initialize from the extradata */
  369. if (!alac->context_initialized) {
  370. if (alac->avctx->extradata_size != ALAC_EXTRADATA_SIZE) {
  371. av_log(avctx, AV_LOG_ERROR, "alac: expected %d extradata bytes\n",
  372. ALAC_EXTRADATA_SIZE);
  373. return input_buffer_size;
  374. }
  375. alac_set_info(alac);
  376. alac->context_initialized = 1;
  377. }
  378. outputsamples = alac->setinfo_max_samples_per_frame;
  379. init_get_bits(&alac->gb, inbuffer, input_buffer_size * 8);
  380. channels = get_bits(&alac->gb, 3);
  381. *outputsize = outputsamples * alac->bytespersample;
  382. switch(channels) {
  383. case 0: { /* 1 channel */
  384. int hassize;
  385. int isnotcompressed;
  386. int readsamplesize;
  387. int wasted_bytes;
  388. int ricemodifier;
  389. /* 2^result = something to do with output waiting.
  390. * perhaps matters if we read > 1 frame in a pass?
  391. */
  392. get_bits(&alac->gb, 4);
  393. get_bits(&alac->gb, 12); /* unknown, skip 12 bits */
  394. hassize = get_bits(&alac->gb, 1); /* the output sample size is stored soon */
  395. wasted_bytes = get_bits(&alac->gb, 2); /* unknown ? */
  396. isnotcompressed = get_bits(&alac->gb, 1); /* whether the frame is compressed */
  397. if (hassize) {
  398. /* now read the number of samples,
  399. * as a 32bit integer */
  400. outputsamples = get_bits(&alac->gb, 32);
  401. *outputsize = outputsamples * alac->bytespersample;
  402. }
  403. readsamplesize = alac->setinfo_sample_size - (wasted_bytes * 8);
  404. if (!isnotcompressed) {
  405. /* so it is compressed */
  406. int16_t predictor_coef_table[32];
  407. int predictor_coef_num;
  408. int prediction_type;
  409. int prediction_quantitization;
  410. int i;
  411. /* FIXME: skip 16 bits, not sure what they are. seem to be used in
  412. * two channel case */
  413. get_bits(&alac->gb, 8);
  414. get_bits(&alac->gb, 8);
  415. prediction_type = get_bits(&alac->gb, 4);
  416. prediction_quantitization = get_bits(&alac->gb, 4);
  417. ricemodifier = get_bits(&alac->gb, 3);
  418. predictor_coef_num = get_bits(&alac->gb, 5);
  419. /* read the predictor table */
  420. for (i = 0; i < predictor_coef_num; i++) {
  421. predictor_coef_table[i] = (int16_t)get_bits(&alac->gb, 16);
  422. }
  423. if (wasted_bytes) {
  424. /* these bytes seem to have something to do with
  425. * > 2 channel files.
  426. */
  427. av_log(avctx, AV_LOG_ERROR, "FIXME: unimplemented, unhandling of wasted_bytes\n");
  428. }
  429. bastardized_rice_decompress(alac,
  430. alac->predicterror_buffer_a,
  431. outputsamples,
  432. readsamplesize,
  433. alac->setinfo_rice_initialhistory,
  434. alac->setinfo_rice_kmodifier,
  435. ricemodifier * alac->setinfo_rice_historymult / 4,
  436. (1 << alac->setinfo_rice_kmodifier) - 1);
  437. if (prediction_type == 0) {
  438. /* adaptive fir */
  439. predictor_decompress_fir_adapt(alac->predicterror_buffer_a,
  440. alac->outputsamples_buffer_a,
  441. outputsamples,
  442. readsamplesize,
  443. predictor_coef_table,
  444. predictor_coef_num,
  445. prediction_quantitization);
  446. } else {
  447. av_log(avctx, AV_LOG_ERROR, "FIXME: unhandled prediction type: %i\n", prediction_type);
  448. /* i think the only other prediction type (or perhaps this is just a
  449. * boolean?) runs adaptive fir twice.. like:
  450. * predictor_decompress_fir_adapt(predictor_error, tempout, ...)
  451. * predictor_decompress_fir_adapt(predictor_error, outputsamples ...)
  452. * little strange..
  453. */
  454. }
  455. } else {
  456. /* not compressed, easy case */
  457. if (readsamplesize <= 16) {
  458. int i;
  459. for (i = 0; i < outputsamples; i++) {
  460. int32_t audiobits = get_bits(&alac->gb, readsamplesize);
  461. audiobits = SIGN_EXTENDED32(audiobits, readsamplesize);
  462. alac->outputsamples_buffer_a[i] = audiobits;
  463. }
  464. } else {
  465. int i;
  466. for (i = 0; i < outputsamples; i++) {
  467. int32_t audiobits;
  468. audiobits = get_bits(&alac->gb, 16);
  469. /* special case of sign extension..
  470. * as we'll be ORing the low 16bits into this */
  471. audiobits = audiobits << 16;
  472. audiobits = audiobits >> (32 - readsamplesize);
  473. audiobits |= get_bits(&alac->gb, readsamplesize - 16);
  474. alac->outputsamples_buffer_a[i] = audiobits;
  475. }
  476. }
  477. /* wasted_bytes = 0; // unused */
  478. }
  479. switch(alac->setinfo_sample_size) {
  480. case 16: {
  481. int i;
  482. for (i = 0; i < outputsamples; i++) {
  483. int16_t sample = alac->outputsamples_buffer_a[i];
  484. sample = be2me_16(sample);
  485. ((int16_t*)outbuffer)[i * alac->numchannels] = sample;
  486. }
  487. break;
  488. }
  489. case 20:
  490. case 24:
  491. case 32:
  492. av_log(avctx, AV_LOG_ERROR, "FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size);
  493. break;
  494. default:
  495. break;
  496. }
  497. break;
  498. }
  499. case 1: { /* 2 channels */
  500. int hassize;
  501. int isnotcompressed;
  502. int readsamplesize;
  503. int wasted_bytes;
  504. uint8_t interlacing_shift;
  505. uint8_t interlacing_leftweight;
  506. /* 2^result = something to do with output waiting.
  507. * perhaps matters if we read > 1 frame in a pass?
  508. */
  509. get_bits(&alac->gb, 4);
  510. get_bits(&alac->gb, 12); /* unknown, skip 12 bits */
  511. hassize = get_bits(&alac->gb, 1); /* the output sample size is stored soon */
  512. wasted_bytes = get_bits(&alac->gb, 2); /* unknown ? */
  513. isnotcompressed = get_bits(&alac->gb, 1); /* whether the frame is compressed */
  514. if (hassize) {
  515. /* now read the number of samples,
  516. * as a 32bit integer */
  517. outputsamples = get_bits(&alac->gb, 32);
  518. *outputsize = outputsamples * alac->bytespersample;
  519. }
  520. readsamplesize = alac->setinfo_sample_size - (wasted_bytes * 8) + 1;
  521. if (!isnotcompressed) {
  522. /* compressed */
  523. int16_t predictor_coef_table_a[32];
  524. int predictor_coef_num_a;
  525. int prediction_type_a;
  526. int prediction_quantitization_a;
  527. int ricemodifier_a;
  528. int16_t predictor_coef_table_b[32];
  529. int predictor_coef_num_b;
  530. int prediction_type_b;
  531. int prediction_quantitization_b;
  532. int ricemodifier_b;
  533. int i;
  534. interlacing_shift = get_bits(&alac->gb, 8);
  535. interlacing_leftweight = get_bits(&alac->gb, 8);
  536. /******** channel 1 ***********/
  537. prediction_type_a = get_bits(&alac->gb, 4);
  538. prediction_quantitization_a = get_bits(&alac->gb, 4);
  539. ricemodifier_a = get_bits(&alac->gb, 3);
  540. predictor_coef_num_a = get_bits(&alac->gb, 5);
  541. /* read the predictor table */
  542. for (i = 0; i < predictor_coef_num_a; i++) {
  543. predictor_coef_table_a[i] = (int16_t)get_bits(&alac->gb, 16);
  544. }
  545. /******** channel 2 *********/
  546. prediction_type_b = get_bits(&alac->gb, 4);
  547. prediction_quantitization_b = get_bits(&alac->gb, 4);
  548. ricemodifier_b = get_bits(&alac->gb, 3);
  549. predictor_coef_num_b = get_bits(&alac->gb, 5);
  550. /* read the predictor table */
  551. for (i = 0; i < predictor_coef_num_b; i++) {
  552. predictor_coef_table_b[i] = (int16_t)get_bits(&alac->gb, 16);
  553. }
  554. /*********************/
  555. if (wasted_bytes) {
  556. /* see mono case */
  557. av_log(avctx, AV_LOG_ERROR, "FIXME: unimplemented, unhandling of wasted_bytes\n");
  558. }
  559. /* channel 1 */
  560. bastardized_rice_decompress(alac,
  561. alac->predicterror_buffer_a,
  562. outputsamples,
  563. readsamplesize,
  564. alac->setinfo_rice_initialhistory,
  565. alac->setinfo_rice_kmodifier,
  566. ricemodifier_a * alac->setinfo_rice_historymult / 4,
  567. (1 << alac->setinfo_rice_kmodifier) - 1);
  568. if (prediction_type_a == 0) {
  569. /* adaptive fir */
  570. predictor_decompress_fir_adapt(alac->predicterror_buffer_a,
  571. alac->outputsamples_buffer_a,
  572. outputsamples,
  573. readsamplesize,
  574. predictor_coef_table_a,
  575. predictor_coef_num_a,
  576. prediction_quantitization_a);
  577. } else {
  578. /* see mono case */
  579. av_log(avctx, AV_LOG_ERROR, "FIXME: unhandled prediction type: %i\n", prediction_type_a);
  580. }
  581. /* channel 2 */
  582. bastardized_rice_decompress(alac,
  583. alac->predicterror_buffer_b,
  584. outputsamples,
  585. readsamplesize,
  586. alac->setinfo_rice_initialhistory,
  587. alac->setinfo_rice_kmodifier,
  588. ricemodifier_b * alac->setinfo_rice_historymult / 4,
  589. (1 << alac->setinfo_rice_kmodifier) - 1);
  590. if (prediction_type_b == 0) {
  591. /* adaptive fir */
  592. predictor_decompress_fir_adapt(alac->predicterror_buffer_b,
  593. alac->outputsamples_buffer_b,
  594. outputsamples,
  595. readsamplesize,
  596. predictor_coef_table_b,
  597. predictor_coef_num_b,
  598. prediction_quantitization_b);
  599. } else {
  600. av_log(avctx, AV_LOG_ERROR, "FIXME: unhandled prediction type: %i\n", prediction_type_b);
  601. }
  602. } else {
  603. /* not compressed, easy case */
  604. if (alac->setinfo_sample_size <= 16) {
  605. int i;
  606. for (i = 0; i < outputsamples; i++) {
  607. int32_t audiobits_a, audiobits_b;
  608. audiobits_a = get_bits(&alac->gb, alac->setinfo_sample_size);
  609. audiobits_b = get_bits(&alac->gb, alac->setinfo_sample_size);
  610. audiobits_a = SIGN_EXTENDED32(audiobits_a, alac->setinfo_sample_size);
  611. audiobits_b = SIGN_EXTENDED32(audiobits_b, alac->setinfo_sample_size);
  612. alac->outputsamples_buffer_a[i] = audiobits_a;
  613. alac->outputsamples_buffer_b[i] = audiobits_b;
  614. }
  615. } else {
  616. int i;
  617. for (i = 0; i < outputsamples; i++) {
  618. int32_t audiobits_a, audiobits_b;
  619. audiobits_a = get_bits(&alac->gb, 16);
  620. audiobits_a = audiobits_a << 16;
  621. audiobits_a = audiobits_a >> (32 - alac->setinfo_sample_size);
  622. audiobits_a |= get_bits(&alac->gb, alac->setinfo_sample_size - 16);
  623. audiobits_b = get_bits(&alac->gb, 16);
  624. audiobits_b = audiobits_b << 16;
  625. audiobits_b = audiobits_b >> (32 - alac->setinfo_sample_size);
  626. audiobits_b |= get_bits(&alac->gb, alac->setinfo_sample_size - 16);
  627. alac->outputsamples_buffer_a[i] = audiobits_a;
  628. alac->outputsamples_buffer_b[i] = audiobits_b;
  629. }
  630. }
  631. /* wasted_bytes = 0; */
  632. interlacing_shift = 0;
  633. interlacing_leftweight = 0;
  634. }
  635. switch(alac->setinfo_sample_size) {
  636. case 16: {
  637. deinterlace_16(alac->outputsamples_buffer_a,
  638. alac->outputsamples_buffer_b,
  639. (int16_t*)outbuffer,
  640. alac->numchannels,
  641. outputsamples,
  642. interlacing_shift,
  643. interlacing_leftweight);
  644. break;
  645. }
  646. case 20:
  647. case 24:
  648. case 32:
  649. av_log(avctx, AV_LOG_ERROR, "FIXME: unimplemented sample size %i\n", alac->setinfo_sample_size);
  650. break;
  651. default:
  652. break;
  653. }
  654. break;
  655. }
  656. }
  657. return input_buffer_size;
  658. }
  659. static int alac_decode_init(AVCodecContext * avctx)
  660. {
  661. ALACContext *alac = avctx->priv_data;
  662. alac->avctx = avctx;
  663. alac->context_initialized = 0;
  664. alac->samplesize = alac->avctx->bits_per_sample;
  665. alac->numchannels = alac->avctx->channels;
  666. alac->bytespersample = (alac->samplesize / 8) * alac->numchannels;
  667. return 0;
  668. }
  669. static int alac_decode_close(AVCodecContext *avctx)
  670. {
  671. ALACContext *alac = avctx->priv_data;
  672. av_free(alac->predicterror_buffer_a);
  673. av_free(alac->predicterror_buffer_b);
  674. av_free(alac->outputsamples_buffer_a);
  675. av_free(alac->outputsamples_buffer_b);
  676. return 0;
  677. }
  678. AVCodec alac_decoder = {
  679. "alac",
  680. CODEC_TYPE_AUDIO,
  681. CODEC_ID_ALAC,
  682. sizeof(ALACContext),
  683. alac_decode_init,
  684. NULL,
  685. alac_decode_close,
  686. alac_decode_frame,
  687. };