Author: alexc
Date: Fri Nov 20 21:28:54 2009
New Revision: 5450

Log:
Replace ceil(log() / M_LN2) with a ceil_log2[] lookup table. The result of this
calculation is a number of bits to be read therefore we must be exact.

Modified:
   aac-sbr/aacsbr.c

Modified: aac-sbr/aacsbr.c
==============================================================================
--- aac-sbr/aacsbr.c    Wed Nov 18 13:08:22 2009        (r5449)
+++ aac-sbr/aacsbr.c    Fri Nov 20 21:28:54 2009        (r5450)
@@ -489,6 +489,10 @@ static int sbr_make_f_derived(AACContext
     return 0;
 }
 
+static int8_t ceil_log2[] = {
+    0, 0, 1, 2, 2, 3, 3,
+};
+
 static int sbr_grid(AACContext *ac, SpectralBandReplication *sbr,
                     GetBitContext *gb, SBRData *ch_data)
 {
@@ -514,7 +518,7 @@ static int sbr_grid(AACContext *ac, Spec
         for (i = 0; i < ch_data->bs_num_rel[1]; i++)
             ch_data->bs_rel_bord[1][i] = (get_bits(gb, 2) << 1) + 2;
 
-        ch_data->bs_pointer = get_bits(gb, ceil(logf(ch_data->bs_num_env[1] + 
1) / M_LN2));
+        ch_data->bs_pointer = get_bits(gb, ceil_log2[ch_data->bs_num_env[1] + 
1]);
 
         for (i = 0; i < ch_data->bs_num_env[1]; i++)
             ch_data->bs_freq_res[ch_data->bs_num_env[1] - 1 - i] = 
get_bits1(gb);
@@ -527,7 +531,7 @@ static int sbr_grid(AACContext *ac, Spec
         for (i = 0; i < ch_data->bs_num_rel[0]; i++)
             ch_data->bs_rel_bord[0][i] = (get_bits(gb, 2) << 1) + 2;
 
-        ch_data->bs_pointer = get_bits(gb, ceil(logf(ch_data->bs_num_env[1] + 
1) / M_LN2));
+        ch_data->bs_pointer = get_bits(gb, ceil_log2[ch_data->bs_num_env[1] + 
1]);
 
         for (i = 0; i < ch_data->bs_num_env[1]; i++)
             ch_data->bs_freq_res[i] = get_bits1(gb);
@@ -544,7 +548,7 @@ static int sbr_grid(AACContext *ac, Spec
         for (i = 0; i < ch_data->bs_num_rel[1]; i++)
             ch_data->bs_rel_bord[1][i] = (get_bits(gb, 2) << 1) + 2;
 
-        ch_data->bs_pointer = get_bits(gb, ceil(logf(ch_data->bs_num_env[1] + 
1) / M_LN2));
+        ch_data->bs_pointer = get_bits(gb, ceil_log2[ch_data->bs_num_env[1] + 
1]);
 
         for (i = 0; i < ch_data->bs_num_env[1]; i++)
             ch_data->bs_freq_res[i] = get_bits1(gb);
_______________________________________________
FFmpeg-soc mailing list
FFmpeg-soc@mplayerhq.hu
https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-soc

Reply via email to