Mercurial > mplayer.hg
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 |