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.

629 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. #define BITSTREAM_READER_LE
  22. #include "avcodec.h"
  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. if (b > 26) {
  280. av_log(NULL, AV_LOG_ERROR, "Too large b = %d > 26\n", b);
  281. return AVERROR_INVALIDDATA;
  282. }
  283. n1 = (mul_3x3[b] & 0x0F) - 1;
  284. n2 = ((mul_3x3[b] >> 4) & 0x0F) - 1;
  285. n3 = ((mul_3x3[b] >> 8) & 0x0F) - 1;
  286. set_pos(s, i++, col, n1);
  287. if (i >= s->rows)
  288. break;
  289. set_pos(s, i++, col, n2);
  290. if (i >= s->rows)
  291. break;
  292. set_pos(s, i, col, n3);
  293. }
  294. return 0;
  295. }
  296. static int t27(InterplayACMContext *s, unsigned ind, unsigned col)
  297. {
  298. GetBitContext *gb = &s->gb;
  299. unsigned i, b;
  300. int n1, n2, n3;
  301. for (i = 0; i < s->rows; i++) {
  302. /* b = (x1) + (x2 * 5) + (x3 * 25) */
  303. b = get_bits(gb, 7);
  304. if (b > 124) {
  305. av_log(NULL, AV_LOG_ERROR, "Too large b = %d > 124\n", b);
  306. return AVERROR_INVALIDDATA;
  307. }
  308. n1 = (mul_3x5[b] & 0x0F) - 2;
  309. n2 = ((mul_3x5[b] >> 4) & 0x0F) - 2;
  310. n3 = ((mul_3x5[b] >> 8) & 0x0F) - 2;
  311. set_pos(s, i++, col, n1);
  312. if (i >= s->rows)
  313. break;
  314. set_pos(s, i++, col, n2);
  315. if (i >= s->rows)
  316. break;
  317. set_pos(s, i, col, n3);
  318. }
  319. return 0;
  320. }
  321. static int t37(InterplayACMContext *s, unsigned ind, unsigned col)
  322. {
  323. GetBitContext *gb = &s->gb;
  324. unsigned i, b;
  325. int n1, n2;
  326. for (i = 0; i < s->rows; i++) {
  327. /* b = (x1) + (x2 * 11) */
  328. b = get_bits(gb, 7);
  329. if (b > 120) {
  330. av_log(NULL, AV_LOG_ERROR, "Too large b = %d > 120\n", b);
  331. return AVERROR_INVALIDDATA;
  332. }
  333. n1 = (mul_2x11[b] & 0x0F) - 5;
  334. n2 = ((mul_2x11[b] >> 4) & 0x0F) - 5;
  335. set_pos(s, i++, col, n1);
  336. if (i >= s->rows)
  337. break;
  338. set_pos(s, i, col, n2);
  339. }
  340. return 0;
  341. }
  342. typedef int (*filler)(InterplayACMContext *s, unsigned ind, unsigned col);
  343. static const filler filler_list[] = {
  344. zero, bad, bad, linear,
  345. linear, linear, linear, linear,
  346. linear, linear, linear, linear,
  347. linear, linear, linear, linear,
  348. linear, k13, k12, t15,
  349. k24, k23, t27, k35,
  350. k34, bad, k45, k44,
  351. bad, t37, bad, bad,
  352. };
  353. static int fill_block(InterplayACMContext *s)
  354. {
  355. GetBitContext *gb = &s->gb;
  356. unsigned i, ind;
  357. int ret;
  358. for (i = 0; i < s->cols; i++) {
  359. ind = get_bits(gb, 5);
  360. ret = filler_list[ind](s, ind, i);
  361. if (ret < 0)
  362. return ret;
  363. }
  364. return 0;
  365. }
  366. static void juggle(int *wrap_p, int *block_p, unsigned sub_len, unsigned sub_count)
  367. {
  368. unsigned i, j;
  369. int *p, r0, r1, r2, r3;
  370. for (i = 0; i < sub_len; i++) {
  371. p = block_p;
  372. r0 = wrap_p[0];
  373. r1 = wrap_p[1];
  374. for (j = 0; j < sub_count/2; j++) {
  375. r2 = *p;
  376. *p = r1 * 2 + (r0 + r2);
  377. p += sub_len;
  378. r3 = *p;
  379. *p = r2 * 2 - (r1 + r3);
  380. p += sub_len;
  381. r0 = r2;
  382. r1 = r3;
  383. }
  384. *wrap_p++ = r0;
  385. *wrap_p++ = r1;
  386. block_p++;
  387. }
  388. }
  389. static void juggle_block(InterplayACMContext *s)
  390. {
  391. unsigned sub_count, sub_len, todo_count, step_subcount, i;
  392. int *wrap_p, *block_p, *p;
  393. /* juggle only if subblock_len > 1 */
  394. if (s->level == 0)
  395. return;
  396. /* 2048 / subblock_len */
  397. if (s->level > 9)
  398. step_subcount = 1;
  399. else
  400. step_subcount = (2048 >> s->level) - 2;
  401. /* Apply juggle() (rows)x(cols)
  402. * from (step_subcount * 2) x (subblock_len/2)
  403. * to (step_subcount * subblock_len) x (1)
  404. */
  405. todo_count = s->rows;
  406. block_p = s->block;
  407. while (1) {
  408. wrap_p = s->wrapbuf;
  409. sub_count = step_subcount;
  410. if (sub_count > todo_count)
  411. sub_count = todo_count;
  412. sub_len = s->cols / 2;
  413. sub_count *= 2;
  414. juggle(wrap_p, block_p, sub_len, sub_count);
  415. wrap_p += sub_len * 2;
  416. for (i = 0, p = block_p; i < sub_count; i++) {
  417. p[0]++;
  418. p += sub_len;
  419. }
  420. while (sub_len > 1) {
  421. sub_len /= 2;
  422. sub_count *= 2;
  423. juggle(wrap_p, block_p, sub_len, sub_count);
  424. wrap_p += sub_len * 2;
  425. }
  426. if (todo_count <= step_subcount)
  427. break;
  428. todo_count -= step_subcount;
  429. block_p += step_subcount << s->level;
  430. }
  431. }
  432. static int decode_block(InterplayACMContext *s)
  433. {
  434. GetBitContext *gb = &s->gb;
  435. int pwr, count, val, i, x, ret;
  436. pwr = get_bits(gb, 4);
  437. val = get_bits(gb, 16);
  438. count = 1 << pwr;
  439. for (i = 0, x = 0; i < count; i++) {
  440. s->midbuf[i] = x;
  441. x += val;
  442. }
  443. for (i = 1, x = -val; i <= count; i++) {
  444. s->midbuf[-i] = x;
  445. x -= val;
  446. }
  447. ret = fill_block(s);
  448. if (ret < 0)
  449. return ret;
  450. juggle_block(s);
  451. return 0;
  452. }
  453. static int decode_frame(AVCodecContext *avctx, void *data,
  454. int *got_frame_ptr, AVPacket *pkt)
  455. {
  456. InterplayACMContext *s = avctx->priv_data;
  457. GetBitContext *gb = &s->gb;
  458. AVFrame *frame = data;
  459. const uint8_t *buf;
  460. int16_t *samples;
  461. int ret, n, buf_size, input_buf_size;
  462. if (!pkt->size && !s->bitstream_size) {
  463. *got_frame_ptr = 0;
  464. return 0;
  465. }
  466. buf_size = FFMIN(pkt->size, s->max_framesize - s->bitstream_size);
  467. input_buf_size = buf_size;
  468. if (s->bitstream_index + s->bitstream_size + buf_size > s->max_framesize) {
  469. memmove(s->bitstream, &s->bitstream[s->bitstream_index], s->bitstream_size);
  470. s->bitstream_index = 0;
  471. }
  472. if (pkt->data)
  473. memcpy(&s->bitstream[s->bitstream_index + s->bitstream_size], pkt->data, buf_size);
  474. buf = &s->bitstream[s->bitstream_index];
  475. buf_size += s->bitstream_size;
  476. s->bitstream_size = buf_size;
  477. if (buf_size < s->max_framesize && pkt->data) {
  478. *got_frame_ptr = 0;
  479. return input_buf_size;
  480. }
  481. if ((ret = init_get_bits8(gb, buf, buf_size)) < 0)
  482. return ret;
  483. frame->nb_samples = s->block_len / avctx->channels;
  484. if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
  485. return ret;
  486. skip_bits(gb, s->skip);
  487. ret = decode_block(s);
  488. if (ret < 0)
  489. return ret;
  490. samples = (int16_t *)frame->data[0];
  491. for (n = 0; n < frame->nb_samples * avctx->channels; n++) {
  492. int val = s->block[n] >> s->level;
  493. *samples++ = val;
  494. }
  495. *got_frame_ptr = 1;
  496. s->skip = get_bits_count(gb) - 8 * (get_bits_count(gb) / 8);
  497. n = get_bits_count(gb) / 8;
  498. if (n > buf_size && pkt->data) {
  499. s->bitstream_size = 0;
  500. s->bitstream_index = 0;
  501. return AVERROR_INVALIDDATA;
  502. }
  503. if (s->bitstream_size) {
  504. s->bitstream_index += n;
  505. s->bitstream_size -= n;
  506. return input_buf_size;
  507. }
  508. return n;
  509. }
  510. static av_cold int decode_close(AVCodecContext *avctx)
  511. {
  512. InterplayACMContext *s = avctx->priv_data;
  513. av_freep(&s->block);
  514. av_freep(&s->wrapbuf);
  515. av_freep(&s->ampbuf);
  516. av_freep(&s->bitstream);
  517. s->bitstream_size = 0;
  518. return 0;
  519. }
  520. AVCodec ff_interplay_acm_decoder = {
  521. .name = "interplayacm",
  522. .long_name = NULL_IF_CONFIG_SMALL("Interplay ACM"),
  523. .type = AVMEDIA_TYPE_AUDIO,
  524. .id = AV_CODEC_ID_INTERPLAY_ACM,
  525. .init = decode_init,
  526. .close = decode_close,
  527. .decode = decode_frame,
  528. .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1,
  529. .priv_data_size = sizeof(InterplayACMContext),
  530. };