Mercurial > audlegacy
comparison Plugins/Input/aac/libfaad2/sbr_tf_grid.c @ 1010:29feaace84d0 trunk
[svn] - synchronize audacious-faad with FAAD2 CVS.
author | nenolod |
---|---|
date | Mon, 08 May 2006 06:56:47 -0700 |
parents | 0a2ad94e8607 |
children | 1e6c0a3f2d15 |
comparison
equal
deleted
inserted
replaced
1009:1008da26c12d | 1010:29feaace84d0 |
---|---|
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.15 2004/09/04 14:56:28 menno Exp $ | 25 ** $Id: sbr_tf_grid.c,v 1.10 2004/01/05 14:05:12 menno Exp $ |
26 **/ | 26 **/ |
27 | 27 |
28 /* Time/Frequency grid */ | 28 /* Time/Frequency grid */ |
29 | 29 |
30 #include "common.h" | 30 #include "common.h" |
44 static int16_t rel_bord_trail(sbr_info *sbr, uint8_t ch, uint8_t l); | 44 static int16_t rel_bord_trail(sbr_info *sbr, uint8_t ch, uint8_t l); |
45 #endif | 45 #endif |
46 static uint8_t middleBorder(sbr_info *sbr, uint8_t ch); | 46 static uint8_t middleBorder(sbr_info *sbr, uint8_t ch); |
47 | 47 |
48 | 48 |
49 /* function constructs new time border vector */ | |
50 /* first build into temp vector to be able to use previous vector on error */ | |
51 uint8_t envelope_time_border_vector(sbr_info *sbr, uint8_t ch) | 49 uint8_t envelope_time_border_vector(sbr_info *sbr, uint8_t ch) |
52 { | 50 { |
53 uint8_t l, border, temp; | 51 uint8_t l, border, temp; |
54 uint8_t t_E_temp[6] = {0}; | 52 |
55 | 53 for (l = 0; l <= sbr->L_E[ch]; l++) |
56 t_E_temp[0] = sbr->rate * sbr->abs_bord_lead[ch]; | 54 { |
57 t_E_temp[sbr->L_E[ch]] = sbr->rate * sbr->abs_bord_trail[ch]; | 55 sbr->t_E[ch][l] = 0; |
56 } | |
57 | |
58 sbr->t_E[ch][0] = sbr->rate * sbr->abs_bord_lead[ch]; | |
59 sbr->t_E[ch][sbr->L_E[ch]] = sbr->rate * sbr->abs_bord_trail[ch]; | |
58 | 60 |
59 switch (sbr->bs_frame_class[ch]) | 61 switch (sbr->bs_frame_class[ch]) |
60 { | 62 { |
61 case FIXFIX: | 63 case FIXFIX: |
62 switch (sbr->L_E[ch]) | 64 switch (sbr->L_E[ch]) |
63 { | 65 { |
64 case 4: | 66 case 4: |
65 temp = (int) (sbr->numTimeSlots / 4); | 67 temp = (int) (sbr->numTimeSlots / 4); |
66 t_E_temp[3] = sbr->rate * 3 * temp; | 68 sbr->t_E[ch][3] = sbr->rate * 3 * temp; |
67 t_E_temp[2] = sbr->rate * 2 * temp; | 69 sbr->t_E[ch][2] = sbr->rate * 2 * temp; |
68 t_E_temp[1] = sbr->rate * temp; | 70 sbr->t_E[ch][1] = sbr->rate * temp; |
69 break; | 71 break; |
70 case 2: | 72 case 2: |
71 t_E_temp[1] = sbr->rate * (int) (sbr->numTimeSlots / 2); | 73 sbr->t_E[ch][1] = sbr->rate * (int) (sbr->numTimeSlots / 2); |
72 break; | 74 break; |
73 default: | 75 default: |
74 break; | 76 break; |
75 } | 77 } |
76 break; | 78 break; |
85 { | 87 { |
86 if (border < sbr->bs_rel_bord[ch][l]) | 88 if (border < sbr->bs_rel_bord[ch][l]) |
87 return 1; | 89 return 1; |
88 | 90 |
89 border -= sbr->bs_rel_bord[ch][l]; | 91 border -= sbr->bs_rel_bord[ch][l]; |
90 t_E_temp[--i] = sbr->rate * border; | 92 sbr->t_E[ch][--i] = sbr->rate * border; |
91 } | 93 } |
92 } | 94 } |
93 break; | 95 break; |
94 | 96 |
95 case VARFIX: | 97 case VARFIX: |
103 border += sbr->bs_rel_bord[ch][l]; | 105 border += sbr->bs_rel_bord[ch][l]; |
104 | 106 |
105 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen) | 107 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen) |
106 return 1; | 108 return 1; |
107 | 109 |
108 t_E_temp[i++] = sbr->rate * border; | 110 sbr->t_E[ch][i++] = sbr->rate * border; |
109 } | 111 } |
110 } | 112 } |
111 break; | 113 break; |
112 | 114 |
113 case VARVAR: | 115 case VARVAR: |
121 border += sbr->bs_rel_bord_0[ch][l]; | 123 border += sbr->bs_rel_bord_0[ch][l]; |
122 | 124 |
123 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen) | 125 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen) |
124 return 1; | 126 return 1; |
125 | 127 |
126 t_E_temp[i++] = sbr->rate * border; | 128 sbr->t_E[ch][i++] = sbr->rate * border; |
127 } | 129 } |
128 } | 130 } |
129 | 131 |
130 if (sbr->bs_num_rel_1[ch]) | 132 if (sbr->bs_num_rel_1[ch]) |
131 { | 133 { |
136 { | 138 { |
137 if (border < sbr->bs_rel_bord_1[ch][l]) | 139 if (border < sbr->bs_rel_bord_1[ch][l]) |
138 return 1; | 140 return 1; |
139 | 141 |
140 border -= sbr->bs_rel_bord_1[ch][l]; | 142 border -= sbr->bs_rel_bord_1[ch][l]; |
141 t_E_temp[--i] = sbr->rate * border; | 143 sbr->t_E[ch][--i] = sbr->rate * border; |
142 } | 144 } |
143 } | 145 } |
144 break; | 146 break; |
145 } | |
146 | |
147 /* no error occured, we can safely use this t_E vector */ | |
148 for (l = 0; l < 6; l++) | |
149 { | |
150 sbr->t_E[ch][l] = t_E_temp[l]; | |
151 } | 147 } |
152 | 148 |
153 return 0; | 149 return 0; |
154 } | 150 } |
155 | 151 |