[FFmpeg-cvslog] ac3enc: split mantissa bit counting into a separate function.

Justin Ruggles git at videolan.org
Sun May 29 03:46:46 CEST 2011


ffmpeg | branch: master | Justin Ruggles <justin.ruggles at gmail.com> | Thu May 26 12:31:31 2011 -0400| [1323828a0fbfa428d2e39a9f094039637b7fef5b] | committer: Justin Ruggles

ac3enc: split mantissa bit counting into a separate function.

No speed difference. This is to allow for more flexible bit counting.

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

 libavcodec/ac3enc.c |   49 +++++++++++++++++++++++++++++++------------------
 1 files changed, 31 insertions(+), 18 deletions(-)

diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c
index 1faafb6..6b9bd87 100644
--- a/libavcodec/ac3enc.c
+++ b/libavcodec/ac3enc.c
@@ -1491,22 +1491,12 @@ static void reset_block_bap(AC3EncodeContext *s)
 }
 
 
-/**
- * Run the bit allocation with a given SNR offset.
- * This calculates the bit allocation pointers that will be used to determine
- * the quantization of each mantissa.
- * @return the number of bits needed for mantissas if the given SNR offset is
- *         is used.
- */
-static int bit_alloc(AC3EncodeContext *s, int snr_offset)
+static int count_mantissa_bits(AC3EncodeContext *s)
 {
     int blk, ch;
     int mantissa_bits;
     int mant_cnt[5];
 
-    snr_offset = (snr_offset - 240) << 2;
-
-    reset_block_bap(s);
     mantissa_bits = 0;
     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
         AC3Block *block = &s->blocks[blk];
@@ -1524,7 +1514,36 @@ static int bit_alloc(AC3EncodeContext *s, int snr_offset)
                 ch      = CPL_CH;
                 got_cpl = 1;
             }
+            mantissa_bits += s->ac3dsp.compute_mantissa_size(mant_cnt,
+                                                             s->ref_bap[ch][blk]+s->start_freq[ch],
+                                                             block->end_freq[ch]-s->start_freq[ch]);
+            if (ch == CPL_CH)
+                ch = ch0;
+        }
+        mantissa_bits += compute_mantissa_size_final(mant_cnt);
+    }
+    return mantissa_bits;
+}
 
+
+/**
+ * Run the bit allocation with a given SNR offset.
+ * This calculates the bit allocation pointers that will be used to determine
+ * the quantization of each mantissa.
+ * @return the number of bits needed for mantissas if the given SNR offset is
+ *         is used.
+ */
+static int bit_alloc(AC3EncodeContext *s, int snr_offset)
+{
+    int blk, ch;
+
+    snr_offset = (snr_offset - 240) << 2;
+
+    reset_block_bap(s);
+    for (blk = 0; blk < AC3_MAX_BLOCKS; blk++) {
+        AC3Block *block = &s->blocks[blk];
+
+        for (ch = !block->cpl_in_use; ch <= s->channels; ch++) {
             /* Currently the only bit allocation parameters which vary across
                blocks within a frame are the exponent values.  We can take
                advantage of that by reusing the bit allocation pointers
@@ -1535,15 +1554,9 @@ static int bit_alloc(AC3EncodeContext *s, int snr_offset)
                                              snr_offset, s->bit_alloc.floor,
                                              ff_ac3_bap_tab, s->ref_bap[ch][blk]);
             }
-            mantissa_bits += s->ac3dsp.compute_mantissa_size(mant_cnt,
-                                                             s->ref_bap[ch][blk]+s->start_freq[ch],
-                                                             block->end_freq[ch]-s->start_freq[ch]);
-            if (ch == CPL_CH)
-                ch = ch0;
         }
-        mantissa_bits += compute_mantissa_size_final(mant_cnt);
     }
-    return mantissa_bits;
+    return count_mantissa_bits(s);
 }
 
 



More information about the ffmpeg-cvslog mailing list