annotate libfaad2/sbr_fbt.c @ 31447:bb6a85295322

Shut up strict prototype warnings from the gui subdirectory. The GTK headers spit out too many warnings and drown out everything useful.
author diego
date Mon, 21 Jun 2010 10:58:02 +0000
parents e83eef58b30a
children
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
29264
e83eef58b30a Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents: 18141
diff changeset
4 **
10725
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.
29264
e83eef58b30a Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents: 18141
diff changeset
9 **
10725
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.
29264
e83eef58b30a Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents: 18141
diff changeset
14 **
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
15 ** You should have received a copy of the GNU General Public License
29264
e83eef58b30a Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents: 18141
diff changeset
16 ** along with this program; if not, write to the Free Software
10725
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_fbt.c,v 1.17 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 /* Calculate frequency band tables */
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 <stdlib.h>
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
36
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
37 #include "sbr_syntax.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
38 #include "sbr_fbt.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
39
12527
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 static int32_t find_bands(uint8_t warp, uint8_t bands, uint8_t a0, uint8_t a1);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
42
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
43
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
44 /* calculate the start QMF channel for the master frequency band table */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
45 /* parameter is also called k0 */
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
46 uint8_t qmf_start_channel(uint8_t bs_start_freq, uint8_t bs_samplerate_mode,
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
47 uint32_t sample_rate)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
48 {
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
49 static const uint8_t startMinTable[12] = { 7, 7, 10, 11, 12, 16, 16,
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
50 17, 24, 32, 35, 48 };
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
51 static const uint8_t offsetIndexTable[12] = { 5, 5, 4, 4, 4, 3, 2, 1, 0,
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
52 6, 6, 6 };
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
53 static const int8_t offset[7][16] = {
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
54 { -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7 },
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
55 { -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13 },
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
56 { -5, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16 },
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
57 { -6, -4, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16 },
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
58 { -4, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20 },
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
59 { -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20, 24 },
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
60 { 0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 20, 24, 28, 33 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
61 };
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
62 uint8_t startMin = startMinTable[get_sr_index(sample_rate)];
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
63 uint8_t offsetIndex = offsetIndexTable[get_sr_index(sample_rate)];
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
64
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
65 #if 0 /* replaced with table (startMinTable) */
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
66 if (sample_rate >= 64000)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
67 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
68 startMin = (uint8_t)((5000.*128.)/(float)sample_rate + 0.5);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
69 } else if (sample_rate < 32000) {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
70 startMin = (uint8_t)((3000.*128.)/(float)sample_rate + 0.5);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
71 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
72 startMin = (uint8_t)((4000.*128.)/(float)sample_rate + 0.5);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
73 }
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
74 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
75
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
76 if (bs_samplerate_mode)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
77 {
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
78 return startMin + offset[offsetIndex][bs_start_freq];
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
79
29264
e83eef58b30a Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents: 18141
diff changeset
80 #if 0 /* replaced by offsetIndexTable */
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
81 switch (sample_rate)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
82 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
83 case 16000:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
84 return startMin + offset[0][bs_start_freq];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
85 case 22050:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
86 return startMin + offset[1][bs_start_freq];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
87 case 24000:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
88 return startMin + offset[2][bs_start_freq];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
89 case 32000:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
90 return startMin + offset[3][bs_start_freq];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
91 default:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
92 if (sample_rate > 64000)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
93 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
94 return startMin + offset[5][bs_start_freq];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
95 } else { /* 44100 <= sample_rate <= 64000 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
96 return startMin + offset[4][bs_start_freq];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
97 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
98 }
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
99 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
100 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
101 return startMin + offset[6][bs_start_freq];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
102 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
103 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
104
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
105 static int longcmp(const void *a, const void *b)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
106 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
107 return ((int)(*(int32_t*)a - *(int32_t*)b));
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
108 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
109
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
110 /* calculate the stop QMF channel for the master frequency band table */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
111 /* parameter is also called k2 */
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
112 uint8_t qmf_stop_channel(uint8_t bs_stop_freq, uint32_t sample_rate,
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
113 uint8_t k0)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
114 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
115 if (bs_stop_freq == 15)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
116 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
117 return min(64, k0 * 3);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
118 } else if (bs_stop_freq == 14) {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
119 return min(64, k0 * 2);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
120 } else {
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
121 static const uint8_t stopMinTable[12] = { 13, 15, 20, 21, 23,
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
122 32, 32, 35, 48, 64, 70, 96 };
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
123 static const int8_t offset[12][14] = {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
124 { 0, 2, 4, 6, 8, 11, 14, 18, 22, 26, 31, 37, 44, 51 },
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
125 { 0, 2, 4, 6, 8, 11, 14, 18, 22, 26, 31, 36, 42, 49 },
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
126 { 0, 2, 4, 6, 8, 11, 14, 17, 21, 25, 29, 34, 39, 44 },
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
127 { 0, 2, 4, 6, 8, 11, 14, 17, 20, 24, 28, 33, 38, 43 },
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
128 { 0, 2, 4, 6, 8, 11, 14, 17, 20, 24, 28, 32, 36, 41 },
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
129 { 0, 2, 4, 6, 8, 10, 12, 14, 17, 20, 23, 26, 29, 32 },
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
130 { 0, 2, 4, 6, 8, 10, 12, 14, 17, 20, 23, 26, 29, 32 },
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
131 { 0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 20, 23, 26, 29 },
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
132 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16 },
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
133 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
134 { 0, -1, -2, -3, -4, -5, -6, -6, -6, -6, -6, -6, -6, -6 },
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
135 { 0, -3, -6, -9, -12, -15, -18, -20, -22, -24, -26, -28, -30, -32 }
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
136 };
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
137 #if 0
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
138 uint8_t i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
139 int32_t stopDk[13], stopDk_t[14], k2;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
140 #endif
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
141 uint8_t stopMin = stopMinTable[get_sr_index(sample_rate)];
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
142
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
143 #if 0 /* replaced by table lookup */
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
144 if (sample_rate >= 64000)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
145 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
146 stopMin = (uint8_t)((10000.*128.)/(float)sample_rate + 0.5);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
147 } else if (sample_rate < 32000) {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
148 stopMin = (uint8_t)((6000.*128.)/(float)sample_rate + 0.5);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
149 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
150 stopMin = (uint8_t)((8000.*128.)/(float)sample_rate + 0.5);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
151 }
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
152 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
153
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
154 #if 0 /* replaced by table lookup */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
155 /* diverging power series */
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
156 for (i = 0; i <= 13; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
157 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
158 stopDk_t[i] = (int32_t)(stopMin*pow(64.0/stopMin, i/13.0) + 0.5);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
159 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
160 for (i = 0; i < 13; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
161 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
162 stopDk[i] = stopDk_t[i+1] - stopDk_t[i];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
163 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
164
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
165 /* needed? */
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
166 qsort(stopDk, 13, sizeof(stopDk[0]), longcmp);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
167
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
168 k2 = stopMin;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
169 for (i = 0; i < bs_stop_freq; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
170 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
171 k2 += stopDk[i];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
172 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
173 return min(64, k2);
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
174 #endif
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
175 /* bs_stop_freq <= 13 */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
176 return min(64, stopMin + offset[get_sr_index(sample_rate)][min(bs_stop_freq, 13)]);
10725
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 return 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
180 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
181
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
182 /* calculate the master frequency table from k0, k2, bs_freq_scale
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
183 and bs_alter_scale
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
184
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
185 version for bs_freq_scale = 0
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
186 */
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
187 uint8_t master_frequency_table_fs0(sbr_info *sbr, uint8_t k0, uint8_t k2,
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
188 uint8_t bs_alter_scale)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
189 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
190 int8_t incr;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
191 uint8_t k;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
192 uint8_t dk;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
193 uint32_t nrBands, k2Achieved;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
194 int32_t k2Diff, vDk[64] = {0};
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
195
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
196 /* mft only defined for k2 > k0 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
197 if (k2 <= k0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
198 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
199 sbr->N_master = 0;
18141
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
200 return 1;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
201 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
202
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
203 dk = bs_alter_scale ? 2 : 1;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
204
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
205 #if 0 /* replaced by float-less design */
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
206 nrBands = 2 * (int32_t)((float)(k2-k0)/(dk*2) + (-1+dk)/2.0f);
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
207 #else
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
208 if (bs_alter_scale)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
209 {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
210 nrBands = (((k2-k0+2)>>2)<<1);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
211 } else {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
212 nrBands = (((k2-k0)>>1)<<1);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
213 }
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
214 #endif
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
215 nrBands = min(nrBands, 63);
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
216 if (nrBands <= 0)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
217 return 1;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
218
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
219 k2Achieved = k0 + nrBands * dk;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
220 k2Diff = k2 - k2Achieved;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
221 for (k = 0; k < nrBands; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
222 vDk[k] = dk;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
223
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
224 if (k2Diff)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
225 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
226 incr = (k2Diff > 0) ? -1 : 1;
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
227 k = (uint8_t) ((k2Diff > 0) ? (nrBands-1) : 0);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
228
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
229 while (k2Diff != 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
230 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
231 vDk[k] -= incr;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
232 k += incr;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
233 k2Diff += incr;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
234 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
235 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
236
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
237 sbr->f_master[0] = k0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
238 for (k = 1; k <= nrBands; k++)
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
239 sbr->f_master[k] = (uint8_t)(sbr->f_master[k-1] + vDk[k-1]);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
240
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
241 sbr->N_master = (uint8_t)nrBands;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
242 sbr->N_master = (min(sbr->N_master, 64));
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
243
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
244 #if 0
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
245 printf("f_master[%d]: ", nrBands);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
246 for (k = 0; k <= nrBands; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
247 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
248 printf("%d ", sbr->f_master[k]);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
249 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
250 printf("\n");
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
251 #endif
12527
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 return 0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
254 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
255
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
256 /*
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
257 This function finds the number of bands using this formula:
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
258 bands * log(a1/a0)/log(2.0) + 0.5
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
259 */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
260 static int32_t find_bands(uint8_t warp, uint8_t bands, uint8_t a0, uint8_t a1)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
261 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
262 #ifdef FIXED_POINT
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
263 /* table with log2() values */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
264 static const real_t log2Table[65] = {
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
265 COEF_CONST(0.0), COEF_CONST(0.0), COEF_CONST(1.0000000000), COEF_CONST(1.5849625007),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
266 COEF_CONST(2.0000000000), COEF_CONST(2.3219280949), COEF_CONST(2.5849625007), COEF_CONST(2.8073549221),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
267 COEF_CONST(3.0000000000), COEF_CONST(3.1699250014), COEF_CONST(3.3219280949), COEF_CONST(3.4594316186),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
268 COEF_CONST(3.5849625007), COEF_CONST(3.7004397181), COEF_CONST(3.8073549221), COEF_CONST(3.9068905956),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
269 COEF_CONST(4.0000000000), COEF_CONST(4.0874628413), COEF_CONST(4.1699250014), COEF_CONST(4.2479275134),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
270 COEF_CONST(4.3219280949), COEF_CONST(4.3923174228), COEF_CONST(4.4594316186), COEF_CONST(4.5235619561),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
271 COEF_CONST(4.5849625007), COEF_CONST(4.6438561898), COEF_CONST(4.7004397181), COEF_CONST(4.7548875022),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
272 COEF_CONST(4.8073549221), COEF_CONST(4.8579809951), COEF_CONST(4.9068905956), COEF_CONST(4.9541963104),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
273 COEF_CONST(5.0000000000), COEF_CONST(5.0443941194), COEF_CONST(5.0874628413), COEF_CONST(5.1292830169),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
274 COEF_CONST(5.1699250014), COEF_CONST(5.2094533656), COEF_CONST(5.2479275134), COEF_CONST(5.2854022189),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
275 COEF_CONST(5.3219280949), COEF_CONST(5.3575520046), COEF_CONST(5.3923174228), COEF_CONST(5.4262647547),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
276 COEF_CONST(5.4594316186), COEF_CONST(5.4918530963), COEF_CONST(5.5235619561), COEF_CONST(5.5545888517),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
277 COEF_CONST(5.5849625007), COEF_CONST(5.6147098441), COEF_CONST(5.6438561898), COEF_CONST(5.6724253420),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
278 COEF_CONST(5.7004397181), COEF_CONST(5.7279204546), COEF_CONST(5.7548875022), COEF_CONST(5.7813597135),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
279 COEF_CONST(5.8073549221), COEF_CONST(5.8328900142), COEF_CONST(5.8579809951), COEF_CONST(5.8826430494),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
280 COEF_CONST(5.9068905956), COEF_CONST(5.9307373376), COEF_CONST(5.9541963104), COEF_CONST(5.9772799235),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
281 COEF_CONST(6.0)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
282 };
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
283 real_t r0 = log2Table[a0]; /* coef */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
284 real_t r1 = log2Table[a1]; /* coef */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
285 real_t r2 = (r1 - r0); /* coef */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
286
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
287 if (warp)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
288 r2 = MUL_C(r2, COEF_CONST(1.0/1.3));
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
289
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
290 /* convert r2 to real and then multiply and round */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
291 r2 = (r2 >> (COEF_BITS-REAL_BITS)) * bands + (1<<(REAL_BITS-1));
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
292
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
293 return (r2 >> REAL_BITS);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
294 #else
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
295 real_t div = (real_t)log(2.0);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
296 if (warp) div *= (real_t)1.3;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
297
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
298 return (int32_t)(bands * log((float)a1/(float)a0)/div + 0.5);
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
299 #endif
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
300 }
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
301
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
302 static real_t find_initial_power(uint8_t bands, uint8_t a0, uint8_t a1)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
303 {
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
304 #ifdef FIXED_POINT
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
305 /* table with log() values */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
306 static const real_t logTable[65] = {
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
307 COEF_CONST(0.0), COEF_CONST(0.0), COEF_CONST(0.6931471806), COEF_CONST(1.0986122887),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
308 COEF_CONST(1.3862943611), COEF_CONST(1.6094379124), COEF_CONST(1.7917594692), COEF_CONST(1.9459101491),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
309 COEF_CONST(2.0794415417), COEF_CONST(2.1972245773), COEF_CONST(2.3025850930), COEF_CONST(2.3978952728),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
310 COEF_CONST(2.4849066498), COEF_CONST(2.5649493575), COEF_CONST(2.6390573296), COEF_CONST(2.7080502011),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
311 COEF_CONST(2.7725887222), COEF_CONST(2.8332133441), COEF_CONST(2.8903717579), COEF_CONST(2.9444389792),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
312 COEF_CONST(2.9957322736), COEF_CONST(3.0445224377), COEF_CONST(3.0910424534), COEF_CONST(3.1354942159),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
313 COEF_CONST(3.1780538303), COEF_CONST(3.2188758249), COEF_CONST(3.2580965380), COEF_CONST(3.2958368660),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
314 COEF_CONST(3.3322045102), COEF_CONST(3.3672958300), COEF_CONST(3.4011973817), COEF_CONST(3.4339872045),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
315 COEF_CONST(3.4657359028), COEF_CONST(3.4965075615), COEF_CONST(3.5263605246), COEF_CONST(3.5553480615),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
316 COEF_CONST(3.5835189385), COEF_CONST(3.6109179126), COEF_CONST(3.6375861597), COEF_CONST(3.6635616461),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
317 COEF_CONST(3.6888794541), COEF_CONST(3.7135720667), COEF_CONST(3.7376696183), COEF_CONST(3.7612001157),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
318 COEF_CONST(3.7841896339), COEF_CONST(3.8066624898), COEF_CONST(3.8286413965), COEF_CONST(3.8501476017),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
319 COEF_CONST(3.8712010109), COEF_CONST(3.8918202981), COEF_CONST(3.9120230054), COEF_CONST(3.9318256327),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
320 COEF_CONST(3.9512437186), COEF_CONST(3.9702919136), COEF_CONST(3.9889840466), COEF_CONST(4.0073331852),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
321 COEF_CONST(4.0253516907), COEF_CONST(4.0430512678), COEF_CONST(4.0604430105), COEF_CONST(4.0775374439),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
322 COEF_CONST(4.0943445622), COEF_CONST(4.1108738642), COEF_CONST(4.1271343850), COEF_CONST(4.1431347264),
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
323 COEF_CONST(4.158883083)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
324 };
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
325 /* standard Taylor polynomial coefficients for exp(x) around 0 */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
326 /* a polynomial around x=1 is more precise, as most values are around 1.07,
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
327 but this is just fine already */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
328 static const real_t c1 = COEF_CONST(1.0);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
329 static const real_t c2 = COEF_CONST(1.0/2.0);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
330 static const real_t c3 = COEF_CONST(1.0/6.0);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
331 static const real_t c4 = COEF_CONST(1.0/24.0);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
332
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
333 real_t r0 = logTable[a0]; /* coef */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
334 real_t r1 = logTable[a1]; /* coef */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
335 real_t r2 = (r1 - r0) / bands; /* coef */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
336 real_t rexp = c1 + MUL_C((c1 + MUL_C((c2 + MUL_C((c3 + MUL_C(c4,r2)), r2)), r2)), r2);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
337
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
338 return (rexp >> (COEF_BITS-REAL_BITS)); /* real */
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
339 #else
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
340 return (real_t)pow((real_t)a1/(real_t)a0, 1.0/(real_t)bands);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
341 #endif
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
342 }
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
343
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
344 /*
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
345 version for bs_freq_scale > 0
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
346 */
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
347 uint8_t master_frequency_table(sbr_info *sbr, uint8_t k0, uint8_t k2,
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
348 uint8_t bs_freq_scale, uint8_t bs_alter_scale)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
349 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
350 uint8_t k, bands, twoRegions;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
351 uint8_t k1;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
352 uint8_t nrBand0, nrBand1;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
353 int32_t vDk0[64] = {0}, vDk1[64] = {0};
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
354 int32_t vk0[64] = {0}, vk1[64] = {0};
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
355 uint8_t temp1[] = { 6, 5, 4 };
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
356 real_t q, qk;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
357 int32_t A_1;
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
358 #ifdef FIXED_POINT
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
359 real_t rk2, rk0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
360 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
361
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
362 /* mft only defined for k2 > k0 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
363 if (k2 <= k0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
364 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
365 sbr->N_master = 0;
18141
59b6fa5b4201 Update to faad2 cvs 20040915+MPlayer fixes
rtognimp
parents: 14727
diff changeset
366 return 1;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
367 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
368
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
369 bands = temp1[bs_freq_scale-1];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
370
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
371 #ifdef FIXED_POINT
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
372 rk0 = (real_t)k0 << REAL_BITS;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
373 rk2 = (real_t)k2 << REAL_BITS;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
374 if (rk2 > MUL_C(rk0, COEF_CONST(2.2449)))
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
375 #else
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
376 if ((float)k2/(float)k0 > 2.2449)
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
377 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
378 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
379 twoRegions = 1;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
380 k1 = k0 << 1;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
381 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
382 twoRegions = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
383 k1 = k2;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
384 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
385
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
386 nrBand0 = (uint8_t)(2 * find_bands(0, bands, k0, k1));
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
387 nrBand0 = min(nrBand0, 63);
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
388 if (nrBand0 <= 0)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
389 return 1;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
390
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
391 q = find_initial_power(nrBand0, k0, k1);
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
392 #ifdef FIXED_POINT
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
393 qk = (real_t)k0 << REAL_BITS;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
394 //A_1 = (int32_t)((qk + REAL_CONST(0.5)) >> REAL_BITS);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
395 A_1 = k0;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
396 #else
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
397 qk = REAL_CONST(k0);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
398 A_1 = (int32_t)(qk + .5);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
399 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
400 for (k = 0; k <= nrBand0; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
401 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
402 int32_t A_0 = A_1;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
403 #ifdef FIXED_POINT
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
404 qk = MUL_R(qk,q);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
405 A_1 = (int32_t)((qk + REAL_CONST(0.5)) >> REAL_BITS);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
406 #else
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
407 qk *= q;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
408 A_1 = (int32_t)(qk + 0.5);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
409 #endif
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
410 vDk0[k] = A_1 - A_0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
411 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
412
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
413 /* needed? */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
414 qsort(vDk0, nrBand0, sizeof(vDk0[0]), longcmp);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
415
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
416 vk0[0] = k0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
417 for (k = 1; k <= nrBand0; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
418 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
419 vk0[k] = vk0[k-1] + vDk0[k-1];
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
420 if (vDk0[k-1] == 0)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
421 return 1;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
422 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
423
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
424 if (!twoRegions)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
425 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
426 for (k = 0; k <= nrBand0; k++)
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
427 sbr->f_master[k] = (uint8_t) vk0[k];
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
428
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
429 sbr->N_master = nrBand0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
430 sbr->N_master = min(sbr->N_master, 64);
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
431 return 0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
432 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
433
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
434 nrBand1 = (uint8_t)(2 * find_bands(1 /* warped */, bands, k1, k2));
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
435 nrBand1 = min(nrBand1, 63);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
436
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
437 q = find_initial_power(nrBand1, k1, k2);
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
438 #ifdef FIXED_POINT
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
439 qk = (real_t)k1 << REAL_BITS;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
440 //A_1 = (int32_t)((qk + REAL_CONST(0.5)) >> REAL_BITS);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
441 A_1 = k1;
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
442 #else
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
443 qk = REAL_CONST(k1);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
444 A_1 = (int32_t)(qk + .5);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
445 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
446 for (k = 0; k <= nrBand1 - 1; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
447 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
448 int32_t A_0 = A_1;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
449 #ifdef FIXED_POINT
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
450 qk = MUL_R(qk,q);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
451 A_1 = (int32_t)((qk + REAL_CONST(0.5)) >> REAL_BITS);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
452 #else
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
453 qk *= q;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
454 A_1 = (int32_t)(qk + 0.5);
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
455 #endif
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
456 vDk1[k] = A_1 - A_0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
457 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
458
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
459 if (vDk1[0] < vDk0[nrBand0 - 1])
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
460 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
461 int32_t change;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
462
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
463 /* needed? */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
464 qsort(vDk1, nrBand1 + 1, sizeof(vDk1[0]), longcmp);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
465 change = vDk0[nrBand0 - 1] - vDk1[0];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
466 vDk1[0] = vDk0[nrBand0 - 1];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
467 vDk1[nrBand1 - 1] = vDk1[nrBand1 - 1] - change;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
468 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
469
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
470 /* needed? */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
471 qsort(vDk1, nrBand1, sizeof(vDk1[0]), longcmp);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
472 vk1[0] = k1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
473 for (k = 1; k <= nrBand1; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
474 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
475 vk1[k] = vk1[k-1] + vDk1[k-1];
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
476 if (vDk1[k-1] == 0)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
477 return 1;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
478 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
479
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
480 sbr->N_master = nrBand0 + nrBand1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
481 sbr->N_master = min(sbr->N_master, 64);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
482 for (k = 0; k <= nrBand0; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
483 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
484 sbr->f_master[k] = (uint8_t) vk0[k];
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
485 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
486 for (k = nrBand0 + 1; k <= sbr->N_master; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
487 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
488 sbr->f_master[k] = (uint8_t) vk1[k - nrBand0];
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
489 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
490
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
491 #if 0
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
492 printf("f_master[%d]: ", sbr->N_master);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
493 for (k = 0; k <= sbr->N_master; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
494 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
495 printf("%d ", sbr->f_master[k]);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
496 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
497 printf("\n");
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
498 #endif
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
499
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
500 return 0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
501 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
502
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
503 /* calculate the derived frequency border tables from f_master */
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
504 uint8_t derived_frequency_table(sbr_info *sbr, uint8_t bs_xover_band,
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
505 uint8_t k2)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
506 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
507 uint8_t k, i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
508 uint32_t minus;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
509
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
510 /* The following relation shall be satisfied: bs_xover_band < N_Master */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
511 if (sbr->N_master <= bs_xover_band)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
512 return 1;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
513
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
514 sbr->N_high = sbr->N_master - bs_xover_band;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
515 sbr->N_low = (sbr->N_high>>1) + (sbr->N_high - ((sbr->N_high>>1)<<1));
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
516
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
517 sbr->n[0] = sbr->N_low;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
518 sbr->n[1] = sbr->N_high;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
519
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
520 for (k = 0; k <= sbr->N_high; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
521 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
522 sbr->f_table_res[HI_RES][k] = sbr->f_master[k + bs_xover_band];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
523 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
524
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
525 sbr->M = sbr->f_table_res[HI_RES][sbr->N_high] - sbr->f_table_res[HI_RES][0];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
526 sbr->kx = sbr->f_table_res[HI_RES][0];
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
527 if (sbr->kx > 32)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
528 return 1;
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
529 if (sbr->kx + sbr->M > 64)
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
530 return 1;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
531
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
532 minus = (sbr->N_high & 1) ? 1 : 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
533
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
534 for (k = 0; k <= sbr->N_low; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
535 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
536 if (k == 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
537 i = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
538 else
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
539 i = (uint8_t)(2*k - minus);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
540 sbr->f_table_res[LO_RES][k] = sbr->f_table_res[HI_RES][i];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
541 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
542
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
543 #if 0
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
544 printf("bs_freq_scale: %d\n", sbr->bs_freq_scale);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
545 printf("bs_limiter_bands: %d\n", sbr->bs_limiter_bands);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
546 printf("f_table_res[HI_RES][%d]: ", sbr->N_high);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
547 for (k = 0; k <= sbr->N_high; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
548 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
549 printf("%d ", sbr->f_table_res[HI_RES][k]);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
550 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
551 printf("\n");
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
552 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
553 #if 0
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
554 printf("f_table_res[LO_RES][%d]: ", sbr->N_low);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
555 for (k = 0; k <= sbr->N_low; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
556 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
557 printf("%d ", sbr->f_table_res[LO_RES][k]);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
558 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
559 printf("\n");
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
560 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
561
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
562 sbr->N_Q = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
563 if (sbr->bs_noise_bands == 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
564 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
565 sbr->N_Q = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
566 } else {
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
567 #if 0
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
568 sbr->N_Q = max(1, (int32_t)(sbr->bs_noise_bands*(log(k2/(float)sbr->kx)/log(2.0)) + 0.5));
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
569 #else
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
570 sbr->N_Q = (uint8_t)(max(1, find_bands(0, sbr->bs_noise_bands, sbr->kx, k2)));
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
571 #endif
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
572 sbr->N_Q = min(5, sbr->N_Q);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
573 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
574
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
575 for (k = 0; k <= sbr->N_Q; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
576 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
577 if (k == 0)
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
578 {
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
579 i = 0;
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
580 } else {
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
581 /* i = i + (int32_t)((sbr->N_low - i)/(sbr->N_Q + 1 - k)); */
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
582 i = i + (sbr->N_low - i)/(sbr->N_Q + 1 - k);
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
583 }
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
584 sbr->f_table_noise[k] = sbr->f_table_res[LO_RES][i];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
585 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
586
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
587 /* build table for mapping k to g in hf patching */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
588 for (k = 0; k < 64; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
589 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
590 uint8_t g;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
591 for (g = 0; g < sbr->N_Q; g++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
592 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
593 if ((sbr->f_table_noise[g] <= k) &&
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
594 (k < sbr->f_table_noise[g+1]))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
595 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
596 sbr->table_map_k_to_g[k] = g;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
597 break;
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 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
601
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
602 #if 0
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
603 printf("f_table_noise[%d]: ", sbr->N_Q);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
604 for (k = 0; k <= sbr->N_Q; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
605 {
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
606 printf("%d ", sbr->f_table_noise[k] - sbr->kx);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
607 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
608 printf("\n");
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
609 #endif
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
610
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
611 return 0;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
612 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
613
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
614 /* TODO: blegh, ugly */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
615 /* Modified to calculate for all possible bs_limiter_bands always
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
616 * This reduces the number calls to this functions needed (now only on
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
617 * header reset)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
618 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
619 void limiter_frequency_table(sbr_info *sbr)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
620 {
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
621 #if 0
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
622 static const real_t limiterBandsPerOctave[] = { REAL_CONST(1.2),
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
623 REAL_CONST(2), REAL_CONST(3) };
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
624 #else
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
625 static const real_t limiterBandsCompare[] = { REAL_CONST(1.327152),
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
626 REAL_CONST(1.185093), REAL_CONST(1.119872) };
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
627 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
628 uint8_t k, s;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
629 int8_t nrLim;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
630 #if 0
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
631 real_t limBands;
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
632 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
633
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
634 sbr->f_table_lim[0][0] = sbr->f_table_res[LO_RES][0] - sbr->kx;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
635 sbr->f_table_lim[0][1] = sbr->f_table_res[LO_RES][sbr->N_low] - sbr->kx;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
636 sbr->N_L[0] = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
637
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
638 #if 0
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
639 printf("f_table_lim[%d][%d]: ", 0, sbr->N_L[0]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
640 for (k = 0; k <= sbr->N_L[0]; k++)
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
641 {
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
642 printf("%d ", sbr->f_table_lim[0][k]);
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
643 }
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
644 printf("\n");
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
645 #endif
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
646
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
647 for (s = 1; s < 4; s++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
648 {
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
649 int32_t limTable[100 /*TODO*/] = {0};
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
650 uint8_t patchBorders[64/*??*/] = {0};
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
651
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
652 #if 0
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
653 limBands = limiterBandsPerOctave[s - 1];
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
654 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
655
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
656 patchBorders[0] = sbr->kx;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
657 for (k = 1; k <= sbr->noPatches; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
658 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
659 patchBorders[k] = patchBorders[k-1] + sbr->patchNoSubbands[k-1];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
660 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
661
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
662 for (k = 0; k <= sbr->N_low; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
663 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
664 limTable[k] = sbr->f_table_res[LO_RES][k];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
665 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
666 for (k = 1; k < sbr->noPatches; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
667 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
668 limTable[k+sbr->N_low] = patchBorders[k];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
669 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
670
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
671 /* needed */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
672 qsort(limTable, sbr->noPatches + sbr->N_low, sizeof(limTable[0]), longcmp);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
673 k = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
674 nrLim = sbr->noPatches + sbr->N_low - 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
675
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
676 if (nrLim < 0) // TODO: BIG FAT PROBLEM
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
677 return;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
678
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
679 restart:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
680 if (k <= nrLim)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
681 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
682 real_t nOctaves;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
683
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
684 if (limTable[k-1] != 0)
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
685 #if 0
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
686 nOctaves = REAL_CONST(log((float)limTable[k]/(float)limTable[k-1])/log(2.0));
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
687 #else
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
688 #ifdef FIXED_POINT
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
689 nOctaves = DIV_R((limTable[k]<<REAL_BITS),REAL_CONST(limTable[k-1]));
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
690 #else
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
691 nOctaves = (real_t)limTable[k]/(real_t)limTable[k-1];
12527
4a370c80fe5c update to the 2.0 release of faad, patch by adland
diego
parents: 10989
diff changeset
692 #endif
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
693 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
694 else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
695 nOctaves = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
696
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
697 #if 0
13453
6d50ef45a058 Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12.
diego
parents: 12625
diff changeset
698 if ((MUL_R(nOctaves,limBands)) < REAL_CONST(0.49))
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
699 #else
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
700 if (nOctaves < limiterBandsCompare[s - 1])
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
701 #endif
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
702 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
703 uint8_t i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
704 if (limTable[k] != limTable[k-1])
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
705 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
706 uint8_t found = 0, found2 = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
707 for (i = 0; i <= sbr->noPatches; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
708 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
709 if (limTable[k] == patchBorders[i])
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
710 found = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
711 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
712 if (found)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
713 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
714 found2 = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
715 for (i = 0; i <= sbr->noPatches; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
716 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
717 if (limTable[k-1] == patchBorders[i])
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
718 found2 = 1;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
719 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
720 if (found2)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
721 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
722 k++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
723 goto restart;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
724 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
725 /* remove (k-1)th element */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
726 limTable[k-1] = sbr->f_table_res[LO_RES][sbr->N_low];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
727 qsort(limTable, sbr->noPatches + sbr->N_low, sizeof(limTable[0]), longcmp);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
728 nrLim--;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
729 goto restart;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
730 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
731 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
732 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
733 /* remove kth element */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
734 limTable[k] = sbr->f_table_res[LO_RES][sbr->N_low];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
735 qsort(limTable, nrLim, sizeof(limTable[0]), longcmp);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
736 nrLim--;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
737 goto restart;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
738 } else {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
739 k++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
740 goto restart;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
741 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
742 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
743
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
744 sbr->N_L[s] = nrLim;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
745 for (k = 0; k <= nrLim; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
746 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
747 sbr->f_table_lim[s][k] = limTable[k] - sbr->kx;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
748 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
749
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
750 #if 0
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
751 printf("f_table_lim[%d][%d]: ", s, sbr->N_L[s]);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
752 for (k = 0; k <= sbr->N_L[s]; k++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
753 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
754 printf("%d ", sbr->f_table_lim[s][k]);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
755 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
756 printf("\n");
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
757 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
758 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
759 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
760
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
761 #endif