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.

616 lines
15KB

  1. /*
  2. * Interplay ACM decoder
  3. *
  4. * Copyright (c) 2004-2008 Marko Kreen
  5. * Copyright (c) 2008 Adam Gashlin
  6. * Copyright (c) 2015 Paul B Mahol
  7. *
  8. * Permission to use, copy, modify, and distribute this software for any
  9. * purpose with or without fee is hereby granted, provided that the above
  10. * copyright notice and this permission notice appear in all copies.
  11. *
  12. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  13. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  14. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  15. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  16. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  17. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  18. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  19. */
  20. #include "libavutil/intreadwrite.h"
  21. #include "avcodec.h"
  22. #define BITSTREAM_READER_LE
  23. #include "get_bits.h"
  24. #include "internal.h"
  25. static const int8_t map_1bit[] = { -1, +1 };
  26. static const int8_t map_2bit_near[] = { -2, -1, +1, +2 };
  27. static const int8_t map_2bit_far[] = { -3, -2, +2, +3 };
  28. static const int8_t map_3bit[] = { -4, -3, -2, -1, +1, +2, +3, +4 };
  29. static int mul_3x3 [3 * 3 * 3];
  30. static int mul_3x5 [5 * 5 * 5];
  31. static int mul_2x11[11 * 11];
  32. typedef struct InterplayACMContext {
  33. GetBitContext gb;
  34. uint8_t *bitstream;
  35. int max_framesize;
  36. int bitstream_size;
  37. int bitstream_index;
  38. int level;
  39. int rows;
  40. int cols;
  41. int wrapbuf_len;
  42. int block_len;
  43. int skip;
  44. int *block;
  45. int *wrapbuf;
  46. int *ampbuf;
  47. int *midbuf;
  48. } InterplayACMContext;
  49. static av_cold int decode_init(AVCodecContext *avctx)
  50. {
  51. InterplayACMContext *s = avctx->priv_data;
  52. int x1, x2, x3;
  53. if (avctx->extradata_size < 14)
  54. return AVERROR_INVALIDDATA;
  55. s->level = AV_RL16(avctx->extradata + 12) & 0xf;
  56. s->rows = AV_RL16(avctx->extradata + 12) >> 4;
  57. s->cols = 1 << s->level;
  58. s->wrapbuf_len = 2 * s->cols - 2;
  59. s->block_len = s->rows * s->cols;
  60. s->max_framesize = s->block_len;
  61. s->block = av_calloc(s->block_len, sizeof(int));
  62. s->wrapbuf = av_calloc(s->wrapbuf_len, sizeof(int));
  63. s->ampbuf = av_calloc(0x10000, sizeof(int));
  64. s->bitstream = av_calloc(s->max_framesize, sizeof(*s->bitstream));
  65. if (!s->block || !s->wrapbuf || !s->ampbuf || !s->bitstream)
  66. return AVERROR(ENOMEM);
  67. s->midbuf = s->ampbuf + 0x8000;
  68. avctx->sample_fmt = AV_SAMPLE_FMT_S16;
  69. for (x3 = 0; x3 < 3; x3++)
  70. for (x2 = 0; x2 < 3; x2++)
  71. for (x1 = 0; x1 < 3; x1++)
  72. mul_3x3[x1 + x2 * 3 + x3* 3 * 3] = x1 + (x2 << 4) + (x3 << 8);
  73. for (x3 = 0; x3 < 5; x3++)
  74. for (x2 = 0; x2 < 5; x2++)
  75. for (x1 = 0; x1 < 5; x1++)
  76. mul_3x5[x1 + x2 * 5 + x3 * 5 * 5] = x1 + (x2 << 4) + (x3 << 8);
  77. for (x2 = 0; x2 < 11; x2++)
  78. for (x1 = 0; x1 < 11; x1++)
  79. mul_2x11[x1 + x2 * 11] = x1 + (x2 << 4);
  80. return 0;
  81. }
  82. #define set_pos(s, r, c, idx) do { \
  83. unsigned pos = ((r) << s->level) + (c); \
  84. s->block[pos] = s->midbuf[(idx)]; \
  85. } while (0)
  86. static int zero(InterplayACMContext *s, unsigned ind, unsigned col)
  87. {
  88. unsigned i;
  89. for (i = 0; i < s->rows; i++)
  90. set_pos(s, i, col, 0);
  91. return 0;
  92. }
  93. static int bad(InterplayACMContext *s, unsigned ind, unsigned col)
  94. {
  95. return AVERROR_INVALIDDATA;
  96. }
  97. static int linear(InterplayACMContext *s, unsigned ind, unsigned col)
  98. {
  99. GetBitContext *gb = &s->gb;
  100. unsigned int i;
  101. int b, middle = 1 << (ind - 1);
  102. for (i = 0; i < s->rows; i++) {
  103. b = get_bits(gb, ind);
  104. set_pos(s, i, col, b - middle);
  105. }
  106. return 0;
  107. }
  108. static int k13(InterplayACMContext *s, unsigned ind, unsigned col)
  109. {
  110. GetBitContext *gb = &s->gb;
  111. unsigned i, b;
  112. for (i = 0; i < s->rows; i++) {
  113. b = get_bits1(gb);
  114. if (b == 0) {
  115. set_pos(s, i++, col, 0);
  116. if (i >= s->rows)
  117. break;
  118. set_pos(s, i, col, 0);
  119. continue;
  120. }
  121. b = get_bits1(gb);
  122. if (b == 0) {
  123. set_pos(s, i, col, 0);
  124. continue;
  125. }
  126. b = get_bits1(gb);
  127. set_pos(s, i, col, map_1bit[b]);
  128. }
  129. return 0;
  130. }
  131. static int k12(InterplayACMContext *s, unsigned ind, unsigned col)
  132. {
  133. GetBitContext *gb = &s->gb;
  134. unsigned i, b;
  135. for (i = 0; i < s->rows; i++) {
  136. b = get_bits1(gb);
  137. if (b == 0) {
  138. set_pos(s, i, col, 0);
  139. continue;
  140. }
  141. b = get_bits1(gb);
  142. set_pos(s, i, col, map_1bit[b]);
  143. }
  144. return 0;
  145. }
  146. static int k24(InterplayACMContext *s, unsigned ind, unsigned col)
  147. {
  148. GetBitContext *gb = &s->gb;
  149. unsigned i, b;
  150. for (i = 0; i < s->rows; i++) {
  151. b = get_bits1(gb);
  152. if (b == 0) {
  153. set_pos(s, i++, col, 0);
  154. if (i >= s->rows) break;
  155. set_pos(s, i, col, 0);
  156. continue;
  157. }
  158. b = get_bits1(gb);
  159. if (b == 0) {
  160. set_pos(s, i, col, 0);
  161. continue;
  162. }
  163. b = get_bits(gb, 2);
  164. set_pos(s, i, col, map_2bit_near[b]);
  165. }
  166. return 0;
  167. }
  168. static int k23(InterplayACMContext *s, unsigned ind, unsigned col)
  169. {
  170. GetBitContext *gb = &s->gb;
  171. unsigned i, b;
  172. for (i = 0; i < s->rows; i++) {
  173. b = get_bits1(gb);
  174. if (b == 0) {
  175. set_pos(s, i, col, 0);
  176. continue;
  177. }
  178. b = get_bits(gb, 2);
  179. set_pos(s, i, col, map_2bit_near[b]);
  180. }
  181. return 0;
  182. }
  183. static int k35(InterplayACMContext *s, unsigned ind, unsigned col)
  184. {
  185. GetBitContext *gb = &s->gb;
  186. unsigned i, b;
  187. for (i = 0; i < s->rows; i++) {
  188. b = get_bits1(gb);
  189. if (b == 0) {
  190. set_pos(s, i++, col, 0);
  191. if (i >= s->rows)
  192. break;
  193. set_pos(s, i, col, 0);
  194. continue;
  195. }
  196. b = get_bits1(gb);
  197. if (b == 0) {
  198. set_pos(s, i, col, 0);
  199. continue;
  200. }
  201. b = get_bits1(gb);
  202. if (b == 0) {
  203. b = get_bits1(gb);
  204. set_pos(s, i, col, map_1bit[b]);
  205. continue;
  206. }
  207. b = get_bits(gb, 2);
  208. set_pos(s, i, col, map_2bit_far[b]);
  209. }
  210. return 0;
  211. }
  212. static int k34(InterplayACMContext *s, unsigned ind, unsigned col)
  213. {
  214. GetBitContext *gb = &s->gb;
  215. unsigned i, b;
  216. for (i = 0; i < s->rows; i++) {
  217. b = get_bits1(gb);
  218. if (b == 0) {
  219. set_pos(s, i, col, 0);
  220. continue;
  221. }
  222. b = get_bits1(gb);
  223. if (b == 0) {
  224. b = get_bits1(gb);
  225. set_pos(s, i, col, map_1bit[b]);
  226. continue;
  227. }
  228. b = get_bits(gb, 2);
  229. set_pos(s, i, col, map_2bit_far[b]);
  230. }
  231. return 0;
  232. }
  233. static int k45(InterplayACMContext *s, unsigned ind, unsigned col)
  234. {
  235. GetBitContext *gb = &s->gb;
  236. unsigned i, b;
  237. for (i = 0; i < s->rows; i++) {
  238. b = get_bits1(gb);
  239. if (b == 0) {
  240. set_pos(s, i, col, 0); i++;
  241. if (i >= s->rows)
  242. break;
  243. set_pos(s, i, col, 0);
  244. continue;
  245. }
  246. b = get_bits1(gb);
  247. if (b == 0) {
  248. set_pos(s, i, col, 0);
  249. continue;
  250. }
  251. b = get_bits(gb, 3);
  252. set_pos(s, i, col, map_3bit[b]);
  253. }
  254. return 0;
  255. }
  256. static int k44(InterplayACMContext *s, unsigned ind, unsigned col)
  257. {
  258. GetBitContext *gb = &s->gb;
  259. unsigned i, b;
  260. for (i = 0; i < s->rows; i++) {
  261. b = get_bits1(gb);
  262. if (b == 0) {
  263. set_pos(s, i, col, 0);
  264. continue;
  265. }
  266. b = get_bits(gb, 3);
  267. set_pos(s, i, col, map_3bit[b]);
  268. }
  269. return 0;
  270. }
  271. static int t15(InterplayACMContext *s, unsigned ind, unsigned col)
  272. {
  273. GetBitContext *gb = &s->gb;
  274. unsigned i, b;
  275. int n1, n2, n3;
  276. for (i = 0; i < s->rows; i++) {
  277. /* b = (x1) + (x2 * 3) + (x3 * 9) */
  278. b = get_bits(gb, 5);
  279. n1 = (mul_3x3[b] & 0x0F) - 1;
  280. n2 = ((mul_3x3[b] >> 4) & 0x0F) - 1;
  281. n3 = ((mul_3x3[b] >> 8) & 0x0F) - 1;
  282. set_pos(s, i++, col, n1);
  283. if (i >= s->rows)
  284. break;
  285. set_pos(s, i++, col, n2);
  286. if (i >= s->rows)
  287. break;
  288. set_pos(s, i, col, n3);
  289. }
  290. return 0;
  291. }
  292. static int t27(InterplayACMContext *s, unsigned ind, unsigned col)
  293. {
  294. GetBitContext *gb = &s->gb;
  295. unsigned i, b;
  296. int n1, n2, n3;
  297. for (i = 0; i < s->rows; i++) {
  298. /* b = (x1) + (x2 * 5) + (x3 * 25) */
  299. b = get_bits(gb, 7);
  300. n1 = (mul_3x5[b] & 0x0F) - 2;
  301. n2 = ((mul_3x5[b] >> 4) & 0x0F) - 2;
  302. n3 = ((mul_3x5[b] >> 8) & 0x0F) - 2;
  303. set_pos(s, i++, col, n1);
  304. if (i >= s->rows)
  305. break;
  306. set_pos(s, i++, col, n2);
  307. if (i >= s->rows)
  308. break;
  309. set_pos(s, i, col, n3);
  310. }
  311. return 0;
  312. }
  313. static int t37(InterplayACMContext *s, unsigned ind, unsigned col)
  314. {
  315. GetBitContext *gb = &s->gb;
  316. unsigned i, b;
  317. int n1, n2;
  318. for (i = 0; i < s->rows; i++) {
  319. /* b = (x1) + (x2 * 11) */
  320. b = get_bits(gb, 7);
  321. n1 = (mul_2x11[b] & 0x0F) - 5;
  322. n2 = ((mul_2x11[b] >> 4) & 0x0F) - 5;
  323. set_pos(s, i++, col, n1);
  324. if (i >= s->rows)
  325. break;
  326. set_pos(s, i, col, n2);
  327. }
  328. return 0;
  329. }
  330. typedef int (*filler)(InterplayACMContext *s, unsigned ind, unsigned col);
  331. static const filler filler_list[] = {
  332. zero, bad, bad, linear,
  333. linear, linear, linear, linear,
  334. linear, linear, linear, linear,
  335. linear, linear, linear, linear,
  336. linear, k13, k12, t15,
  337. k24, k23, t27, k35,
  338. k34, bad, k45, k44,
  339. bad, t37, bad, bad,
  340. };
  341. static int fill_block(InterplayACMContext *s)
  342. {
  343. GetBitContext *gb = &s->gb;
  344. unsigned i, ind;
  345. int ret;
  346. for (i = 0; i < s->cols; i++) {
  347. ind = get_bits(gb, 5);
  348. ret = filler_list[ind](s, ind, i);
  349. if (ret < 0)
  350. return ret;
  351. }
  352. return 0;
  353. }
  354. static void juggle(int *wrap_p, int *block_p, unsigned sub_len, unsigned sub_count)
  355. {
  356. unsigned i, j;
  357. int *p, r0, r1, r2, r3;
  358. for (i = 0; i < sub_len; i++) {
  359. p = block_p;
  360. r0 = wrap_p[0];
  361. r1 = wrap_p[1];
  362. for (j = 0; j < sub_count/2; j++) {
  363. r2 = *p;
  364. *p = r1 * 2 + (r0 + r2);
  365. p += sub_len;
  366. r3 = *p;
  367. *p = r2 * 2 - (r1 + r3);
  368. p += sub_len;
  369. r0 = r2;
  370. r1 = r3;
  371. }
  372. *wrap_p++ = r0;
  373. *wrap_p++ = r1;
  374. block_p++;
  375. }
  376. }
  377. static void juggle_block(InterplayACMContext *s)
  378. {
  379. unsigned sub_count, sub_len, todo_count, step_subcount, i;
  380. int *wrap_p, *block_p, *p;
  381. /* juggle only if subblock_len > 1 */
  382. if (s->level == 0)
  383. return;
  384. /* 2048 / subblock_len */
  385. if (s->level > 9)
  386. step_subcount = 1;
  387. else
  388. step_subcount = (2048 >> s->level) - 2;
  389. /* Apply juggle() (rows)x(cols)
  390. * from (step_subcount * 2) x (subblock_len/2)
  391. * to (step_subcount * subblock_len) x (1)
  392. */
  393. todo_count = s->rows;
  394. block_p = s->block;
  395. while (1) {
  396. wrap_p = s->wrapbuf;
  397. sub_count = step_subcount;
  398. if (sub_count > todo_count)
  399. sub_count = todo_count;
  400. sub_len = s->cols / 2;
  401. sub_count *= 2;
  402. juggle(wrap_p, block_p, sub_len, sub_count);
  403. wrap_p += sub_len * 2;
  404. for (i = 0, p = block_p; i < sub_count; i++) {
  405. p[0]++;
  406. p += sub_len;
  407. }
  408. while (sub_len > 1) {
  409. sub_len /= 2;
  410. sub_count *= 2;
  411. juggle(wrap_p, block_p, sub_len, sub_count);
  412. wrap_p += sub_len * 2;
  413. }
  414. if (todo_count <= step_subcount)
  415. break;
  416. todo_count -= step_subcount;
  417. block_p += step_subcount << s->level;
  418. }
  419. }
  420. static int decode_block(InterplayACMContext *s)
  421. {
  422. GetBitContext *gb = &s->gb;
  423. int pwr, count, val, i, x, ret;
  424. pwr = get_bits(gb, 4);
  425. val = get_bits(gb, 16);
  426. count = 1 << pwr;
  427. for (i = 0, x = 0; i < count; i++) {
  428. s->midbuf[i] = x;
  429. x += val;
  430. }
  431. for (i = 1, x = -val; i <= count; i++) {
  432. s->midbuf[-i] = x;
  433. x -= val;
  434. }
  435. ret = fill_block(s);
  436. if (ret < 0)
  437. return ret;
  438. juggle_block(s);
  439. return 0;
  440. }
  441. static int decode_frame(AVCodecContext *avctx, void *data,
  442. int *got_frame_ptr, AVPacket *pkt)
  443. {
  444. InterplayACMContext *s = avctx->priv_data;
  445. GetBitContext *gb = &s->gb;
  446. AVFrame *frame = data;
  447. const uint8_t *buf;
  448. int16_t *samples;
  449. int ret, n, buf_size, input_buf_size;
  450. if (!pkt->size && !s->bitstream_size) {
  451. *got_frame_ptr = 0;
  452. return 0;
  453. }
  454. buf_size = FFMIN(pkt->size, s->max_framesize - s->bitstream_size);
  455. input_buf_size = buf_size;
  456. if (s->bitstream_index + s->bitstream_size + buf_size > s->max_framesize) {
  457. memmove(s->bitstream, &s->bitstream[s->bitstream_index], s->bitstream_size);
  458. s->bitstream_index = 0;
  459. }
  460. if (pkt->data)
  461. memcpy(&s->bitstream[s->bitstream_index + s->bitstream_size], pkt->data, buf_size);
  462. buf = &s->bitstream[s->bitstream_index];
  463. buf_size += s->bitstream_size;
  464. s->bitstream_size = buf_size;
  465. if (buf_size < s->max_framesize && pkt->data) {
  466. *got_frame_ptr = 0;
  467. return input_buf_size;
  468. }
  469. if ((ret = init_get_bits8(gb, buf, buf_size)) < 0)
  470. return ret;
  471. frame->nb_samples = s->block_len / avctx->channels;
  472. if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
  473. return ret;
  474. skip_bits(gb, s->skip);
  475. ret = decode_block(s);
  476. if (ret < 0)
  477. return ret;
  478. samples = (int16_t *)frame->data[0];
  479. for (n = 0; n < frame->nb_samples * avctx->channels; n++) {
  480. int val = s->block[n] >> s->level;
  481. *samples++ = val;
  482. }
  483. *got_frame_ptr = 1;
  484. s->skip = get_bits_count(gb) - 8 * (get_bits_count(gb) / 8);
  485. n = get_bits_count(gb) / 8;
  486. if (n > buf_size && pkt->data) {
  487. s->bitstream_size = 0;
  488. s->bitstream_index = 0;
  489. return AVERROR_INVALIDDATA;
  490. }
  491. if (s->bitstream_size) {
  492. s->bitstream_index += n;
  493. s->bitstream_size -= n;
  494. return input_buf_size;
  495. }
  496. return n;
  497. }
  498. static av_cold int decode_close(AVCodecContext *avctx)
  499. {
  500. InterplayACMContext *s = avctx->priv_data;
  501. av_freep(&s->block);
  502. av_freep(&s->wrapbuf);
  503. av_freep(&s->ampbuf);
  504. av_freep(&s->bitstream);
  505. s->bitstream_size = 0;
  506. return 0;
  507. }
  508. AVCodec ff_interplay_acm_decoder = {
  509. .name = "interplayacm",
  510. .long_name = NULL_IF_CONFIG_SMALL("Interplay ACM"),
  511. .type = AVMEDIA_TYPE_AUDIO,
  512. .id = AV_CODEC_ID_INTERPLAY_ACM,
  513. .init = decode_init,
  514. .close = decode_close,
  515. .decode = decode_frame,
  516. .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1,
  517. .priv_data_size = sizeof(InterplayACMContext),
  518. };