Mercurial > audlegacy
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 |