comparison Plugins/Input/aac/libfaad2/sbr_tf_grid.c @ 1021:1e6c0a3f2d15 trunk

[svn] - 2.1 beta
author nenolod
date Wed, 10 May 2006 14:44:20 -0700
parents 29feaace84d0
children f12d7e208b43
comparison
equal deleted inserted replaced
1020:d70514b3b436 1021:1e6c0a3f2d15
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.10 2004/01/05 14:05:12 menno Exp $ 25 ** $Id: sbr_tf_grid.c,v 1.15 2004/09/04 14:56:28 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 */
49 uint8_t envelope_time_border_vector(sbr_info *sbr, uint8_t ch) 51 uint8_t envelope_time_border_vector(sbr_info *sbr, uint8_t ch)
50 { 52 {
51 uint8_t l, border, temp; 53 uint8_t l, border, temp;
52 54 uint8_t t_E_temp[6] = {0};
53 for (l = 0; l <= sbr->L_E[ch]; l++) 55
54 { 56 t_E_temp[0] = sbr->rate * sbr->abs_bord_lead[ch];
55 sbr->t_E[ch][l] = 0; 57 t_E_temp[sbr->L_E[ch]] = sbr->rate * sbr->abs_bord_trail[ch];
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];
60 58
61 switch (sbr->bs_frame_class[ch]) 59 switch (sbr->bs_frame_class[ch])
62 { 60 {
63 case FIXFIX: 61 case FIXFIX:
64 switch (sbr->L_E[ch]) 62 switch (sbr->L_E[ch])
65 { 63 {
66 case 4: 64 case 4:
67 temp = (int) (sbr->numTimeSlots / 4); 65 temp = (int) (sbr->numTimeSlots / 4);
68 sbr->t_E[ch][3] = sbr->rate * 3 * temp; 66 t_E_temp[3] = sbr->rate * 3 * temp;
69 sbr->t_E[ch][2] = sbr->rate * 2 * temp; 67 t_E_temp[2] = sbr->rate * 2 * temp;
70 sbr->t_E[ch][1] = sbr->rate * temp; 68 t_E_temp[1] = sbr->rate * temp;
71 break; 69 break;
72 case 2: 70 case 2:
73 sbr->t_E[ch][1] = sbr->rate * (int) (sbr->numTimeSlots / 2); 71 t_E_temp[1] = sbr->rate * (int) (sbr->numTimeSlots / 2);
74 break; 72 break;
75 default: 73 default:
76 break; 74 break;
77 } 75 }
78 break; 76 break;
87 { 85 {
88 if (border < sbr->bs_rel_bord[ch][l]) 86 if (border < sbr->bs_rel_bord[ch][l])
89 return 1; 87 return 1;
90 88
91 border -= sbr->bs_rel_bord[ch][l]; 89 border -= sbr->bs_rel_bord[ch][l];
92 sbr->t_E[ch][--i] = sbr->rate * border; 90 t_E_temp[--i] = sbr->rate * border;
93 } 91 }
94 } 92 }
95 break; 93 break;
96 94
97 case VARFIX: 95 case VARFIX:
105 border += sbr->bs_rel_bord[ch][l]; 103 border += sbr->bs_rel_bord[ch][l];
106 104
107 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen) 105 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen)
108 return 1; 106 return 1;
109 107
110 sbr->t_E[ch][i++] = sbr->rate * border; 108 t_E_temp[i++] = sbr->rate * border;
111 } 109 }
112 } 110 }
113 break; 111 break;
114 112
115 case VARVAR: 113 case VARVAR:
123 border += sbr->bs_rel_bord_0[ch][l]; 121 border += sbr->bs_rel_bord_0[ch][l];
124 122
125 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen) 123 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen)
126 return 1; 124 return 1;
127 125
128 sbr->t_E[ch][i++] = sbr->rate * border; 126 t_E_temp[i++] = sbr->rate * border;
129 } 127 }
130 } 128 }
131 129
132 if (sbr->bs_num_rel_1[ch]) 130 if (sbr->bs_num_rel_1[ch])
133 { 131 {
138 { 136 {
139 if (border < sbr->bs_rel_bord_1[ch][l]) 137 if (border < sbr->bs_rel_bord_1[ch][l])
140 return 1; 138 return 1;
141 139
142 border -= sbr->bs_rel_bord_1[ch][l]; 140 border -= sbr->bs_rel_bord_1[ch][l];
143 sbr->t_E[ch][--i] = sbr->rate * border; 141 t_E_temp[--i] = sbr->rate * border;
144 } 142 }
145 } 143 }
146 break; 144 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];
147 } 151 }
148 152
149 return 0; 153 return 0;
150 } 154 }
151 155