annotate libfaad2/pns.c @ 12387:5c2e728f5a00

keepaspect support, tryed to clean up DirectxManageDisplay a bit, enabled UYVY support and fixed bugs where switching to fullscreen would keep the console window on top and where the initial window position is wrongly calculated
author faust3
date Sat, 01 May 2004 20:21:03 +0000
parents 3185f64f6350
children 4a370c80fe5c
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
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
3 ** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
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 **
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
25 ** $Id: pns.c,v 1.22 2003/09/09 18:09:52 menno 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 #include "common.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
29 #include "structs.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
30
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
31 #include "pns.h"
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
32
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
33
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
34 #ifdef FIXED_POINT
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
35
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
36 #define DIV(A, B) (((int64_t)A << REAL_BITS)/B)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
37
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
38 #define step(shift) \
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
39 if ((0x40000000l >> shift) + root <= value) \
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
40 { \
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
41 value -= (0x40000000l >> shift) + root; \
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
42 root = (root >> 1) | (0x40000000l >> shift); \
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
43 } else { \
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
44 root = root >> 1; \
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
45 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
46
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
47 /* fixed point square root approximation */
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
48 /* !!!! ONLY WORKS FOR EVEN %REAL_BITS% !!!! */
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
49 real_t fp_sqrt(real_t value)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
50 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
51 real_t root = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
52
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
53 step( 0); step( 2); step( 4); step( 6);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
54 step( 8); step(10); step(12); step(14);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
55 step(16); step(18); step(20); step(22);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
56 step(24); step(26); step(28); step(30);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
57
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
58 if (root < value)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
59 ++root;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
60
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
61 root <<= (REAL_BITS/2);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
62
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
63 return root;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
64 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
65
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
66 static real_t pow2_table[] =
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
67 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
68 COEF_CONST(0.59460355750136),
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
69 COEF_CONST(0.70710678118655),
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
70 COEF_CONST(0.84089641525371),
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
71 COEF_CONST(1.0),
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
72 COEF_CONST(1.18920711500272),
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
73 COEF_CONST(1.41421356237310),
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
74 COEF_CONST(1.68179283050743)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
75 };
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
76 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
77
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
78 /* The function gen_rand_vector(addr, size) generates a vector of length
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
79 <size> with signed random values of average energy MEAN_NRG per random
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
80 value. A suitable random number generator can be realized using one
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
81 multiplication/accumulation per random value.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
82 */
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
83 static INLINE void gen_rand_vector(real_t *spec, int16_t scale_factor, uint16_t size,
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
84 uint8_t sub)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
85 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
86 #ifndef FIXED_POINT
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
87 uint16_t i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
88 real_t energy = 0.0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
89
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
90 real_t scale = (real_t)1.0/(real_t)size;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
91
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
92 for (i = 0; i < size; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
93 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
94 real_t tmp = scale*(real_t)(int32_t)random_int();
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
95 spec[i] = tmp;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
96 energy += tmp*tmp;
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 scale = (real_t)1.0/(real_t)sqrt(energy);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
100 scale *= (real_t)pow(2.0, 0.25 * scale_factor);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
101 for (i = 0; i < size; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
102 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
103 spec[i] *= scale;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
104 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
105 #else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
106 uint16_t i;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
107 real_t energy = 0, scale;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
108 int32_t exp, frac;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
109
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
110 for (i = 0; i < size; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
111 {
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
112 /* this can be replaced by a 16 bit random generator!!!! */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
113 real_t tmp = (int32_t)random_int();
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
114 if (tmp < 0)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
115 tmp = -(tmp & ((1<<(REAL_BITS-1))-1));
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
116 else
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
117 tmp = (tmp & ((1<<(REAL_BITS-1))-1));
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
118
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
119 energy += MUL(tmp,tmp);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
120
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
121 spec[i] = tmp;
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
122 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
123
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
124 energy = fp_sqrt(energy);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
125 if (energy > 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
126 {
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
127 scale = DIV(REAL_CONST(1),energy);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
128
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
129 exp = scale_factor / 4;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
130 frac = scale_factor % 4;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
131
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
132 /* IMDCT pre-scaling */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
133 exp -= sub;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
134
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
135 if (exp < 0)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
136 scale >>= -exp;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
137 else
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
138 scale <<= exp;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
139
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
140 if (frac)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
141 scale = MUL_R_C(scale, pow2_table[frac + 3]);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
142
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
143 for (i = 0; i < size; i++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
144 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
145 spec[i] = MUL(spec[i], scale);
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
146 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
147 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
148 #endif
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
149 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
150
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
151 void pns_decode(ic_stream *ics_left, ic_stream *ics_right,
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
152 real_t *spec_left, real_t *spec_right, uint16_t frame_len,
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
153 uint8_t channel_pair, uint8_t object_type)
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
154 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
155 uint8_t g, sfb, b;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
156 uint16_t size, offs;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
157
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
158 uint8_t group = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
159 uint16_t nshort = frame_len >> 3;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
160
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
161 uint8_t sub = 0;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
162
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
163 #ifdef FIXED_POINT
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
164 /* IMDCT scaling */
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
165 if (object_type == LD)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
166 {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
167 sub = 9 /*9*/;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
168 } else {
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
169 if (ics_left->window_sequence == EIGHT_SHORT_SEQUENCE)
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
170 sub = 7 /*7*/;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
171 else
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
172 sub = 10 /*10*/;
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
173 }
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
174 #endif
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
175
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
176 for (g = 0; g < ics_left->num_window_groups; g++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
177 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
178 /* Do perceptual noise substitution decoding */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
179 for (b = 0; b < ics_left->window_group_length[g]; b++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
180 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
181 for (sfb = 0; sfb < ics_left->max_sfb; sfb++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
182 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
183 if (is_noise(ics_left, g, sfb))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
184 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
185 /* Simultaneous use of LTP and PNS is not prevented in the
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
186 syntax. If both LTP, and PNS are enabled on the same
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
187 scalefactor band, PNS takes precedence, and no prediction
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
188 is applied to this band.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
189 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
190 ics_left->ltp.long_used[sfb] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
191 ics_left->ltp2.long_used[sfb] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
192
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
193 /* For scalefactor bands coded using PNS the corresponding
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
194 predictors are switched to "off".
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
195 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
196 ics_left->pred.prediction_used[sfb] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
197
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
198 offs = ics_left->swb_offset[sfb];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
199 size = ics_left->swb_offset[sfb+1] - offs;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
200
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
201 /* Generate random vector */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
202 gen_rand_vector(&spec_left[(group*nshort)+offs],
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
203 ics_left->scale_factors[g][sfb], size, sub);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
204 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
205
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
206 /* From the spec:
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
207 If the same scalefactor band and group is coded by perceptual noise
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
208 substitution in both channels of a channel pair, the correlation of
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
209 the noise signal can be controlled by means of the ms_used field: While
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
210 the default noise generation process works independently for each channel
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
211 (separate generation of random vectors), the same random vector is used
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
212 for both channels if ms_used[] is set for a particular scalefactor band
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
213 and group. In this case, no M/S stereo coding is carried out (because M/S
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
214 stereo coding and noise substitution coding are mutually exclusive).
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
215 If the same scalefactor band and group is coded by perceptual noise
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
216 substitution in only one channel of a channel pair the setting of ms_used[]
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
217 is not evaluated.
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
218 */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
219 if (channel_pair)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
220 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
221 if (is_noise(ics_right, g, sfb))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
222 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
223 if (((ics_left->ms_mask_present == 1) &&
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
224 (ics_left->ms_used[g][sfb])) ||
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
225 (ics_left->ms_mask_present == 2))
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
226 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
227 uint16_t c;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
228
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
229 offs = ics_right->swb_offset[sfb];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
230 size = ics_right->swb_offset[sfb+1] - offs;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
231
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
232 for (c = 0; c < size; c++)
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
233 {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
234 spec_right[(group*nshort) + offs + c] =
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
235 spec_left[(group*nshort) + offs + c];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
236 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
237 } else /*if (ics_left->ms_mask_present == 0)*/ {
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
238 ics_right->ltp.long_used[sfb] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
239 ics_right->ltp2.long_used[sfb] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
240 ics_right->pred.prediction_used[sfb] = 0;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
241
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
242 offs = ics_right->swb_offset[sfb];
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
243 size = ics_right->swb_offset[sfb+1] - offs;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
244
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
245 /* Generate random vector */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
246 gen_rand_vector(&spec_right[(group*nshort)+offs],
10989
3185f64f6350 synced with current cvs
alex
parents: 10725
diff changeset
247 ics_right->scale_factors[g][sfb], size, sub);
10725
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
248 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
249 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
250 }
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
251 } /* sfb */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
252 group++;
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
253 } /* b */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
254 } /* g */
e989150f8216 libfaad2 v2.0rc1 imported
arpi
parents:
diff changeset
255 }