summaryrefslogtreecommitdiff
path: root/src/libfaad/sbr_tf_grid.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libfaad/sbr_tf_grid.c')
-rw-r--r--src/libfaad/sbr_tf_grid.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/libfaad/sbr_tf_grid.c b/src/libfaad/sbr_tf_grid.c
index db5fc4e2b..ae741c256 100644
--- a/src/libfaad/sbr_tf_grid.c
+++ b/src/libfaad/sbr_tf_grid.c
@@ -22,7 +22,7 @@
** Commercial non-GPL licensing of this software is possible.
** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
**
-** $Id: sbr_tf_grid.c,v 1.4 2004/12/03 01:15:30 tmattern Exp $
+** $Id: sbr_tf_grid.c,v 1.5 2005/10/29 23:57:07 tmmm Exp $
**/
/* Time/Frequency grid */
@@ -46,17 +46,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])
{
@@ -65,12 +63,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;
@@ -89,7 +87,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;
@@ -107,7 +105,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;
@@ -125,7 +123,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;
}
}
@@ -140,12 +138,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;
}