annotate libfaad2/sbr_hfgen.c @ 19382:7c6c205b88b6

trying to fix the reverting paragraph if you dissagree, dont hesitate to revert this commit or flame, but at least we should not claim that svn cannot revert commits except by recommiting the old version
author michael
date Sun, 13 Aug 2006 22:14:32 +0000
parents 59b6fa5b4201
children e83eef58b30a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
1 /*
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
2 ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
3 ** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
4 **
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
5 ** This program is free software; you can redistribute it and/or modify
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
6 ** it under the terms of the GNU General Public License as published by
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
7 ** the Free Software Foundation; either version 2 of the License, or
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
8 ** (at your option) any later version.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
9 **
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
10 ** This program is distributed in the hope that it will be useful,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
13 ** GNU General Public License for more details.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
14 **
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
15 ** You should have received a copy of the GNU General Public License
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
16 ** along with this program; if not, write to the Free Software
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
17 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
18 **
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
19 ** Any non-GPL usage of this software or parts of this software is strictly
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
20 ** forbidden.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
21 **
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
22 ** Commercial non-GPL licensing of this software is possible.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
23 ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
24 **
18141
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
25 ** $Id: sbr_hfgen.c,v 1.22 2004/09/08 09:43:11 gcp Exp $
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
26 **/
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
27
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
28 /* High Frequency generation */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
29
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
30 #include "common.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
31 #include "structs.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
32
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
33 #ifdef SBR_DEC
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
34
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
35 #include "sbr_syntax.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
36 #include "sbr_hfgen.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
37 #include "sbr_fbt.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
38
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
39
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
40 /* static function declarations */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
41 #ifdef SBR_LOW_POWER
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
42 static void calc_prediction_coef_lp(sbr_info *sbr, qmf_t Xlow[MAX_NTSRHFG][64],
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
43 complex_t *alpha_0, complex_t *alpha_1, real_t *rxx);
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
44 static void calc_aliasing_degree(sbr_info *sbr, real_t *rxx, real_t *deg);
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
45 #else
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
46 static void calc_prediction_coef(sbr_info *sbr, qmf_t Xlow[MAX_NTSRHFG][64],
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
47 complex_t *alpha_0, complex_t *alpha_1, uint8_t k);
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
48 #endif
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
49 static void calc_chirp_factors(sbr_info *sbr, uint8_t ch);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
50 static void patch_construction(sbr_info *sbr);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
51
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
52
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
53 void hf_generation(sbr_info *sbr, qmf_t Xlow[MAX_NTSRHFG][64],
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
54 qmf_t Xhigh[MAX_NTSRHFG][64]
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
55 #ifdef SBR_LOW_POWER
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
56 ,real_t *deg
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
57 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
58 ,uint8_t ch)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
59 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
60 uint8_t l, i, x;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
61 ALIGN complex_t alpha_0[64], alpha_1[64];
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
62 #ifdef SBR_LOW_POWER
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
63 ALIGN real_t rxx[64];
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
64 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
65
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
66 uint8_t offset = sbr->tHFAdj;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
67 uint8_t first = sbr->t_E[ch][0];
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
68 uint8_t last = sbr->t_E[ch][sbr->L_E[ch]];
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
69
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
70 calc_chirp_factors(sbr, ch);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
71
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
72 #ifdef SBR_LOW_POWER
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
73 memset(deg, 0, 64*sizeof(real_t));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
74 #endif
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
75
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
76 if ((ch == 0) && (sbr->Reset))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
77 patch_construction(sbr);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
78
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
79 /* calculate the prediction coefficients */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
80 #ifdef SBR_LOW_POWER
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
81 calc_prediction_coef_lp(sbr, Xlow, alpha_0, alpha_1, rxx);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
82 calc_aliasing_degree(sbr, rxx, deg);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
83 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
84
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
85 /* actual HF generation */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
86 for (i = 0; i < sbr->noPatches; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
87 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
88 for (x = 0; x < sbr->patchNoSubbands[i]; x++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
89 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
90 real_t a0_r, a0_i, a1_r, a1_i;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
91 real_t bw, bw2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
92 uint8_t q, p, k, g;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
93
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
94 /* find the low and high band for patching */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
95 k = sbr->kx + x;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
96 for (q = 0; q < i; q++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
97 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
98 k += sbr->patchNoSubbands[q];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
99 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
100 p = sbr->patchStartSubband[i] + x;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
101
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
102 #ifdef SBR_LOW_POWER
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
103 if (x != 0 /*x < sbr->patchNoSubbands[i]-1*/)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
104 deg[k] = deg[p];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
105 else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
106 deg[k] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
107 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
108
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
109 g = sbr->table_map_k_to_g[k];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
110
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
111 bw = sbr->bwArray[ch][g];
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
112 bw2 = MUL_C(bw, bw);
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
113
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
114 /* do the patching */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
115 /* with or without filtering */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
116 if (bw2 > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
117 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
118 real_t temp1_r, temp2_r, temp3_r;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
119 #ifndef SBR_LOW_POWER
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
120 real_t temp1_i, temp2_i, temp3_i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
121 calc_prediction_coef(sbr, Xlow, alpha_0, alpha_1, p);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
122 #endif
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
123
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
124 a0_r = MUL_C(RE(alpha_0[p]), bw);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
125 a1_r = MUL_C(RE(alpha_1[p]), bw2);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
126 #ifndef SBR_LOW_POWER
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
127 a0_i = MUL_C(IM(alpha_0[p]), bw);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
128 a1_i = MUL_C(IM(alpha_1[p]), bw2);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
129 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
130
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
131 temp2_r = QMF_RE(Xlow[first - 2 + offset][p]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
132 temp3_r = QMF_RE(Xlow[first - 1 + offset][p]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
133 #ifndef SBR_LOW_POWER
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
134 temp2_i = QMF_IM(Xlow[first - 2 + offset][p]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
135 temp3_i = QMF_IM(Xlow[first - 1 + offset][p]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
136 #endif
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
137 for (l = first; l < last; l++)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
138 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
139 temp1_r = temp2_r;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
140 temp2_r = temp3_r;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
141 temp3_r = QMF_RE(Xlow[l + offset][p]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
142 #ifndef SBR_LOW_POWER
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
143 temp1_i = temp2_i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
144 temp2_i = temp3_i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
145 temp3_i = QMF_IM(Xlow[l + offset][p]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
146 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
147
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
148 #ifdef SBR_LOW_POWER
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
149 QMF_RE(Xhigh[l + offset][k]) =
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
150 temp3_r
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
151 +(MUL_R(a0_r, temp2_r) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
152 MUL_R(a1_r, temp1_r));
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
153 #else
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
154 QMF_RE(Xhigh[l + offset][k]) =
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
155 temp3_r
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
156 +(MUL_R(a0_r, temp2_r) -
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
157 MUL_R(a0_i, temp2_i) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
158 MUL_R(a1_r, temp1_r) -
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
159 MUL_R(a1_i, temp1_i));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
160 QMF_IM(Xhigh[l + offset][k]) =
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
161 temp3_i
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
162 +(MUL_R(a0_i, temp2_r) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
163 MUL_R(a0_r, temp2_i) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
164 MUL_R(a1_i, temp1_r) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
165 MUL_R(a1_r, temp1_i));
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
166 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
167 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
168 } else {
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
169 for (l = first; l < last; l++)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
170 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
171 QMF_RE(Xhigh[l + offset][k]) = QMF_RE(Xlow[l + offset][p]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
172 #ifndef SBR_LOW_POWER
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
173 QMF_IM(Xhigh[l + offset][k]) = QMF_IM(Xlow[l + offset][p]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
174 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
175 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
176 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
177 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
178 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
179
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
180 if (sbr->Reset)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
181 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
182 limiter_frequency_table(sbr);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
183 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
184 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
185
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
186 typedef struct
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
187 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
188 complex_t r01;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
189 complex_t r02;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
190 complex_t r11;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
191 complex_t r12;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
192 complex_t r22;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
193 real_t det;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
194 } acorr_coef;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
195
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
196 #ifdef SBR_LOW_POWER
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
197 static void auto_correlation(sbr_info *sbr, acorr_coef *ac,
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
198 qmf_t buffer[MAX_NTSRHFG][64],
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
199 uint8_t bd, uint8_t len)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
200 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
201 real_t r01 = 0, r02 = 0, r11 = 0;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
202 int8_t j;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
203 uint8_t offset = sbr->tHFAdj;
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
204 #ifdef FIXED_POINT
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
205 const real_t rel = FRAC_CONST(0.999999); // 1 / (1 + 1e-6f);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
206 uint32_t maxi = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
207 uint32_t pow2, exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
208 #else
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
209 const real_t rel = 1 / (1 + 1e-6f);
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
210 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
211
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
212
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
213 #ifdef FIXED_POINT
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
214 mask = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
215
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
216 for (j = (offset-2); j < (len + offset); j++)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
217 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
218 real_t x;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
219 x = QMF_RE(buffer[j][bd])>>REAL_BITS;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
220 mask |= x ^ (x >> 31);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
221 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
222
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
223 exp = wl_min_lzc(mask);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
224
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
225 /* improves accuracy */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
226 if (exp > 0)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
227 exp -= 1;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
228
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
229 for (j = offset; j < len + offset; j++)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
230 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
231 real_t buf_j = ((QMF_RE(buffer[j][bd])+(1<<(exp-1)))>>exp);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
232 real_t buf_j_1 = ((QMF_RE(buffer[j-1][bd])+(1<<(exp-1)))>>exp);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
233 real_t buf_j_2 = ((QMF_RE(buffer[j-2][bd])+(1<<(exp-1)))>>exp);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
234
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
235 /* normalisation with rounding */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
236 r01 += MUL_R(buf_j, buf_j_1);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
237 r02 += MUL_R(buf_j, buf_j_2);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
238 r11 += MUL_R(buf_j_1, buf_j_1);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
239 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
240 RE(ac->r12) = r01 -
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
241 MUL_R(((QMF_RE(buffer[len+offset-1][bd])+(1<<(exp-1)))>>exp), ((QMF_RE(buffer[len+offset-2][bd])+(1<<(exp-1)))>>exp)) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
242 MUL_R(((QMF_RE(buffer[offset-1][bd])+(1<<(exp-1)))>>exp), ((QMF_RE(buffer[offset-2][bd])+(1<<(exp-1)))>>exp));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
243 RE(ac->r22) = r11 -
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
244 MUL_R(((QMF_RE(buffer[len+offset-2][bd])+(1<<(exp-1)))>>exp), ((QMF_RE(buffer[len+offset-2][bd])+(1<<(exp-1)))>>exp)) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
245 MUL_R(((QMF_RE(buffer[offset-2][bd])+(1<<(exp-1)))>>exp), ((QMF_RE(buffer[offset-2][bd])+(1<<(exp-1)))>>exp));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
246 #else
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
247 for (j = offset; j < len + offset; j++)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
248 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
249 r01 += QMF_RE(buffer[j][bd]) * QMF_RE(buffer[j-1][bd]);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
250 r02 += QMF_RE(buffer[j][bd]) * QMF_RE(buffer[j-2][bd]);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
251 r11 += QMF_RE(buffer[j-1][bd]) * QMF_RE(buffer[j-1][bd]);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
252 }
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
253 RE(ac->r12) = r01 -
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
254 QMF_RE(buffer[len+offset-1][bd]) * QMF_RE(buffer[len+offset-2][bd]) +
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
255 QMF_RE(buffer[offset-1][bd]) * QMF_RE(buffer[offset-2][bd]);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
256 RE(ac->r22) = r11 -
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
257 QMF_RE(buffer[len+offset-2][bd]) * QMF_RE(buffer[len+offset-2][bd]) +
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
258 QMF_RE(buffer[offset-2][bd]) * QMF_RE(buffer[offset-2][bd]);
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
259 #endif
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
260 RE(ac->r01) = r01;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
261 RE(ac->r02) = r02;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
262 RE(ac->r11) = r11;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
263
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
264 ac->det = MUL_R(RE(ac->r11), RE(ac->r22)) - MUL_F(MUL_R(RE(ac->r12), RE(ac->r12)), rel);
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
265 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
266 #else
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
267 static void auto_correlation(sbr_info *sbr, acorr_coef *ac, qmf_t buffer[MAX_NTSRHFG][64],
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
268 uint8_t bd, uint8_t len)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
269 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
270 real_t r01r = 0, r01i = 0, r02r = 0, r02i = 0, r11r = 0;
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
271 real_t temp1_r, temp1_i, temp2_r, temp2_i, temp3_r, temp3_i, temp4_r, temp4_i, temp5_r, temp5_i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
272 #ifdef FIXED_POINT
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
273 const real_t rel = FRAC_CONST(0.999999); // 1 / (1 + 1e-6f);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
274 uint32_t mask, exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
275 real_t pow2_to_exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
276 #else
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
277 const real_t rel = 1 / (1 + 1e-6f);
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
278 #endif
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
279 int8_t j;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
280 uint8_t offset = sbr->tHFAdj;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
281
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
282 #ifdef FIXED_POINT
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
283 mask = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
284
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
285 for (j = (offset-2); j < (len + offset); j++)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
286 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
287 real_t x;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
288 x = QMF_RE(buffer[j][bd])>>REAL_BITS;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
289 mask |= x ^ (x >> 31);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
290 x = QMF_IM(buffer[j][bd])>>REAL_BITS;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
291 mask |= x ^ (x >> 31);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
292 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
293
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
294 exp = wl_min_lzc(mask);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
295
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
296 /* improves accuracy */
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
297 if (exp > 0)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
298 exp -= 1;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
299
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
300 pow2_to_exp = 1<<(exp-1);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
301
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
302 temp2_r = (QMF_RE(buffer[offset-2][bd]) + pow2_to_exp) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
303 temp2_i = (QMF_IM(buffer[offset-2][bd]) + pow2_to_exp) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
304 temp3_r = (QMF_RE(buffer[offset-1][bd]) + pow2_to_exp) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
305 temp3_i = (QMF_IM(buffer[offset-1][bd]) + pow2_to_exp) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
306 // Save these because they are needed after loop
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
307 temp4_r = temp2_r;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
308 temp4_i = temp2_i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
309 temp5_r = temp3_r;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
310 temp5_i = temp3_i;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
311
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
312 for (j = offset; j < len + offset; j++)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
313 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
314 temp1_r = temp2_r; // temp1_r = (QMF_RE(buffer[offset-2][bd] + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
315 temp1_i = temp2_i; // temp1_i = (QMF_IM(buffer[offset-2][bd] + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
316 temp2_r = temp3_r; // temp2_r = (QMF_RE(buffer[offset-1][bd] + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
317 temp2_i = temp3_i; // temp2_i = (QMF_IM(buffer[offset-1][bd] + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
318 temp3_r = (QMF_RE(buffer[j][bd]) + pow2_to_exp) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
319 temp3_i = (QMF_IM(buffer[j][bd]) + pow2_to_exp) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
320 r01r += MUL_R(temp3_r, temp2_r) + MUL_R(temp3_i, temp2_i);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
321 r01i += MUL_R(temp3_i, temp2_r) - MUL_R(temp3_r, temp2_i);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
322 r02r += MUL_R(temp3_r, temp1_r) + MUL_R(temp3_i, temp1_i);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
323 r02i += MUL_R(temp3_i, temp1_r) - MUL_R(temp3_r, temp1_i);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
324 r11r += MUL_R(temp2_r, temp2_r) + MUL_R(temp2_i, temp2_i);
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
325 }
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
326
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
327 // These are actual values in temporary variable at this point
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
328 // temp1_r = (QMF_RE(buffer[len+offset-1-2][bd] + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
329 // temp1_i = (QMF_IM(buffer[len+offset-1-2][bd] + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
330 // temp2_r = (QMF_RE(buffer[len+offset-1-1][bd] + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
331 // temp2_i = (QMF_IM(buffer[len+offset-1-1][bd] + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
332 // temp3_r = (QMF_RE(buffer[len+offset-1][bd]) + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
333 // temp3_i = (QMF_IM(buffer[len+offset-1][bd]) + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
334 // temp4_r = (QMF_RE(buffer[offset-2][bd]) + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
335 // temp4_i = (QMF_IM(buffer[offset-2][bd]) + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
336 // temp5_r = (QMF_RE(buffer[offset-1][bd]) + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
337 // temp5_i = (QMF_IM(buffer[offset-1][bd]) + (1<<(exp-1))) >> exp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
338
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
339 RE(ac->r12) = r01r -
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
340 (MUL_R(temp3_r, temp2_r) + MUL_R(temp3_i, temp2_i)) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
341 (MUL_R(temp5_r, temp4_r) + MUL_R(temp5_i, temp4_i));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
342 IM(ac->r12) = r01i -
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
343 (MUL_R(temp3_i, temp2_r) - MUL_R(temp3_r, temp2_i)) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
344 (MUL_R(temp5_i, temp4_r) - MUL_R(temp5_r, temp4_i));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
345 RE(ac->r22) = r11r -
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
346 (MUL_R(temp2_r, temp2_r) + MUL_R(temp2_i, temp2_i)) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
347 (MUL_R(temp4_r, temp4_r) + MUL_R(temp4_i, temp4_i));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
348
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
349 #else
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
350
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
351 temp2_r = QMF_RE(buffer[offset-2][bd]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
352 temp2_i = QMF_IM(buffer[offset-2][bd]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
353 temp3_r = QMF_RE(buffer[offset-1][bd]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
354 temp3_i = QMF_IM(buffer[offset-1][bd]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
355 // Save these because they are needed after loop
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
356 temp4_r = temp2_r;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
357 temp4_i = temp2_i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
358 temp5_r = temp3_r;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
359 temp5_i = temp3_i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
360
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
361 for (j = offset; j < len + offset; j++)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
362 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
363 temp1_r = temp2_r; // temp1_r = QMF_RE(buffer[j-2][bd];
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
364 temp1_i = temp2_i; // temp1_i = QMF_IM(buffer[j-2][bd];
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
365 temp2_r = temp3_r; // temp2_r = QMF_RE(buffer[j-1][bd];
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
366 temp2_i = temp3_i; // temp2_i = QMF_IM(buffer[j-1][bd];
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
367 temp3_r = QMF_RE(buffer[j][bd]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
368 temp3_i = QMF_IM(buffer[j][bd]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
369 r01r += temp3_r * temp2_r + temp3_i * temp2_i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
370 r01i += temp3_i * temp2_r - temp3_r * temp2_i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
371 r02r += temp3_r * temp1_r + temp3_i * temp1_i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
372 r02i += temp3_i * temp1_r - temp3_r * temp1_i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
373 r11r += temp2_r * temp2_r + temp2_i * temp2_i;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
374 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
375
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
376 // These are actual values in temporary variable at this point
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
377 // temp1_r = QMF_RE(buffer[len+offset-1-2][bd];
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
378 // temp1_i = QMF_IM(buffer[len+offset-1-2][bd];
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
379 // temp2_r = QMF_RE(buffer[len+offset-1-1][bd];
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
380 // temp2_i = QMF_IM(buffer[len+offset-1-1][bd];
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
381 // temp3_r = QMF_RE(buffer[len+offset-1][bd]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
382 // temp3_i = QMF_IM(buffer[len+offset-1][bd]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
383 // temp4_r = QMF_RE(buffer[offset-2][bd]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
384 // temp4_i = QMF_IM(buffer[offset-2][bd]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
385 // temp5_r = QMF_RE(buffer[offset-1][bd]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
386 // temp5_i = QMF_IM(buffer[offset-1][bd]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
387
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
388 RE(ac->r12) = r01r -
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
389 (temp3_r * temp2_r + temp3_i * temp2_i) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
390 (temp5_r * temp4_r + temp5_i * temp4_i);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
391 IM(ac->r12) = r01i -
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
392 (temp3_i * temp2_r - temp3_r * temp2_i) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
393 (temp5_i * temp4_r - temp5_r * temp4_i);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
394 RE(ac->r22) = r11r -
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
395 (temp2_r * temp2_r + temp2_i * temp2_i) +
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
396 (temp4_r * temp4_r + temp4_i * temp4_i);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
397
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
398 #endif
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
399
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
400 RE(ac->r01) = r01r;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
401 IM(ac->r01) = r01i;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
402 RE(ac->r02) = r02r;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
403 IM(ac->r02) = r02i;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
404 RE(ac->r11) = r11r;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
405
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
406 ac->det = MUL_R(RE(ac->r11), RE(ac->r22)) - MUL_F(rel, (MUL_R(RE(ac->r12), RE(ac->r12)) + MUL_R(IM(ac->r12), IM(ac->r12))));
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
407 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
408 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
409
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
410 /* calculate linear prediction coefficients using the covariance method */
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
411 #ifndef SBR_LOW_POWER
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
412 static void calc_prediction_coef(sbr_info *sbr, qmf_t Xlow[MAX_NTSRHFG][64],
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
413 complex_t *alpha_0, complex_t *alpha_1, uint8_t k)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
414 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
415 real_t tmp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
416 acorr_coef ac;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
417
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
418 auto_correlation(sbr, &ac, Xlow, k, sbr->numTimeSlotsRate + 6);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
419
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
420 if (ac.det == 0)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
421 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
422 RE(alpha_1[k]) = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
423 IM(alpha_1[k]) = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
424 } else {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
425 #ifdef FIXED_POINT
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
426 tmp = (MUL_R(RE(ac.r01), RE(ac.r12)) - MUL_R(IM(ac.r01), IM(ac.r12)) - MUL_R(RE(ac.r02), RE(ac.r11)));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
427 RE(alpha_1[k]) = DIV_R(tmp, ac.det);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
428 tmp = (MUL_R(IM(ac.r01), RE(ac.r12)) + MUL_R(RE(ac.r01), IM(ac.r12)) - MUL_R(IM(ac.r02), RE(ac.r11)));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
429 IM(alpha_1[k]) = DIV_R(tmp, ac.det);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
430 #else
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
431 tmp = REAL_CONST(1.0) / ac.det;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
432 RE(alpha_1[k]) = (MUL_R(RE(ac.r01), RE(ac.r12)) - MUL_R(IM(ac.r01), IM(ac.r12)) - MUL_R(RE(ac.r02), RE(ac.r11))) * tmp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
433 IM(alpha_1[k]) = (MUL_R(IM(ac.r01), RE(ac.r12)) + MUL_R(RE(ac.r01), IM(ac.r12)) - MUL_R(IM(ac.r02), RE(ac.r11))) * tmp;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
434 #endif
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
435 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
436
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
437 if (RE(ac.r11) == 0)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
438 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
439 RE(alpha_0[k]) = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
440 IM(alpha_0[k]) = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
441 } else {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
442 #ifdef FIXED_POINT
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
443 tmp = -(RE(ac.r01) + MUL_R(RE(alpha_1[k]), RE(ac.r12)) + MUL_R(IM(alpha_1[k]), IM(ac.r12)));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
444 RE(alpha_0[k]) = DIV_R(tmp, RE(ac.r11));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
445 tmp = -(IM(ac.r01) + MUL_R(IM(alpha_1[k]), RE(ac.r12)) - MUL_R(RE(alpha_1[k]), IM(ac.r12)));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
446 IM(alpha_0[k]) = DIV_R(tmp, RE(ac.r11));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
447 #else
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
448 tmp = 1.0f / RE(ac.r11);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
449 RE(alpha_0[k]) = -(RE(ac.r01) + MUL_R(RE(alpha_1[k]), RE(ac.r12)) + MUL_R(IM(alpha_1[k]), IM(ac.r12))) * tmp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
450 IM(alpha_0[k]) = -(IM(ac.r01) + MUL_R(IM(alpha_1[k]), RE(ac.r12)) - MUL_R(RE(alpha_1[k]), IM(ac.r12))) * tmp;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
451 #endif
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
452 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
454 if ((MUL_R(RE(alpha_0[k]),RE(alpha_0[k])) + MUL_R(IM(alpha_0[k]),IM(alpha_0[k])) >= REAL_CONST(16)) ||
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
455 (MUL_R(RE(alpha_1[k]),RE(alpha_1[k])) + MUL_R(IM(alpha_1[k]),IM(alpha_1[k])) >= REAL_CONST(16)))
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
456 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
457 RE(alpha_0[k]) = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
458 IM(alpha_0[k]) = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
459 RE(alpha_1[k]) = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
460 IM(alpha_1[k]) = 0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
461 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
462 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
463 #else
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
464 static void calc_prediction_coef_lp(sbr_info *sbr, qmf_t Xlow[MAX_NTSRHFG][64],
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
465 complex_t *alpha_0, complex_t *alpha_1, real_t *rxx)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
466 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
467 uint8_t k;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
468 real_t tmp;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
469 acorr_coef ac;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
470
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
471 for (k = 1; k < sbr->f_master[0]; k++)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
472 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
473 auto_correlation(sbr, &ac, Xlow, k, sbr->numTimeSlotsRate + 6);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
474
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
475 if (ac.det == 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
476 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
477 RE(alpha_0[k]) = 0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
478 RE(alpha_1[k]) = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
479 } else {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
480 tmp = MUL_R(RE(ac.r01), RE(ac.r22)) - MUL_R(RE(ac.r12), RE(ac.r02));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
481 RE(alpha_0[k]) = DIV_R(tmp, (-ac.det));
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
482
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
483 tmp = MUL_R(RE(ac.r01), RE(ac.r12)) - MUL_R(RE(ac.r02), RE(ac.r11));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
484 RE(alpha_1[k]) = DIV_R(tmp, ac.det);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
485 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
486
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
487 if ((RE(alpha_0[k]) >= REAL_CONST(4)) || (RE(alpha_1[k]) >= REAL_CONST(4)))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
488 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
489 RE(alpha_0[k]) = REAL_CONST(0);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
490 RE(alpha_1[k]) = REAL_CONST(0);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
491 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
492
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
493 /* reflection coefficient */
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
494 if (RE(ac.r11) == 0)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
495 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
496 rxx[k] = COEF_CONST(0.0);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
497 } else {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
498 rxx[k] = DIV_C(RE(ac.r01), RE(ac.r11));
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
499 rxx[k] = -rxx[k];
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
500 if (rxx[k] > COEF_CONST(1.0)) rxx[k] = COEF_CONST(1.0);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
501 if (rxx[k] < COEF_CONST(-1.0)) rxx[k] = COEF_CONST(-1.0);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
502 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
503 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
504 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
505
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
506 static void calc_aliasing_degree(sbr_info *sbr, real_t *rxx, real_t *deg)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
507 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
508 uint8_t k;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
509
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
510 rxx[0] = COEF_CONST(0.0);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
511 deg[1] = COEF_CONST(0.0);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
512
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
513 for (k = 2; k < sbr->k0; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
514 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
515 deg[k] = 0.0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
516
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
517 if ((k % 2 == 0) && (rxx[k] < COEF_CONST(0.0)))
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
518 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
519 if (rxx[k-1] < 0.0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
520 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
521 deg[k] = COEF_CONST(1.0);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
522
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
523 if (rxx[k-2] > COEF_CONST(0.0))
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
524 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
525 deg[k-1] = COEF_CONST(1.0) - MUL_C(rxx[k-1], rxx[k-1]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
526 }
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
527 } else if (rxx[k-2] > COEF_CONST(0.0)) {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
528 deg[k] = COEF_CONST(1.0) - MUL_C(rxx[k-1], rxx[k-1]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
529 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
530 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
531
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
532 if ((k % 2 == 1) && (rxx[k] > COEF_CONST(0.0)))
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
533 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
534 if (rxx[k-1] > COEF_CONST(0.0))
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
535 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
536 deg[k] = COEF_CONST(1.0);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
537
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
538 if (rxx[k-2] < COEF_CONST(0.0))
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
539 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
540 deg[k-1] = COEF_CONST(1.0) - MUL_C(rxx[k-1], rxx[k-1]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
541 }
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
542 } else if (rxx[k-2] < COEF_CONST(0.0)) {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
543 deg[k] = COEF_CONST(1.0) - MUL_C(rxx[k-1], rxx[k-1]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
544 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
545 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
546 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
547 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
548 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
549
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
550 /* FIXED POINT: bwArray = COEF */
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
551 static real_t mapNewBw(uint8_t invf_mode, uint8_t invf_mode_prev)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
552 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
553 switch (invf_mode)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
554 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
555 case 1: /* LOW */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
556 if (invf_mode_prev == 0) /* NONE */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
557 return COEF_CONST(0.6);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
558 else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
559 return COEF_CONST(0.75);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
560
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
561 case 2: /* MID */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
562 return COEF_CONST(0.9);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
563
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
564 case 3: /* HIGH */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
565 return COEF_CONST(0.98);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
566
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
567 default: /* NONE */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
568 if (invf_mode_prev == 1) /* LOW */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
569 return COEF_CONST(0.6);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
570 else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
571 return COEF_CONST(0.0);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
572 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
573 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
574
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
575 /* FIXED POINT: bwArray = COEF */
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
576 static void calc_chirp_factors(sbr_info *sbr, uint8_t ch)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
577 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
578 uint8_t i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
579
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
580 for (i = 0; i < sbr->N_Q; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
581 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
582 sbr->bwArray[ch][i] = mapNewBw(sbr->bs_invf_mode[ch][i], sbr->bs_invf_mode_prev[ch][i]);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
583
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
584 if (sbr->bwArray[ch][i] < sbr->bwArray_prev[ch][i])
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
585 sbr->bwArray[ch][i] = MUL_F(sbr->bwArray[ch][i], FRAC_CONST(0.75)) + MUL_F(sbr->bwArray_prev[ch][i], FRAC_CONST(0.25));
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
586 else
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
587 sbr->bwArray[ch][i] = MUL_F(sbr->bwArray[ch][i], FRAC_CONST(0.90625)) + MUL_F(sbr->bwArray_prev[ch][i], FRAC_CONST(0.09375));
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
588
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
589 if (sbr->bwArray[ch][i] < COEF_CONST(0.015625))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
590 sbr->bwArray[ch][i] = COEF_CONST(0.0);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
591
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
592 if (sbr->bwArray[ch][i] >= COEF_CONST(0.99609375))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
593 sbr->bwArray[ch][i] = COEF_CONST(0.99609375);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
594
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
595 sbr->bwArray_prev[ch][i] = sbr->bwArray[ch][i];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
596 sbr->bs_invf_mode_prev[ch][i] = sbr->bs_invf_mode[ch][i];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
597 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
598 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
599
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
600 static void patch_construction(sbr_info *sbr)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
601 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
602 uint8_t i, k;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
603 uint8_t odd, sb;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
604 uint8_t msb = sbr->k0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
605 uint8_t usb = sbr->kx;
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
606 uint8_t goalSbTab[] = { 21, 23, 32, 43, 46, 64, 85, 93, 128, 0, 0, 0 };
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
607 /* (uint8_t)(2.048e6/sbr->sample_rate + 0.5); */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
608 uint8_t goalSb = goalSbTab[get_sr_index(sbr->sample_rate)];
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
609
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
610 sbr->noPatches = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
611
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
612 if (goalSb < (sbr->kx + sbr->M))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
613 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
614 for (i = 0, k = 0; sbr->f_master[i] < goalSb; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
615 k = i+1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
616 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
617 k = sbr->N_master;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
618 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
619
18141
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
620 if (sbr->N_master == 0)
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
621 {
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
622 sbr->noPatches = 0;
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
623 sbr->patchNoSubbands[0] = 0;
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
624 sbr->patchStartSubband[0] = 0;
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
625
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
626 return;
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
627 }
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
628
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
629 do
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
630 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
631 uint8_t j = k + 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
632
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
633 do
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
634 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
635 j--;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
636
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
637 sb = sbr->f_master[j];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
638 odd = (sb - 2 + sbr->k0) % 2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
639 } while (sb > (sbr->k0 - 1 + msb - odd));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
640
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
641 sbr->patchNoSubbands[sbr->noPatches] = max(sb - usb, 0);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
642 sbr->patchStartSubband[sbr->noPatches] = sbr->k0 - odd -
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
643 sbr->patchNoSubbands[sbr->noPatches];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
644
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
645 if (sbr->patchNoSubbands[sbr->noPatches] > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
646 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
647 usb = sb;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
648 msb = sb;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
649 sbr->noPatches++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
650 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
651 msb = sbr->kx;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
652 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
653
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
654 if (sbr->f_master[k] - sb < 3)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
655 k = sbr->N_master;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
656 } while (sb != (sbr->kx + sbr->M));
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
657
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
658 if ((sbr->patchNoSubbands[sbr->noPatches-1] < 3) && (sbr->noPatches > 1))
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
659 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
660 sbr->noPatches--;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
661 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
662
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
663 sbr->noPatches = min(sbr->noPatches, 5);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
664 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
665
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
666 #endif