summaryrefslogtreecommitdiffstats
path: root/libfaad2/sbr_tf_grid.c
diff options
context:
space:
mode:
Diffstat (limited to 'libfaad2/sbr_tf_grid.c')
-rw-r--r--libfaad2/sbr_tf_grid.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/libfaad2/sbr_tf_grid.c b/libfaad2/sbr_tf_grid.c
index 2c3fae2a15..c7e597184c 100644
--- a/libfaad2/sbr_tf_grid.c
+++ b/libfaad2/sbr_tf_grid.c
@@ -23,7 +23,7 @@
** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
**
** Initially modified for use with MPlayer by Arpad Gereöffy on 2003/08/30
-** $Id: sbr_tf_grid.c,v 1.3 2004/06/02 22:59:03 diego Exp $
+** $Id: sbr_tf_grid.c,v 1.4 2004/06/23 13:50:52 diego Exp $
** detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
**/
@@ -48,17 +48,15 @@ static int16_t rel_bord_trail(sbr_info *sbr, uint8_t ch, uint8_t l);
static uint8_t middleBorder(sbr_info *sbr, uint8_t ch);
+/* function constructs new time border vector */
+/* first build into temp vector to be able to use previous vector on error */
uint8_t envelope_time_border_vector(sbr_info *sbr, uint8_t ch)
{
uint8_t l, border, temp;
+ uint8_t t_E_temp[6] = {0};
- for (l = 0; l <= sbr->L_E[ch]; l++)
- {
- sbr->t_E[ch][l] = 0;
- }
-
- sbr->t_E[ch][0] = sbr->rate * sbr->abs_bord_lead[ch];
- sbr->t_E[ch][sbr->L_E[ch]] = sbr->rate * sbr->abs_bord_trail[ch];
+ t_E_temp[0] = sbr->rate * sbr->abs_bord_lead[ch];
+ t_E_temp[sbr->L_E[ch]] = sbr->rate * sbr->abs_bord_trail[ch];
switch (sbr->bs_frame_class[ch])
{
@@ -67,12 +65,12 @@ uint8_t envelope_time_border_vector(sbr_info *sbr, uint8_t ch)
{
case 4:
temp = (int) (sbr->numTimeSlots / 4);
- sbr->t_E[ch][3] = sbr->rate * 3 * temp;
- sbr->t_E[ch][2] = sbr->rate * 2 * temp;
- sbr->t_E[ch][1] = sbr->rate * temp;
+ t_E_temp[3] = sbr->rate * 3 * temp;
+ t_E_temp[2] = sbr->rate * 2 * temp;
+ t_E_temp[1] = sbr->rate * temp;
break;
case 2:
- sbr->t_E[ch][1] = sbr->rate * (int) (sbr->numTimeSlots / 2);
+ t_E_temp[1] = sbr->rate * (int) (sbr->numTimeSlots / 2);
break;
default:
break;
@@ -91,7 +89,7 @@ uint8_t envelope_time_border_vector(sbr_info *sbr, uint8_t ch)
return 1;
border -= sbr->bs_rel_bord[ch][l];
- sbr->t_E[ch][--i] = sbr->rate * border;
+ t_E_temp[--i] = sbr->rate * border;
}
}
break;
@@ -109,7 +107,7 @@ uint8_t envelope_time_border_vector(sbr_info *sbr, uint8_t ch)
if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen)
return 1;
- sbr->t_E[ch][i++] = sbr->rate * border;
+ t_E_temp[i++] = sbr->rate * border;
}
}
break;
@@ -127,7 +125,7 @@ uint8_t envelope_time_border_vector(sbr_info *sbr, uint8_t ch)
if (sbr->rate * border + sbr->tHFAdj > sbr->numTimeSlotsRate+sbr->tHFGen)
return 1;
- sbr->t_E[ch][i++] = sbr->rate * border;
+ t_E_temp[i++] = sbr->rate * border;
}
}
@@ -142,12 +140,18 @@ uint8_t envelope_time_border_vector(sbr_info *sbr, uint8_t ch)
return 1;
border -= sbr->bs_rel_bord_1[ch][l];
- sbr->t_E[ch][--i] = sbr->rate * border;
+ t_E_temp[--i] = sbr->rate * border;
}
}
break;
}
+ /* no error occured, we can safely use this t_E vector */
+ for (l = 0; l < 6; l++)
+ {
+ sbr->t_E[ch][l] = t_E_temp[l];
+ }
+
return 0;
}