OLD | NEW |
1 /* | 1 /* |
2 * ALAC (Apple Lossless Audio Codec) decoder | 2 * ALAC (Apple Lossless Audio Codec) decoder |
3 * Copyright (c) 2005 David Hammerton | 3 * Copyright (c) 2005 David Hammerton |
4 * | 4 * |
5 * This file is part of FFmpeg. | 5 * This file is part of FFmpeg. |
6 * | 6 * |
7 * FFmpeg is free software; you can redistribute it and/or | 7 * FFmpeg is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Lesser General Public | 8 * modify it under the terms of the GNU Lesser General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2.1 of the License, or (at your option) any later version. | 10 * version 2.1 of the License, or (at your option) any later version. |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 int context_initialized; | 70 int context_initialized; |
71 | 71 |
72 int numchannels; | 72 int numchannels; |
73 int bytespersample; | 73 int bytespersample; |
74 | 74 |
75 /* buffers */ | 75 /* buffers */ |
76 int32_t *predicterror_buffer[MAX_CHANNELS]; | 76 int32_t *predicterror_buffer[MAX_CHANNELS]; |
77 | 77 |
78 int32_t *outputsamples_buffer[MAX_CHANNELS]; | 78 int32_t *outputsamples_buffer[MAX_CHANNELS]; |
79 | 79 |
| 80 int32_t *wasted_bits_buffer[MAX_CHANNELS]; |
| 81 |
80 /* stuff from setinfo */ | 82 /* stuff from setinfo */ |
81 uint32_t setinfo_max_samples_per_frame; /* 0x1000 = 4096 */ /* max sample
s per frame? */ | 83 uint32_t setinfo_max_samples_per_frame; /* 0x1000 = 4096 */ /* max sample
s per frame? */ |
82 uint8_t setinfo_sample_size; /* 0x10 */ | 84 uint8_t setinfo_sample_size; /* 0x10 */ |
83 uint8_t setinfo_rice_historymult; /* 0x28 */ | 85 uint8_t setinfo_rice_historymult; /* 0x28 */ |
84 uint8_t setinfo_rice_initialhistory; /* 0x0a */ | 86 uint8_t setinfo_rice_initialhistory; /* 0x0a */ |
85 uint8_t setinfo_rice_kmodifier; /* 0x0e */ | 87 uint8_t setinfo_rice_kmodifier; /* 0x0e */ |
86 /* end setinfo stuff */ | 88 /* end setinfo stuff */ |
87 | 89 |
| 90 int wasted_bits; |
88 } ALACContext; | 91 } ALACContext; |
89 | 92 |
90 static void allocate_buffers(ALACContext *alac) | 93 static void allocate_buffers(ALACContext *alac) |
91 { | 94 { |
92 int chan; | 95 int chan; |
93 for (chan = 0; chan < MAX_CHANNELS; chan++) { | 96 for (chan = 0; chan < MAX_CHANNELS; chan++) { |
94 alac->predicterror_buffer[chan] = | 97 alac->predicterror_buffer[chan] = |
95 av_malloc(alac->setinfo_max_samples_per_frame * 4); | 98 av_malloc(alac->setinfo_max_samples_per_frame * 4); |
96 | 99 |
97 alac->outputsamples_buffer[chan] = | 100 alac->outputsamples_buffer[chan] = |
98 av_malloc(alac->setinfo_max_samples_per_frame * 4); | 101 av_malloc(alac->setinfo_max_samples_per_frame * 4); |
| 102 |
| 103 alac->wasted_bits_buffer[chan] = av_malloc(alac->setinfo_max_samples_per
_frame * 4); |
99 } | 104 } |
100 } | 105 } |
101 | 106 |
102 static int alac_set_info(ALACContext *alac) | 107 static int alac_set_info(ALACContext *alac) |
103 { | 108 { |
104 const unsigned char *ptr = alac->avctx->extradata; | 109 const unsigned char *ptr = alac->avctx->extradata; |
105 | 110 |
106 ptr += 4; /* size */ | 111 ptr += 4; /* size */ |
107 ptr += 4; /* alac */ | 112 ptr += 4; /* alac */ |
108 ptr += 4; /* 0 ? */ | 113 ptr += 4; /* 0 ? */ |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 int16_t left, right; | 396 int16_t left, right; |
392 | 397 |
393 left = buffer[0][i]; | 398 left = buffer[0][i]; |
394 right = buffer[1][i]; | 399 right = buffer[1][i]; |
395 | 400 |
396 buffer_out[i*numchannels] = left; | 401 buffer_out[i*numchannels] = left; |
397 buffer_out[i*numchannels + 1] = right; | 402 buffer_out[i*numchannels + 1] = right; |
398 } | 403 } |
399 } | 404 } |
400 | 405 |
| 406 static void decorrelate_stereo_24(int32_t *buffer[MAX_CHANNELS], |
| 407 int32_t *buffer_out, |
| 408 int32_t *wasted_bits_buffer[MAX_CHANNELS], |
| 409 int wasted_bits, |
| 410 int numchannels, int numsamples, |
| 411 uint8_t interlacing_shift, |
| 412 uint8_t interlacing_leftweight) |
| 413 { |
| 414 int i; |
| 415 |
| 416 if (numsamples <= 0) |
| 417 return; |
| 418 |
| 419 /* weighted interlacing */ |
| 420 if (interlacing_leftweight) { |
| 421 for (i = 0; i < numsamples; i++) { |
| 422 int32_t a, b; |
| 423 |
| 424 a = buffer[0][i]; |
| 425 b = buffer[1][i]; |
| 426 |
| 427 a -= (b * interlacing_leftweight) >> interlacing_shift; |
| 428 b += a; |
| 429 |
| 430 if (wasted_bits) { |
| 431 b = (b << wasted_bits) | wasted_bits_buffer[0][i]; |
| 432 a = (a << wasted_bits) | wasted_bits_buffer[1][i]; |
| 433 } |
| 434 |
| 435 buffer_out[i * numchannels] = b << 8; |
| 436 buffer_out[i * numchannels + 1] = a << 8; |
| 437 } |
| 438 } else { |
| 439 for (i = 0; i < numsamples; i++) { |
| 440 int32_t left, right; |
| 441 |
| 442 left = buffer[0][i]; |
| 443 right = buffer[1][i]; |
| 444 |
| 445 if (wasted_bits) { |
| 446 left = (left << wasted_bits) | wasted_bits_buffer[0][i]; |
| 447 right = (right << wasted_bits) | wasted_bits_buffer[1][i]; |
| 448 } |
| 449 |
| 450 buffer_out[i * numchannels] = left << 8; |
| 451 buffer_out[i * numchannels + 1] = right << 8; |
| 452 } |
| 453 } |
| 454 } |
| 455 |
401 static int alac_decode_frame(AVCodecContext *avctx, | 456 static int alac_decode_frame(AVCodecContext *avctx, |
402 void *outbuffer, int *outputsize, | 457 void *outbuffer, int *outputsize, |
403 AVPacket *avpkt) | 458 AVPacket *avpkt) |
404 { | 459 { |
405 const uint8_t *inbuffer = avpkt->data; | 460 const uint8_t *inbuffer = avpkt->data; |
406 int input_buffer_size = avpkt->size; | 461 int input_buffer_size = avpkt->size; |
407 ALACContext *alac = avctx->priv_data; | 462 ALACContext *alac = avctx->priv_data; |
408 | 463 |
409 int channels; | 464 int channels; |
410 unsigned int outputsamples; | 465 unsigned int outputsamples; |
411 int hassize; | 466 int hassize; |
412 unsigned int readsamplesize; | 467 unsigned int readsamplesize; |
413 int wasted_bytes; | |
414 int isnotcompressed; | 468 int isnotcompressed; |
415 uint8_t interlacing_shift; | 469 uint8_t interlacing_shift; |
416 uint8_t interlacing_leftweight; | 470 uint8_t interlacing_leftweight; |
417 | 471 |
418 /* short-circuit null buffers */ | 472 /* short-circuit null buffers */ |
419 if (!inbuffer || !input_buffer_size) | 473 if (!inbuffer || !input_buffer_size) |
420 return input_buffer_size; | 474 return input_buffer_size; |
421 | 475 |
422 /* initialize from the extradata */ | 476 /* initialize from the extradata */ |
423 if (!alac->context_initialized) { | 477 if (!alac->context_initialized) { |
(...skipping 21 matching lines...) Expand all Loading... |
445 /* 2^result = something to do with output waiting. | 499 /* 2^result = something to do with output waiting. |
446 * perhaps matters if we read > 1 frame in a pass? | 500 * perhaps matters if we read > 1 frame in a pass? |
447 */ | 501 */ |
448 skip_bits(&alac->gb, 4); | 502 skip_bits(&alac->gb, 4); |
449 | 503 |
450 skip_bits(&alac->gb, 12); /* unknown, skip 12 bits */ | 504 skip_bits(&alac->gb, 12); /* unknown, skip 12 bits */ |
451 | 505 |
452 /* the output sample size is stored soon */ | 506 /* the output sample size is stored soon */ |
453 hassize = get_bits1(&alac->gb); | 507 hassize = get_bits1(&alac->gb); |
454 | 508 |
455 wasted_bytes = get_bits(&alac->gb, 2); /* unknown ? */ | 509 alac->wasted_bits = get_bits(&alac->gb, 2) << 3; |
456 | 510 |
457 /* whether the frame is compressed */ | 511 /* whether the frame is compressed */ |
458 isnotcompressed = get_bits1(&alac->gb); | 512 isnotcompressed = get_bits1(&alac->gb); |
459 | 513 |
460 if (hassize) { | 514 if (hassize) { |
461 /* now read the number of samples as a 32bit integer */ | 515 /* now read the number of samples as a 32bit integer */ |
462 outputsamples = get_bits_long(&alac->gb, 32); | 516 outputsamples = get_bits_long(&alac->gb, 32); |
463 if(outputsamples > alac->setinfo_max_samples_per_frame){ | 517 if(outputsamples > alac->setinfo_max_samples_per_frame){ |
464 av_log(avctx, AV_LOG_ERROR, "outputsamples %d > %d\n", outputsamples
, alac->setinfo_max_samples_per_frame); | 518 av_log(avctx, AV_LOG_ERROR, "outputsamples %d > %d\n", outputsamples
, alac->setinfo_max_samples_per_frame); |
465 return -1; | 519 return -1; |
466 } | 520 } |
467 } else | 521 } else |
468 outputsamples = alac->setinfo_max_samples_per_frame; | 522 outputsamples = alac->setinfo_max_samples_per_frame; |
469 | 523 |
| 524 switch (alac->setinfo_sample_size) { |
| 525 case 16: avctx->sample_fmt = SAMPLE_FMT_S16; |
| 526 alac->bytespersample = channels << 1; |
| 527 break; |
| 528 case 24: avctx->sample_fmt = SAMPLE_FMT_S32; |
| 529 alac->bytespersample = channels << 2; |
| 530 break; |
| 531 default: av_log(avctx, AV_LOG_ERROR, "Sample depth %d is not supported.\n", |
| 532 alac->setinfo_sample_size); |
| 533 return -1; |
| 534 } |
| 535 |
470 if(outputsamples > *outputsize / alac->bytespersample){ | 536 if(outputsamples > *outputsize / alac->bytespersample){ |
471 av_log(avctx, AV_LOG_ERROR, "sample buffer too small\n"); | 537 av_log(avctx, AV_LOG_ERROR, "sample buffer too small\n"); |
472 return -1; | 538 return -1; |
473 } | 539 } |
474 | 540 |
475 *outputsize = outputsamples * alac->bytespersample; | 541 *outputsize = outputsamples * alac->bytespersample; |
476 readsamplesize = alac->setinfo_sample_size - (wasted_bytes * 8) + channels -
1; | 542 readsamplesize = alac->setinfo_sample_size - (alac->wasted_bits) + channels
- 1; |
477 if (readsamplesize > MIN_CACHE_BITS) { | 543 if (readsamplesize > MIN_CACHE_BITS) { |
478 av_log(avctx, AV_LOG_ERROR, "readsamplesize too big (%d)\n", readsamples
ize); | 544 av_log(avctx, AV_LOG_ERROR, "readsamplesize too big (%d)\n", readsamples
ize); |
479 return -1; | 545 return -1; |
480 } | 546 } |
481 | 547 |
482 if (!isnotcompressed) { | 548 if (!isnotcompressed) { |
483 /* so it is compressed */ | 549 /* so it is compressed */ |
484 int16_t predictor_coef_table[channels][32]; | 550 int16_t predictor_coef_table[channels][32]; |
485 int predictor_coef_num[channels]; | 551 int predictor_coef_num[channels]; |
486 int prediction_type[channels]; | 552 int prediction_type[channels]; |
487 int prediction_quantitization[channels]; | 553 int prediction_quantitization[channels]; |
488 int ricemodifier[channels]; | 554 int ricemodifier[channels]; |
489 int i, chan; | 555 int i, chan; |
490 | 556 |
491 interlacing_shift = get_bits(&alac->gb, 8); | 557 interlacing_shift = get_bits(&alac->gb, 8); |
492 interlacing_leftweight = get_bits(&alac->gb, 8); | 558 interlacing_leftweight = get_bits(&alac->gb, 8); |
493 | 559 |
494 for (chan = 0; chan < channels; chan++) { | 560 for (chan = 0; chan < channels; chan++) { |
495 prediction_type[chan] = get_bits(&alac->gb, 4); | 561 prediction_type[chan] = get_bits(&alac->gb, 4); |
496 prediction_quantitization[chan] = get_bits(&alac->gb, 4); | 562 prediction_quantitization[chan] = get_bits(&alac->gb, 4); |
497 | 563 |
498 ricemodifier[chan] = get_bits(&alac->gb, 3); | 564 ricemodifier[chan] = get_bits(&alac->gb, 3); |
499 predictor_coef_num[chan] = get_bits(&alac->gb, 5); | 565 predictor_coef_num[chan] = get_bits(&alac->gb, 5); |
500 | 566 |
501 /* read the predictor table */ | 567 /* read the predictor table */ |
502 for (i = 0; i < predictor_coef_num[chan]; i++) | 568 for (i = 0; i < predictor_coef_num[chan]; i++) |
503 predictor_coef_table[chan][i] = (int16_t)get_bits(&alac->gb, 16)
; | 569 predictor_coef_table[chan][i] = (int16_t)get_bits(&alac->gb, 16)
; |
504 } | 570 } |
505 | 571 |
506 if (wasted_bytes) | 572 if (alac->wasted_bits) { |
507 av_log(avctx, AV_LOG_ERROR, "FIXME: unimplemented, unhandling of was
ted_bytes\n"); | 573 int i, ch; |
508 | 574 for (i = 0; i < outputsamples; i++) { |
| 575 for (ch = 0; ch < channels; ch++) |
| 576 alac->wasted_bits_buffer[ch][i] = get_bits(&alac->gb, alac->
wasted_bits); |
| 577 } |
| 578 } |
509 for (chan = 0; chan < channels; chan++) { | 579 for (chan = 0; chan < channels; chan++) { |
510 bastardized_rice_decompress(alac, | 580 bastardized_rice_decompress(alac, |
511 alac->predicterror_buffer[chan], | 581 alac->predicterror_buffer[chan], |
512 outputsamples, | 582 outputsamples, |
513 readsamplesize, | 583 readsamplesize, |
514 alac->setinfo_rice_initialhistory, | 584 alac->setinfo_rice_initialhistory, |
515 alac->setinfo_rice_kmodifier, | 585 alac->setinfo_rice_kmodifier, |
516 ricemodifier[chan] * alac->setinfo_rice_
historymult / 4, | 586 ricemodifier[chan] * alac->setinfo_rice_
historymult / 4, |
517 (1 << alac->setinfo_rice_kmodifier) - 1)
; | 587 (1 << alac->setinfo_rice_kmodifier) - 1)
; |
518 | 588 |
(...skipping 12 matching lines...) Expand all Loading... |
531 * just a boolean?) runs adaptive fir twice.. like: | 601 * just a boolean?) runs adaptive fir twice.. like: |
532 * predictor_decompress_fir_adapt(predictor_error, tempout, ...) | 602 * predictor_decompress_fir_adapt(predictor_error, tempout, ...) |
533 * predictor_decompress_fir_adapt(predictor_error, outputsamples
...) | 603 * predictor_decompress_fir_adapt(predictor_error, outputsamples
...) |
534 * little strange.. | 604 * little strange.. |
535 */ | 605 */ |
536 } | 606 } |
537 } | 607 } |
538 } else { | 608 } else { |
539 /* not compressed, easy case */ | 609 /* not compressed, easy case */ |
540 int i, chan; | 610 int i, chan; |
| 611 if (alac->setinfo_sample_size <= 16) { |
541 for (i = 0; i < outputsamples; i++) | 612 for (i = 0; i < outputsamples; i++) |
542 for (chan = 0; chan < channels; chan++) { | 613 for (chan = 0; chan < channels; chan++) { |
543 int32_t audiobits; | 614 int32_t audiobits; |
544 | 615 |
545 audiobits = get_sbits_long(&alac->gb, alac->setinfo_sample_size)
; | 616 audiobits = get_sbits_long(&alac->gb, alac->setinfo_sample_size)
; |
546 | 617 |
547 alac->outputsamples_buffer[chan][i] = audiobits; | 618 alac->outputsamples_buffer[chan][i] = audiobits; |
548 } | 619 } |
549 /* wasted_bytes = 0; */ | 620 } else { |
| 621 for (i = 0; i < outputsamples; i++) { |
| 622 for (chan = 0; chan < channels; chan++) { |
| 623 alac->outputsamples_buffer[chan][i] = get_bits(&alac->gb, |
| 624 alac->setinfo_sample_s
ize); |
| 625 alac->outputsamples_buffer[chan][i] = sign_extend(alac->outp
utsamples_buffer[chan][i], |
| 626 alac->seti
nfo_sample_size); |
| 627 } |
| 628 } |
| 629 } |
| 630 alac->wasted_bits = 0; |
550 interlacing_shift = 0; | 631 interlacing_shift = 0; |
551 interlacing_leftweight = 0; | 632 interlacing_leftweight = 0; |
552 } | 633 } |
553 if (get_bits(&alac->gb, 3) != 7) | 634 if (get_bits(&alac->gb, 3) != 7) |
554 av_log(avctx, AV_LOG_ERROR, "Error : Wrong End Of Frame\n"); | 635 av_log(avctx, AV_LOG_ERROR, "Error : Wrong End Of Frame\n"); |
555 | 636 |
556 switch(alac->setinfo_sample_size) { | 637 switch(alac->setinfo_sample_size) { |
557 case 16: | 638 case 16: |
558 if (channels == 2) { | 639 if (channels == 2) { |
559 reconstruct_stereo_16(alac->outputsamples_buffer, | 640 reconstruct_stereo_16(alac->outputsamples_buffer, |
560 (int16_t*)outbuffer, | 641 (int16_t*)outbuffer, |
561 alac->numchannels, | 642 alac->numchannels, |
562 outputsamples, | 643 outputsamples, |
563 interlacing_shift, | 644 interlacing_shift, |
564 interlacing_leftweight); | 645 interlacing_leftweight); |
565 } else { | 646 } else { |
566 int i; | 647 int i; |
567 for (i = 0; i < outputsamples; i++) { | 648 for (i = 0; i < outputsamples; i++) { |
568 int16_t sample = alac->outputsamples_buffer[0][i]; | 649 ((int16_t*)outbuffer)[i] = alac->outputsamples_buffer[0][i]; |
569 ((int16_t*)outbuffer)[i * alac->numchannels] = sample; | |
570 } | 650 } |
571 } | 651 } |
572 break; | 652 break; |
573 case 20: | |
574 case 24: | 653 case 24: |
575 // It is not clear if there exist any encoder that creates 24 bit ALAC | 654 if (channels == 2) { |
576 // files. iTunes convert 24 bit raw files to 16 bit before encoding. | 655 decorrelate_stereo_24(alac->outputsamples_buffer, |
577 case 32: | 656 outbuffer, |
578 av_log(avctx, AV_LOG_ERROR, "FIXME: unimplemented sample size %i\n", ala
c->setinfo_sample_size); | 657 alac->wasted_bits_buffer, |
579 break; | 658 alac->wasted_bits, |
580 default: | 659 alac->numchannels, |
| 660 outputsamples, |
| 661 interlacing_shift, |
| 662 interlacing_leftweight); |
| 663 } else { |
| 664 int i; |
| 665 for (i = 0; i < outputsamples; i++) |
| 666 ((int32_t *)outbuffer)[i] = alac->outputsamples_buffer[0][i] <<
8; |
| 667 } |
581 break; | 668 break; |
582 } | 669 } |
583 | 670 |
584 if (input_buffer_size * 8 - get_bits_count(&alac->gb) > 8) | 671 if (input_buffer_size * 8 - get_bits_count(&alac->gb) > 8) |
585 av_log(avctx, AV_LOG_ERROR, "Error : %d bits left\n", input_buffer_size
* 8 - get_bits_count(&alac->gb)); | 672 av_log(avctx, AV_LOG_ERROR, "Error : %d bits left\n", input_buffer_size
* 8 - get_bits_count(&alac->gb)); |
586 | 673 |
587 return input_buffer_size; | 674 return input_buffer_size; |
588 } | 675 } |
589 | 676 |
590 static av_cold int alac_decode_init(AVCodecContext * avctx) | 677 static av_cold int alac_decode_init(AVCodecContext * avctx) |
591 { | 678 { |
592 ALACContext *alac = avctx->priv_data; | 679 ALACContext *alac = avctx->priv_data; |
593 alac->avctx = avctx; | 680 alac->avctx = avctx; |
594 alac->context_initialized = 0; | 681 alac->context_initialized = 0; |
595 | 682 |
596 alac->numchannels = alac->avctx->channels; | 683 alac->numchannels = alac->avctx->channels; |
597 alac->bytespersample = 2 * alac->numchannels; | |
598 avctx->sample_fmt = SAMPLE_FMT_S16; | |
599 | 684 |
600 return 0; | 685 return 0; |
601 } | 686 } |
602 | 687 |
603 static av_cold int alac_decode_close(AVCodecContext *avctx) | 688 static av_cold int alac_decode_close(AVCodecContext *avctx) |
604 { | 689 { |
605 ALACContext *alac = avctx->priv_data; | 690 ALACContext *alac = avctx->priv_data; |
606 | 691 |
607 int chan; | 692 int chan; |
608 for (chan = 0; chan < MAX_CHANNELS; chan++) { | 693 for (chan = 0; chan < MAX_CHANNELS; chan++) { |
609 av_free(alac->predicterror_buffer[chan]); | 694 av_freep(&alac->predicterror_buffer[chan]); |
610 av_free(alac->outputsamples_buffer[chan]); | 695 av_freep(&alac->outputsamples_buffer[chan]); |
| 696 av_freep(&alac->wasted_bits_buffer[chan]); |
611 } | 697 } |
612 | 698 |
613 return 0; | 699 return 0; |
614 } | 700 } |
615 | 701 |
616 AVCodec alac_decoder = { | 702 AVCodec alac_decoder = { |
617 "alac", | 703 "alac", |
618 CODEC_TYPE_AUDIO, | 704 CODEC_TYPE_AUDIO, |
619 CODEC_ID_ALAC, | 705 CODEC_ID_ALAC, |
620 sizeof(ALACContext), | 706 sizeof(ALACContext), |
621 alac_decode_init, | 707 alac_decode_init, |
622 NULL, | 708 NULL, |
623 alac_decode_close, | 709 alac_decode_close, |
624 alac_decode_frame, | 710 alac_decode_frame, |
625 .long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"), | 711 .long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"), |
626 }; | 712 }; |
OLD | NEW |