diff options
Diffstat (limited to 'src/libfaad/sbr_tf_grid.c')
-rw-r--r-- | src/libfaad/sbr_tf_grid.c | 36 |
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; } |