comparison libfaad2/sbr_tf_grid.c @ 10989:3185f64f6350

synced with current cvs
author alex
date Fri, 03 Oct 2003 22:23:26 +0000
parents e989150f8216
children 4a370c80fe5c
comparison
equal deleted inserted replaced
10988:c2bff70784d5 10989:3185f64f6350
20 ** forbidden. 20 ** forbidden.
21 ** 21 **
22 ** Commercial non-GPL licensing of this software is possible. 22 ** Commercial non-GPL licensing of this software is possible.
23 ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com. 23 ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
24 ** 24 **
25 ** $Id: sbr_tf_grid.c,v 1.1 2003/07/29 08:20:13 menno Exp $ 25 ** $Id: sbr_tf_grid.c,v 1.4 2003/09/30 16:32:02 menno Exp $
26 **/ 26 **/
27 27
28 /* Time/Frequency grid */ 28 /* Time/Frequency grid */
29 29
30 #include "common.h" 30 #include "common.h"
35 #include <stdlib.h> 35 #include <stdlib.h>
36 36
37 #include "sbr_syntax.h" 37 #include "sbr_syntax.h"
38 #include "sbr_tf_grid.h" 38 #include "sbr_tf_grid.h"
39 39
40 void envelope_time_border_vector(sbr_info *sbr, uint8_t ch) 40 uint8_t envelope_time_border_vector(sbr_info *sbr, uint8_t ch)
41 { 41 {
42 uint8_t l, border; 42 uint8_t l, border, temp;
43 43
44 for (l = 0; l <= sbr->L_E[ch]; l++) 44 for (l = 0; l <= sbr->L_E[ch]; l++)
45 { 45 {
46 sbr->t_E[ch][l] = 0; 46 sbr->t_E[ch][l] = 0;
47 } 47 }
53 { 53 {
54 case FIXFIX: 54 case FIXFIX:
55 switch (sbr->L_E[ch]) 55 switch (sbr->L_E[ch])
56 { 56 {
57 case 4: 57 case 4:
58 sbr->t_E[ch][3] = sbr->rate * 12; 58 temp = (int) (sbr->numTimeSlots / 4);
59 sbr->t_E[ch][2] = sbr->rate * 8; 59 sbr->t_E[ch][3] = sbr->rate * 3 * temp;
60 sbr->t_E[ch][1] = sbr->rate * 4; 60 sbr->t_E[ch][2] = sbr->rate * 2 * temp;
61 sbr->t_E[ch][1] = sbr->rate * temp;
61 break; 62 break;
62 case 2: 63 case 2:
63 sbr->t_E[ch][1] = sbr->rate * 8; 64 sbr->t_E[ch][1] = sbr->rate * (int) (sbr->numTimeSlots / 2);
64 break; 65 break;
65 default: 66 default:
66 break; 67 break;
67 } 68 }
68 break; 69 break;
73 int8_t i = sbr->L_E[ch]; 74 int8_t i = sbr->L_E[ch];
74 border = sbr->abs_bord_trail[ch]; 75 border = sbr->abs_bord_trail[ch];
75 76
76 for (l = 0; l < (sbr->L_E[ch] - 1); l++) 77 for (l = 0; l < (sbr->L_E[ch] - 1); l++)
77 { 78 {
79 if (border < sbr->bs_rel_bord[ch][l])
80 return 1;
81
78 border -= sbr->bs_rel_bord[ch][l]; 82 border -= sbr->bs_rel_bord[ch][l];
79 sbr->t_E[ch][--i] = sbr->rate * border; 83 sbr->t_E[ch][--i] = sbr->rate * border;
80 } 84 }
81 } 85 }
82 break; 86 break;
88 border = sbr->abs_bord_lead[ch]; 92 border = sbr->abs_bord_lead[ch];
89 93
90 for (l = 0; l < (sbr->L_E[ch] - 1); l++) 94 for (l = 0; l < (sbr->L_E[ch] - 1); l++)
91 { 95 {
92 border += sbr->bs_rel_bord[ch][l]; 96 border += sbr->bs_rel_bord[ch][l];
97
98 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen)
99 return 1;
100
93 sbr->t_E[ch][i++] = sbr->rate * border; 101 sbr->t_E[ch][i++] = sbr->rate * border;
94 } 102 }
95 } 103 }
96 break; 104 break;
97 105
102 border = sbr->abs_bord_lead[ch]; 110 border = sbr->abs_bord_lead[ch];
103 111
104 for (l = 0; l < sbr->bs_num_rel_0[ch]; l++) 112 for (l = 0; l < sbr->bs_num_rel_0[ch]; l++)
105 { 113 {
106 border += sbr->bs_rel_bord_0[ch][l]; 114 border += sbr->bs_rel_bord_0[ch][l];
115
116 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen)
117 return 1;
118
107 sbr->t_E[ch][i++] = sbr->rate * border; 119 sbr->t_E[ch][i++] = sbr->rate * border;
108 } 120 }
109 } 121 }
110 122
111 if (sbr->bs_num_rel_1[ch]) 123 if (sbr->bs_num_rel_1[ch])
113 int8_t i = sbr->L_E[ch]; 125 int8_t i = sbr->L_E[ch];
114 border = sbr->abs_bord_trail[ch]; 126 border = sbr->abs_bord_trail[ch];
115 127
116 for (l = 0; l < sbr->bs_num_rel_1[ch]; l++) 128 for (l = 0; l < sbr->bs_num_rel_1[ch]; l++)
117 { 129 {
130 if (border < sbr->bs_rel_bord_1[ch][l])
131 return 1;
132
118 border -= sbr->bs_rel_bord_1[ch][l]; 133 border -= sbr->bs_rel_bord_1[ch][l];
119 sbr->t_E[ch][--i] = sbr->rate * border; 134 sbr->t_E[ch][--i] = sbr->rate * border;
120 } 135 }
121 } 136 }
122 break; 137 break;
123 } 138 }
139
140 return 0;
124 } 141 }
125 142
126 void noise_floor_time_border_vector(sbr_info *sbr, uint8_t ch) 143 void noise_floor_time_border_vector(sbr_info *sbr, uint8_t ch)
127 { 144 {
128 sbr->t_Q[ch][0] = sbr->t_E[ch][0]; 145 sbr->t_Q[ch][0] = sbr->t_E[ch][0];
144 int16_t acc = 0; 161 int16_t acc = 0;
145 162
146 switch (sbr->bs_frame_class[ch]) 163 switch (sbr->bs_frame_class[ch])
147 { 164 {
148 case FIXFIX: 165 case FIXFIX:
149 return NO_TIME_SLOTS/sbr->L_E[ch]; 166 return sbr->numTimeSlots/sbr->L_E[ch];
150 case FIXVAR: 167 case FIXVAR:
151 return 0; 168 return 0;
152 case VARFIX: 169 case VARFIX:
153 for (i = 0; i < l; i++) 170 for (i = 0; i < l; i++)
154 { 171 {