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],