Mercurial > mplayer.hg
comparison libfaad2/specrec.c @ 18141:59b6fa5b4201
Update to faad2 cvs 20040915+MPlayer fixes
Patch by me and Emanuele Giaquinta
author | rtognimp |
---|---|
date | Tue, 18 Apr 2006 19:39:34 +0000 |
parents | b4378a6f87a6 |
children | 0783dd397f74 |
comparison
equal
deleted
inserted
replaced
18140:e371c7e18402 | 18141:59b6fa5b4201 |
---|---|
17 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
18 ** | 18 ** |
19 ** Any non-GPL usage of this software or parts of this software is strictly | 19 ** Any non-GPL usage of this software or parts of this software is strictly |
20 ** forbidden. | 20 ** forbidden. |
21 ** | 21 ** |
22 ** Commercial non-GPL licensing of this software is possible. | 22 ** Initially modified for use with MPlayer on 2006/04/18 |
23 ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com. | 23 ** $Id: specrec.c,v 1.56 2004/09/08 09:43:11 gcp Exp $ |
24 ** | 24 ** detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/ |
25 ** $Id: specrec.c,v 1.51 2004/06/30 12:45:57 menno Exp $ | 25 ** local_changes.diff contains the exact changes to this file. |
26 **/ | 26 **/ |
27 | 27 |
28 /* | 28 /* |
29 Spectral reconstruction: | 29 Spectral reconstruction: |
30 - grouping/sectioning | 30 - grouping/sectioning |
542 COEF_CONST(1.6817928305074290860622509524664) /* 2^0.75 */ | 542 COEF_CONST(1.6817928305074290860622509524664) /* 2^0.75 */ |
543 }; | 543 }; |
544 const real_t *tab = iq_table; | 544 const real_t *tab = iq_table; |
545 | 545 |
546 uint8_t g, sfb, win; | 546 uint8_t g, sfb, win; |
547 uint16_t width, bin, k, gindex; | 547 uint16_t width, bin, k, gindex, wa, wb; |
548 uint8_t error = 0; /* Init error flag */ | 548 uint8_t error = 0; /* Init error flag */ |
549 | 549 #ifndef FIXED_POINT |
550 real_t scf; | |
551 #endif | |
550 | 552 |
551 k = 0; | 553 k = 0; |
552 gindex = 0; | 554 gindex = 0; |
553 | 555 |
554 for (g = 0; g < ics->num_window_groups; g++) | 556 for (g = 0; g < ics->num_window_groups; g++) |
588 else | 590 else |
589 exp -= 7 /*10*/; | 591 exp -= 7 /*10*/; |
590 } | 592 } |
591 #endif | 593 #endif |
592 | 594 |
595 wa = gindex + j; | |
596 | |
597 #ifndef FIXED_POINT | |
598 scf = pow2sf_tab[exp/*+25*/] * pow2_table[frac]; | |
599 #endif | |
600 | |
593 for (win = 0; win < ics->window_group_length[g]; win++) | 601 for (win = 0; win < ics->window_group_length[g]; win++) |
594 { | 602 { |
595 for (bin = 0; bin < width; bin += 4) | 603 for (bin = 0; bin < width; bin += 4) |
596 { | 604 { |
597 #ifndef FIXED_POINT | 605 #ifndef FIXED_POINT |
598 spec_data[gindex+(win*win_inc)+j+bin+0] = iquant(quant_data[k+0], tab, &error) * | 606 wb = wa + bin; |
599 pow2sf_tab[exp/*+25*/] * pow2_table[frac]; | 607 |
600 spec_data[gindex+(win*win_inc)+j+bin+1] = iquant(quant_data[k+1], tab, &error) * | 608 spec_data[wb+0] = iquant(quant_data[k+0], tab, &error) * scf; |
601 pow2sf_tab[exp/*+25*/] * pow2_table[frac]; | 609 spec_data[wb+1] = iquant(quant_data[k+1], tab, &error) * scf; |
602 spec_data[gindex+(win*win_inc)+j+bin+2] = iquant(quant_data[k+2], tab, &error) * | 610 spec_data[wb+2] = iquant(quant_data[k+2], tab, &error) * scf; |
603 pow2sf_tab[exp/*+25*/] * pow2_table[frac]; | 611 spec_data[wb+3] = iquant(quant_data[k+3], tab, &error) * scf; |
604 spec_data[gindex+(win*win_inc)+j+bin+3] = iquant(quant_data[k+3], tab, &error) * | 612 |
605 pow2sf_tab[exp/*+25*/] * pow2_table[frac]; | |
606 #else | 613 #else |
607 real_t iq0 = iquant(quant_data[k+0], tab, &error); | 614 real_t iq0 = iquant(quant_data[k+0], tab, &error); |
608 real_t iq1 = iquant(quant_data[k+1], tab, &error); | 615 real_t iq1 = iquant(quant_data[k+1], tab, &error); |
609 real_t iq2 = iquant(quant_data[k+2], tab, &error); | 616 real_t iq2 = iquant(quant_data[k+2], tab, &error); |
610 real_t iq3 = iquant(quant_data[k+3], tab, &error); | 617 real_t iq3 = iquant(quant_data[k+3], tab, &error); |
618 | |
619 wb = wa + bin; | |
620 | |
611 if (exp < 0) | 621 if (exp < 0) |
612 { | 622 { |
613 spec_data[gindex+(win*win_inc)+j+bin+0] = iq0 >>= -exp; | 623 spec_data[wb+0] = iq0 >>= -exp; |
614 spec_data[gindex+(win*win_inc)+j+bin+1] = iq1 >>= -exp; | 624 spec_data[wb+1] = iq1 >>= -exp; |
615 spec_data[gindex+(win*win_inc)+j+bin+2] = iq2 >>= -exp; | 625 spec_data[wb+2] = iq2 >>= -exp; |
616 spec_data[gindex+(win*win_inc)+j+bin+3] = iq3 >>= -exp; | 626 spec_data[wb+3] = iq3 >>= -exp; |
617 } else { | 627 } else { |
618 spec_data[gindex+(win*win_inc)+j+bin+0] = iq0 <<= exp; | 628 spec_data[wb+0] = iq0 <<= exp; |
619 spec_data[gindex+(win*win_inc)+j+bin+1] = iq1 <<= exp; | 629 spec_data[wb+1] = iq1 <<= exp; |
620 spec_data[gindex+(win*win_inc)+j+bin+2] = iq2 <<= exp; | 630 spec_data[wb+2] = iq2 <<= exp; |
621 spec_data[gindex+(win*win_inc)+j+bin+3] = iq3 <<= exp; | 631 spec_data[wb+3] = iq3 <<= exp; |
622 } | 632 } |
623 spec_data[gindex+(win*win_inc)+j+bin+0] = MUL_C(spec_data[gindex+(win*win_inc)+j+bin+0],pow2_table[frac]); | 633 if (frac != 0) |
624 spec_data[gindex+(win*win_inc)+j+bin+1] = MUL_C(spec_data[gindex+(win*win_inc)+j+bin+1],pow2_table[frac]); | 634 { |
625 spec_data[gindex+(win*win_inc)+j+bin+2] = MUL_C(spec_data[gindex+(win*win_inc)+j+bin+2],pow2_table[frac]); | 635 spec_data[wb+0] = MUL_C(spec_data[wb+0],pow2_table[frac]); |
626 spec_data[gindex+(win*win_inc)+j+bin+3] = MUL_C(spec_data[gindex+(win*win_inc)+j+bin+3],pow2_table[frac]); | 636 spec_data[wb+1] = MUL_C(spec_data[wb+1],pow2_table[frac]); |
637 spec_data[wb+2] = MUL_C(spec_data[wb+2],pow2_table[frac]); | |
638 spec_data[wb+3] = MUL_C(spec_data[wb+3],pow2_table[frac]); | |
639 } | |
627 | 640 |
628 //#define SCFS_PRINT | 641 //#define SCFS_PRINT |
629 #ifdef SCFS_PRINT | 642 #ifdef SCFS_PRINT |
630 //printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]); | 643 printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+0]); |
631 //printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]); | 644 printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+1]); |
632 //printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]); | 645 printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+2]); |
633 //printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]); | 646 printf("%d\n", spec_data[gindex+(win*win_inc)+j+bin+3]); |
634 printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]); | 647 //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+0]); |
635 printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]); | 648 //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+1]); |
636 printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]); | 649 //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+2]); |
637 printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]); | 650 //printf("0x%.8X\n", spec_data[gindex+(win*win_inc)+j+bin+3]); |
638 #endif | 651 #endif |
639 #endif | 652 #endif |
640 | 653 |
641 gincrease += 4; | 654 gincrease += 4; |
642 k += 4; | 655 k += 4; |
643 } | 656 } |
657 wa += win_inc; | |
644 } | 658 } |
645 j += width; | 659 j += width; |
646 } | 660 } |
647 gindex += gincrease; | 661 gindex += gincrease; |
648 } | 662 } |
657 | 671 |
658 #ifdef MAIN_DEC | 672 #ifdef MAIN_DEC |
659 /* MAIN object type prediction */ | 673 /* MAIN object type prediction */ |
660 if (hDecoder->object_type == MAIN) | 674 if (hDecoder->object_type == MAIN) |
661 { | 675 { |
662 /* allocate the state only when needed */ | 676 hDecoder->pred_stat[channel] = (pred_state*)realloc(hDecoder->pred_stat[channel], hDecoder->frameLength * sizeof(pred_state)); |
663 if (hDecoder->pred_stat[channel] == NULL) | |
664 { | |
665 hDecoder->pred_stat[channel] = (pred_state*)faad_malloc(hDecoder->frameLength * sizeof(pred_state)); | |
666 reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength); | 677 reset_all_predictors(hDecoder->pred_stat[channel], hDecoder->frameLength); |
667 } | |
668 } | 678 } |
669 #endif | 679 #endif |
670 | 680 |
671 #ifdef LTP_DEC | 681 #ifdef LTP_DEC |
672 if (is_ltp_ot(hDecoder->object_type)) | 682 if (is_ltp_ot(hDecoder->object_type)) |
673 { | 683 { |
674 /* allocate the state only when needed */ | 684 hDecoder->lt_pred_stat[channel] = (int16_t*)realloc(hDecoder->lt_pred_stat[channel], hDecoder->frameLength*4 * sizeof(int16_t)); |
675 if (hDecoder->lt_pred_stat[channel] == NULL) | |
676 { | |
677 hDecoder->lt_pred_stat[channel] = (int16_t*)faad_malloc(hDecoder->frameLength*4 * sizeof(int16_t)); | |
678 memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t)); | 685 memset(hDecoder->lt_pred_stat[channel], 0, hDecoder->frameLength*4 * sizeof(int16_t)); |
679 } | 686 } |
680 } | 687 #endif |
681 #endif | 688 |
682 | |
683 if (hDecoder->time_out[channel] == NULL) | |
684 { | |
685 mul = 1; | 689 mul = 1; |
686 #ifdef SBR_DEC | 690 #ifdef SBR_DEC |
687 hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0; | 691 hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 0; |
688 if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1)) | 692 if ((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1)) |
689 { | 693 { |
690 /* SBR requires 2 times as much output data */ | 694 /* SBR requires 2 times as much output data */ |
691 mul = 2; | 695 mul = 2; |
692 hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1; | 696 hDecoder->sbr_alloced[hDecoder->fr_ch_ele] = 1; |
693 } | 697 } |
694 #endif | 698 #endif |
695 hDecoder->time_out[channel] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t)); | 699 hDecoder->time_out[channel] = (real_t*)realloc(hDecoder->time_out[channel], mul*hDecoder->frameLength*sizeof(real_t)); |
696 memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t)); | 700 memset(hDecoder->time_out[channel], 0, mul*hDecoder->frameLength*sizeof(real_t)); |
697 } | |
698 #if (defined(PS_DEC) || defined(DRM_PS)) | 701 #if (defined(PS_DEC) || defined(DRM_PS)) |
699 if (output_channels == 2) | 702 if (output_channels == 2) |
700 { | 703 { |
701 if (hDecoder->time_out[channel+1] == NULL) | 704 hDecoder->time_out[channel+1] = (real_t*)realloc(hDecoder->time_out[channel+1], mul*hDecoder->frameLength*sizeof(real_t)); |
702 { | |
703 hDecoder->time_out[channel+1] = (real_t*)faad_malloc(mul*hDecoder->frameLength*sizeof(real_t)); | |
704 memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t)); | 705 memset(hDecoder->time_out[channel+1], 0, mul*hDecoder->frameLength*sizeof(real_t)); |
705 } | 706 } |
706 } | 707 #endif |
707 #endif | 708 |
708 | 709 hDecoder->fb_intermed[channel] = (real_t*)realloc(hDecoder->fb_intermed[channel], hDecoder->frameLength*sizeof(real_t)); |
709 if (hDecoder->fb_intermed[channel] == NULL) | |
710 { | |
711 hDecoder->fb_intermed[channel] = (real_t*)faad_malloc(hDecoder->frameLength*sizeof(real_t)); | |
712 memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t)); | 710 memset(hDecoder->fb_intermed[channel], 0, hDecoder->frameLength*sizeof(real_t)); |
713 } | |
714 | 711 |
715 #ifdef SSR_DEC | 712 #ifdef SSR_DEC |
716 if (hDecoder->object_type == SSR) | 713 if (hDecoder->object_type == SSR) |
717 { | 714 { |
718 if (hDecoder->ssr_overlap[channel] == NULL) | 715 uint16_t k; |
719 { | 716 hDecoder->ssr_overlap[channel] = (real_t*)realloc(hDecoder->ssr_overlap[channel], 2*hDecoder->frameLength*sizeof(real_t)); |
720 hDecoder->ssr_overlap[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t)); | |
721 memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t)); | 717 memset(hDecoder->ssr_overlap[channel], 0, 2*hDecoder->frameLength*sizeof(real_t)); |
722 } | 718 hDecoder->prev_fmd[channel] = (real_t*)realloc(hDecoder->prev_fmd[channel], 2*hDecoder->frameLength*sizeof(real_t)); |
723 if (hDecoder->prev_fmd[channel] == NULL) | |
724 { | |
725 uint16_t k; | |
726 hDecoder->prev_fmd[channel] = (real_t*)faad_malloc(2*hDecoder->frameLength*sizeof(real_t)); | |
727 for (k = 0; k < 2*hDecoder->frameLength; k++) | 719 for (k = 0; k < 2*hDecoder->frameLength; k++) |
728 hDecoder->prev_fmd[channel][k] = REAL_CONST(-1); | 720 hDecoder->prev_fmd[channel][k] = REAL_CONST(-1); |
729 } | |
730 } | 721 } |
731 #endif | 722 #endif |
732 | 723 |
733 return 0; | 724 return 0; |
734 } | 725 } |
847 #ifdef PROFILE | 838 #ifdef PROFILE |
848 int64_t count = faad_get_ts(); | 839 int64_t count = faad_get_ts(); |
849 #endif | 840 #endif |
850 | 841 |
851 | 842 |
852 /* determine whether some mono->stereo tool is used */ | 843 /* always allocate 2 channels, PS can always "suddenly" turn up */ |
853 #if (defined(PS_DEC) || defined(DRM_PS)) | 844 #if (defined(PS_DEC) || defined(DRM_PS)) |
854 output_channels = hDecoder->ps_used[hDecoder->fr_ch_ele] ? 2 : 1; | 845 output_channels = hDecoder->ps_used[hDecoder->fr_ch_ele] ? 2 : 1; |
855 #else | 846 #else |
856 output_channels = 1; | 847 output_channels = 1; |
857 #endif | 848 #endif |
858 #ifdef DRM_PS | 849 |
859 /* for DRM error recovery is crucial */ | 850 if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] < output_channels) { |
860 /* simply always allocate 2 channels, you never know when PS will pop up */ | |
861 if (hDecoder->object_type == DRM_ER_LC) | |
862 output_channels = 2; | |
863 #endif | |
864 if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] == 0) | |
865 { | |
866 /* element_output_channels not set yet */ | |
867 hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels; | 851 hDecoder->element_output_channels[hDecoder->fr_ch_ele] = output_channels; |
868 } else if (hDecoder->element_output_channels[hDecoder->fr_ch_ele] != output_channels) { | |
869 /* element inconsistency */ | |
870 return 21; | |
871 } | |
872 | |
873 if (hDecoder->element_alloced[hDecoder->fr_ch_ele] == 0) | |
874 { | |
875 retval = allocate_single_channel(hDecoder, sce->channel, output_channels); | 852 retval = allocate_single_channel(hDecoder, sce->channel, output_channels); |
876 if (retval > 0) | 853 if (retval > 0) |
877 return retval; | 854 return retval; |
878 | 855 |
879 hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1; | 856 hDecoder->element_alloced[hDecoder->fr_ch_ele] = 1; |
946 /* filter bank */ | 923 /* filter bank */ |
947 #ifdef SSR_DEC | 924 #ifdef SSR_DEC |
948 if (hDecoder->object_type != SSR) | 925 if (hDecoder->object_type != SSR) |
949 { | 926 { |
950 #endif | 927 #endif |
951 #ifdef USE_SSE | |
952 hDecoder->fb->if_func(hDecoder->fb, ics->window_sequence, ics->window_shape, | |
953 hDecoder->window_shape_prev[sce->channel], spec_coef, | |
954 hDecoder->time_out[sce->channel], hDecoder->object_type, hDecoder->frameLength); | |
955 #else | |
956 ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape, | 928 ifilter_bank(hDecoder->fb, ics->window_sequence, ics->window_shape, |
957 hDecoder->window_shape_prev[sce->channel], spec_coef, | 929 hDecoder->window_shape_prev[sce->channel], spec_coef, |
958 hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel], | 930 hDecoder->time_out[sce->channel], hDecoder->fb_intermed[sce->channel], |
959 hDecoder->object_type, hDecoder->frameLength); | 931 hDecoder->object_type, hDecoder->frameLength); |
960 #endif | |
961 #ifdef SSR_DEC | 932 #ifdef SSR_DEC |
962 } else { | 933 } else { |
963 ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape, | 934 ssr_decode(&(ics->ssr), hDecoder->fb, ics->window_sequence, ics->window_shape, |
964 hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel], | 935 hDecoder->window_shape_prev[sce->channel], spec_coef, hDecoder->time_out[sce->channel], |
965 hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel], | 936 hDecoder->ssr_overlap[sce->channel], hDecoder->ipqf_buffer[sce->channel], hDecoder->prev_fmd[sce->channel], |
1021 } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1)) | 992 } else if (((hDecoder->sbr_present_flag == 1) || (hDecoder->forceUpSampling == 1)) |
1022 && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele]) | 993 && !hDecoder->sbr_alloced[hDecoder->fr_ch_ele]) |
1023 { | 994 { |
1024 return 23; | 995 return 23; |
1025 } | 996 } |
1026 #endif | 997 |
1027 | 998 /* copy L to R when no PS is used */ |
1028 #ifdef DRM_PS | 999 #if (defined(PS_DEC) || defined(DRM_PS)) |
1029 /* copy L to R for DRM when no PS is used */ | 1000 if ((hDecoder->ps_used[hDecoder->fr_ch_ele] == 0) && (output_channels == 2)) |
1030 if ((hDecoder->object_type == DRM_ER_LC) && | |
1031 (hDecoder->ps_used[hDecoder->fr_ch_ele] == 0)) | |
1032 { | 1001 { |
1033 uint8_t ele = hDecoder->fr_ch_ele; | 1002 uint8_t ele = hDecoder->fr_ch_ele; |
1034 uint8_t ch = sce->channel; | 1003 uint8_t ch = sce->channel; |
1035 uint16_t frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1; | 1004 uint16_t frame_size = (hDecoder->sbr_alloced[ele]) ? 2 : 1; |
1036 frame_size *= hDecoder->frameLength*sizeof(real_t); | 1005 frame_size *= hDecoder->frameLength*sizeof(real_t); |
1037 | 1006 |
1038 memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size); | 1007 memcpy(hDecoder->time_out[ch+1], hDecoder->time_out[ch], frame_size); |
1039 } | 1008 } |
1009 #endif | |
1040 #endif | 1010 #endif |
1041 | 1011 |
1042 return 0; | 1012 return 0; |
1043 } | 1013 } |
1044 | 1014 |
1085 } | 1055 } |
1086 | 1056 |
1087 /* mid/side decoding */ | 1057 /* mid/side decoding */ |
1088 ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength); | 1058 ms_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength); |
1089 | 1059 |
1060 #if 0 | |
1061 { | |
1062 int i; | |
1063 for (i = 0; i < 1024; i++) | |
1064 { | |
1065 //printf("%d\n", spec_coef1[i]); | |
1066 printf("0x%.8X\n", spec_coef1[i]); | |
1067 } | |
1068 for (i = 0; i < 1024; i++) | |
1069 { | |
1070 //printf("%d\n", spec_coef2[i]); | |
1071 printf("0x%.8X\n", spec_coef2[i]); | |
1072 } | |
1073 } | |
1074 #endif | |
1075 | |
1090 /* intensity stereo decoding */ | 1076 /* intensity stereo decoding */ |
1091 is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength); | 1077 is_decode(ics1, ics2, spec_coef1, spec_coef2, hDecoder->frameLength); |
1078 | |
1079 #if 0 | |
1080 { | |
1081 int i; | |
1082 for (i = 0; i < 1024; i++) | |
1083 { | |
1084 printf("%d\n", spec_coef1[i]); | |
1085 //printf("0x%.8X\n", spec_coef1[i]); | |
1086 } | |
1087 for (i = 0; i < 1024; i++) | |
1088 { | |
1089 printf("%d\n", spec_coef2[i]); | |
1090 //printf("0x%.8X\n", spec_coef2[i]); | |
1091 } | |
1092 } | |
1093 #endif | |
1092 | 1094 |
1093 #ifdef MAIN_DEC | 1095 #ifdef MAIN_DEC |
1094 /* MAIN object type prediction */ | 1096 /* MAIN object type prediction */ |
1095 if (hDecoder->object_type == MAIN) | 1097 if (hDecoder->object_type == MAIN) |
1096 { | 1098 { |
1160 /* filter bank */ | 1162 /* filter bank */ |
1161 #ifdef SSR_DEC | 1163 #ifdef SSR_DEC |
1162 if (hDecoder->object_type != SSR) | 1164 if (hDecoder->object_type != SSR) |
1163 { | 1165 { |
1164 #endif | 1166 #endif |
1165 #ifdef USE_SSE | |
1166 hDecoder->fb->if_func(hDecoder->fb, ics1->window_sequence, ics1->window_shape, | |
1167 hDecoder->window_shape_prev[cpe->channel], spec_coef1, | |
1168 hDecoder->time_out[cpe->channel], hDecoder->object_type, hDecoder->frameLength); | |
1169 hDecoder->fb->if_func(hDecoder->fb, ics2->window_sequence, ics2->window_shape, | |
1170 hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, | |
1171 hDecoder->time_out[cpe->paired_channel], hDecoder->object_type, hDecoder->frameLength); | |
1172 #else | |
1173 ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape, | 1167 ifilter_bank(hDecoder->fb, ics1->window_sequence, ics1->window_shape, |
1174 hDecoder->window_shape_prev[cpe->channel], spec_coef1, | 1168 hDecoder->window_shape_prev[cpe->channel], spec_coef1, |
1175 hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel], | 1169 hDecoder->time_out[cpe->channel], hDecoder->fb_intermed[cpe->channel], |
1176 hDecoder->object_type, hDecoder->frameLength); | 1170 hDecoder->object_type, hDecoder->frameLength); |
1177 ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape, | 1171 ifilter_bank(hDecoder->fb, ics2->window_sequence, ics2->window_shape, |
1178 hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, | 1172 hDecoder->window_shape_prev[cpe->paired_channel], spec_coef2, |
1179 hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel], | 1173 hDecoder->time_out[cpe->paired_channel], hDecoder->fb_intermed[cpe->paired_channel], |
1180 hDecoder->object_type, hDecoder->frameLength); | 1174 hDecoder->object_type, hDecoder->frameLength); |
1181 #endif | |
1182 #ifdef SSR_DEC | 1175 #ifdef SSR_DEC |
1183 } else { | 1176 } else { |
1184 ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape, | 1177 ssr_decode(&(ics1->ssr), hDecoder->fb, ics1->window_sequence, ics1->window_shape, |
1185 hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel], | 1178 hDecoder->window_shape_prev[cpe->channel], spec_coef1, hDecoder->time_out[cpe->channel], |
1186 hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel], | 1179 hDecoder->ssr_overlap[cpe->channel], hDecoder->ipqf_buffer[cpe->channel], |