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