comparison libfaad2/sbr_tf_grid.c @ 13453:6d50ef45a058

Update FAAD to a 2.1 beta CVS snapshot from 2004.07.12. patch by adland <adland123 at yahoo dot com>
author diego
date Fri, 24 Sep 2004 17:31:36 +0000
parents d81145997036
children 2ae5ab4331ca
comparison
equal deleted inserted replaced
13452:c364b7c13dd8 13453:6d50ef45a058
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 ** Initially modified for use with MPlayer by Arpad Gereöffy on 2003/08/30 25 ** Initially modified for use with MPlayer by Arpad Gereöffy on 2003/08/30
26 ** $Id: sbr_tf_grid.c,v 1.3 2004/06/02 22:59:03 diego Exp $ 26 ** $Id: sbr_tf_grid.c,v 1.4 2004/06/23 13:50:52 diego Exp $
27 ** detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/ 27 ** detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
28 **/ 28 **/
29 29
30 /* Time/Frequency grid */ 30 /* Time/Frequency grid */
31 31
46 static int16_t rel_bord_trail(sbr_info *sbr, uint8_t ch, uint8_t l); 46 static int16_t rel_bord_trail(sbr_info *sbr, uint8_t ch, uint8_t l);
47 #endif 47 #endif
48 static uint8_t middleBorder(sbr_info *sbr, uint8_t ch); 48 static uint8_t middleBorder(sbr_info *sbr, uint8_t ch);
49 49
50 50
51 /* function constructs new time border vector */
52 /* 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) 53 uint8_t envelope_time_border_vector(sbr_info *sbr, uint8_t ch)
52 { 54 {
53 uint8_t l, border, temp; 55 uint8_t l, border, temp;
54 56 uint8_t t_E_temp[6] = {0};
55 for (l = 0; l <= sbr->L_E[ch]; l++) 57
56 { 58 t_E_temp[0] = sbr->rate * sbr->abs_bord_lead[ch];
57 sbr->t_E[ch][l] = 0; 59 t_E_temp[sbr->L_E[ch]] = sbr->rate * sbr->abs_bord_trail[ch];
58 }
59
60 sbr->t_E[ch][0] = sbr->rate * sbr->abs_bord_lead[ch];
61 sbr->t_E[ch][sbr->L_E[ch]] = sbr->rate * sbr->abs_bord_trail[ch];
62 60
63 switch (sbr->bs_frame_class[ch]) 61 switch (sbr->bs_frame_class[ch])
64 { 62 {
65 case FIXFIX: 63 case FIXFIX:
66 switch (sbr->L_E[ch]) 64 switch (sbr->L_E[ch])
67 { 65 {
68 case 4: 66 case 4:
69 temp = (int) (sbr->numTimeSlots / 4); 67 temp = (int) (sbr->numTimeSlots / 4);
70 sbr->t_E[ch][3] = sbr->rate * 3 * temp; 68 t_E_temp[3] = sbr->rate * 3 * temp;
71 sbr->t_E[ch][2] = sbr->rate * 2 * temp; 69 t_E_temp[2] = sbr->rate * 2 * temp;
72 sbr->t_E[ch][1] = sbr->rate * temp; 70 t_E_temp[1] = sbr->rate * temp;
73 break; 71 break;
74 case 2: 72 case 2:
75 sbr->t_E[ch][1] = sbr->rate * (int) (sbr->numTimeSlots / 2); 73 t_E_temp[1] = sbr->rate * (int) (sbr->numTimeSlots / 2);
76 break; 74 break;
77 default: 75 default:
78 break; 76 break;
79 } 77 }
80 break; 78 break;
89 { 87 {
90 if (border < sbr->bs_rel_bord[ch][l]) 88 if (border < sbr->bs_rel_bord[ch][l])
91 return 1; 89 return 1;
92 90
93 border -= sbr->bs_rel_bord[ch][l]; 91 border -= sbr->bs_rel_bord[ch][l];
94 sbr->t_E[ch][--i] = sbr->rate * border; 92 t_E_temp[--i] = sbr->rate * border;
95 } 93 }
96 } 94 }
97 break; 95 break;
98 96
99 case VARFIX: 97 case VARFIX:
107 border += sbr->bs_rel_bord[ch][l]; 105 border += sbr->bs_rel_bord[ch][l];
108 106
109 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen) 107 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen)
110 return 1; 108 return 1;
111 109
112 sbr->t_E[ch][i++] = sbr->rate * border; 110 t_E_temp[i++] = sbr->rate * border;
113 } 111 }
114 } 112 }
115 break; 113 break;
116 114
117 case VARVAR: 115 case VARVAR:
125 border += sbr->bs_rel_bord_0[ch][l]; 123 border += sbr->bs_rel_bord_0[ch][l];
126 124
127 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen) 125 if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen)
128 return 1; 126 return 1;
129 127
130 sbr->t_E[ch][i++] = sbr->rate * border; 128 t_E_temp[i++] = sbr->rate * border;
131 } 129 }
132 } 130 }
133 131
134 if (sbr->bs_num_rel_1[ch]) 132 if (sbr->bs_num_rel_1[ch])
135 { 133 {
140 { 138 {
141 if (border < sbr->bs_rel_bord_1[ch][l]) 139 if (border < sbr->bs_rel_bord_1[ch][l])
142 return 1; 140 return 1;
143 141
144 border -= sbr->bs_rel_bord_1[ch][l]; 142 border -= sbr->bs_rel_bord_1[ch][l];
145 sbr->t_E[ch][--i] = sbr->rate * border; 143 t_E_temp[--i] = sbr->rate * border;
146 } 144 }
147 } 145 }
148 break; 146 break;
147 }
148
149 /* no error occured, we can safely use this t_E vector */
150 for (l = 0; l < 6; l++)
151 {
152 sbr->t_E[ch][l] = t_E_temp[l];
149 } 153 }
150 154
151 return 0; 155 return 0;
152 } 156 }
153 157