]> git.sesse.net Git - ffmpeg/commitdiff
ac3enc: split mantissa bit counting into a separate function.
authorJustin Ruggles <justin.ruggles@gmail.com>
Thu, 26 May 2011 16:31:31 +0000 (12:31 -0400)
committerJustin Ruggles <justin.ruggles@gmail.com>
Sat, 28 May 2011 16:39:28 +0000 (12:39 -0400)
No speed difference. This is to allow for more flexible bit counting.

libavcodec/ac3enc.c

index 1faafb61d6d818c9af98b31a50da019eeb73709e..6b9bd87853560feac0bf68349be1a4742a496e65 100644 (file)
@@ -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);
 }