Mercurial > mplayer.hg
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 { |