Factorize decode_postfix() out.
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 17 Apr 2008 03:08:25 +0000 (03:08 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 17 Apr 2008 03:08:25 +0000 (03:08 +0000)
Originally committed as revision 12873 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/alac.c

index e99b12b..a99f024 100644 (file)
@@ -145,6 +145,26 @@ static inline int count_leading_zeros(int32_t input)
     return 31-av_log2(input);
 }
 
+
+static inline int decode_postfix(GetBitContext *gb, int x, int k, int limit){
+    if (k >= limit)
+        k = limit;
+
+    if (k != 1) {
+        int extrabits = show_bits(gb, k);
+
+        /* multiply x by 2^k - 1, as part of their strange algorithm */
+        x = (x << k) - x;
+
+        if (extrabits > 1) {
+            x += extrabits - 1;
+            skip_bits(gb, k);
+        } else
+            skip_bits(gb, k - 1);
+    }
+    return x;
+}
+
 static void bastardized_rice_decompress(ALACContext *alac,
                                  int32_t *output_buffer,
                                  int output_size,
@@ -172,27 +192,11 @@ static void bastardized_rice_decompress(ALACContext *alac,
             x = get_bits(&alac->gb, readsamplesize);
         } else {
             /* standard rice encoding */
-            int extrabits;
             int k; /* size of extra bits */
 
             /* read k, that is bits as is */
             k = 31 - count_leading_zeros((history >> 9) + 3);
-
-            if (k >= rice_kmodifier)
-                k = rice_kmodifier;
-
-            if (k != 1) {
-                extrabits = show_bits(&alac->gb, k);
-
-                /* multiply x by 2^k - 1, as part of their strange algorithm */
-                x = (x << k) - x;
-
-                if (extrabits > 1) {
-                    x += extrabits - 1;
-                    skip_bits(&alac->gb, k);
-                } else
-                    skip_bits(&alac->gb, k - 1);
-            }
+            x= decode_postfix(&alac->gb, x, k, rice_kmodifier);
         }
 
         x_modified = sign_modifier + x;
@@ -222,24 +226,10 @@ static void bastardized_rice_decompress(ALACContext *alac,
                 block_size = get_bits(&alac->gb, 16);
             } else {
                 int k;
-                int extrabits;
 
                 k = count_leading_zeros(history) + ((history + 16) >> 6 /* / 64 */) - 24;
 
-                if (k >= rice_kmodifier)
-                    k = rice_kmodifier;
-
-                x = (x << k) - x;
-
-                extrabits = show_bits(&alac->gb, k);
-
-                if (extrabits < 2) {
-                    skip_bits(&alac->gb, k - 1);
-                } else {
-                    x += extrabits - 1;
-                    skip_bits(&alac->gb, k);
-                }
-                block_size = x;
+                block_size= decode_postfix(&alac->gb, x, k, rice_kmodifier);
             }
 
             if (block_size > 0) {