Simplify bit allocation search by using a loop for the SNR offset increment.
authorJustin Ruggles <justin.ruggles@gmail.com>
Fri, 17 Dec 2010 15:02:12 +0000 (15:02 +0000)
committerJustin Ruggles <justin.ruggles@gmail.com>
Fri, 17 Dec 2010 15:02:12 +0000 (15:02 +0000)
Originally committed as revision 26044 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/ac3enc.c

index 3495db0ad5f35b0c3d55209fd754c553b564c0dc..da9293b86747b9f328ab487816032234ccb5574f 100644 (file)
@@ -1055,7 +1055,7 @@ static int cbr_bit_allocation(AC3EncodeContext *s)
 {
     int ch;
     int bits_left;
-    int snr_offset;
+    int snr_offset, snr_incr;
 
     bits_left = 8 * s->frame_size - (s->frame_bits + s->exponent_bits);
 
@@ -1069,25 +1069,12 @@ static int cbr_bit_allocation(AC3EncodeContext *s)
         return AVERROR(EINVAL);
 
     FFSWAP(uint8_t *, s->bap_buffer, s->bap1_buffer);
+    for (snr_incr = 64; snr_incr > 0; snr_incr >>= 2) {
     while (snr_offset + 64 <= 1023 &&
-           bit_alloc(s, snr_offset + 64) <= bits_left) {
-        snr_offset += 64;
+           bit_alloc(s, snr_offset + snr_incr) <= bits_left) {
+        snr_offset += snr_incr;
         FFSWAP(uint8_t *, s->bap_buffer, s->bap1_buffer);
     }
-    while (snr_offset + 16 <= 1023 &&
-           bit_alloc(s, snr_offset + 16) <= bits_left) {
-        snr_offset += 16;
-        FFSWAP(uint8_t *, s->bap_buffer, s->bap1_buffer);
-    }
-    while (snr_offset + 4 <= 1023 &&
-           bit_alloc(s, snr_offset + 4) <= bits_left) {
-        snr_offset += 4;
-        FFSWAP(uint8_t *, s->bap_buffer, s->bap1_buffer);
-    }
-    while (snr_offset + 1 <= 1023 &&
-           bit_alloc(s, snr_offset + 1) <= bits_left) {
-        snr_offset++;
-        FFSWAP(uint8_t *, s->bap_buffer, s->bap1_buffer);
     }
     FFSWAP(uint8_t *, s->bap_buffer, s->bap1_buffer);
     reset_block_bap(s);