Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: patched-ffmpeg-mt/libavcodec/alac.c

Issue 789004: ffmpeg roll of source to mar 9 version... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/ffmpeg/
Patch Set: '' Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698