[FFmpeg-cvslog] ac3enc: move compute_mantissa_size() to ac3dsp

Mans Rullgard git at videolan.org
Wed Mar 30 03:26:00 CEST 2011


ffmpeg | branch: master | Mans Rullgard <mans at mansr.com> | Fri Mar 11 17:16:27 2011 +0000| [52fd16a264d1eb14b1a84b7b38041da1756fb216] | committer: Mans Rullgard

ac3enc: move compute_mantissa_size() to ac3dsp

Signed-off-by: Mans Rullgard <mans at mansr.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=52fd16a264d1eb14b1a84b7b38041da1756fb216
---

 libavcodec/ac3dsp.c |   23 +++++++++++++++++++++++
 libavcodec/ac3dsp.h |    5 +++++
 libavcodec/ac3enc.c |   27 +--------------------------
 3 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/libavcodec/ac3dsp.c b/libavcodec/ac3dsp.c
index 77250a3..cd4d30b 100644
--- a/libavcodec/ac3dsp.c
+++ b/libavcodec/ac3dsp.c
@@ -127,6 +127,28 @@ static void ac3_bit_alloc_calc_bap_c(int16_t *mask, int16_t *psd,
     } while (end > ff_ac3_band_start_tab[band++]);
 }
 
+static int ac3_compute_mantissa_size_c(int mant_cnt[5], uint8_t *bap,
+                                       int nb_coefs)
+{
+    int bits, b, i;
+
+    bits = 0;
+    for (i = 0; i < nb_coefs; i++) {
+        b = bap[i];
+        if (b <= 4) {
+            // bap=1 to bap=4 will be counted in compute_mantissa_size_final
+            mant_cnt[b]++;
+        } else if (b <= 13) {
+            // bap=5 to bap=13 use (bap-1) bits
+            bits += b - 1;
+        } else {
+            // bap=14 uses 14 bits and bap=15 uses 16 bits
+            bits += (b == 14) ? 14 : 16;
+        }
+    }
+    return bits;
+}
+
 av_cold void ff_ac3dsp_init(AC3DSPContext *c, int bit_exact)
 {
     c->ac3_exponent_min = ac3_exponent_min_c;
@@ -135,6 +157,7 @@ av_cold void ff_ac3dsp_init(AC3DSPContext *c, int bit_exact)
     c->ac3_rshift_int32 = ac3_rshift_int32_c;
     c->float_to_fixed24 = float_to_fixed24_c;
     c->bit_alloc_calc_bap = ac3_bit_alloc_calc_bap_c;
+    c->compute_mantissa_size = ac3_compute_mantissa_size_c;
 
     if (ARCH_ARM)
         ff_ac3dsp_init_arm(c, bit_exact);
diff --git a/libavcodec/ac3dsp.h b/libavcodec/ac3dsp.h
index bf4fc14..aa605a8 100644
--- a/libavcodec/ac3dsp.h
+++ b/libavcodec/ac3dsp.h
@@ -100,6 +100,11 @@ typedef struct AC3DSPContext {
     void (*bit_alloc_calc_bap)(int16_t *mask, int16_t *psd, int start, int end,
                                int snr_offset, int floor,
                                const uint8_t *bap_tab, uint8_t *bap);
+
+    /**
+     * Calculate the number of bits needed to encode a set of mantissas.
+     */
+    int (*compute_mantissa_size)(int mant_cnt[5], uint8_t *bap, int nb_coefs);
 } AC3DSPContext;
 
 void ff_ac3dsp_init    (AC3DSPContext *c, int bit_exact);
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index fc591d9..18e4dae 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -928,31 +928,6 @@ static void count_frame_bits(AC3EncodeContext *s)
 
 
 /**
- * Calculate the number of bits needed to encode a set of mantissas.
- */
-static int compute_mantissa_size(int mant_cnt[5], uint8_t *bap, int nb_coefs)
-{
-    int bits, b, i;
-
-    bits = 0;
-    for (i = 0; i < nb_coefs; i++) {
-        b = bap[i];
-        if (b <= 4) {
-            // bap=1 to bap=4 will be counted in compute_mantissa_size_final
-            mant_cnt[b]++;
-        } else if (b <= 13) {
-            // bap=5 to bap=13 use (bap-1) bits
-            bits += b - 1;
-        } else {
-            // bap=14 uses 14 bits and bap=15 uses 16 bits
-            bits += (b == 14) ? 14 : 16;
-        }
-    }
-    return bits;
-}
-
-
-/**
  * Finalize the mantissa bit count by adding in the grouped mantissas.
  */
 static int compute_mantissa_size_final(int mant_cnt[5])
@@ -1052,7 +1027,7 @@ static int bit_alloc(AC3EncodeContext *s, int snr_offset)
                                           s->bit_alloc.floor, ff_ac3_bap_tab,
                                           block->bap[ch]);
             }
-            mantissa_bits += compute_mantissa_size(mant_cnt, block->bap[ch], s->nb_coefs[ch]);
+            mantissa_bits += s->ac3dsp.compute_mantissa_size(mant_cnt, block->bap[ch], s->nb_coefs[ch]);
         }
         mantissa_bits += compute_mantissa_size_final(mant_cnt);
     }



More information about the ffmpeg-cvslog mailing list