changeset 6625:1f4a86db7835 libavcodec

Factorize decode_postfix() out.
author michael
date Thu, 17 Apr 2008 03:08:25 +0000
parents 2dc587201e38
children a2f1a461dac6
files alac.c
diffstat 1 files changed, 22 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/alac.c	Thu Apr 17 03:00:08 2008 +0000
+++ b/alac.c	Thu Apr 17 03:08:25 2008 +0000
@@ -145,6 +145,26 @@
     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 @@
             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 @@
                 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) {