diff alac.c @ 6626:a2f1a461dac6 libavcodec

Factorize more code.
author michael
date Thu, 17 Apr 2008 03:21:15 +0000
parents 1f4a86db7835
children 33a41b13fbfe
line wrap: on
line diff
--- a/alac.c	Thu Apr 17 03:08:25 2008 +0000
+++ b/alac.c	Thu Apr 17 03:21:15 2008 +0000
@@ -146,7 +146,14 @@
 }
 
 
-static inline int decode_postfix(GetBitContext *gb, int x, int k, int limit){
+static inline int decode_scalar(GetBitContext *gb, int k, int limit, int readsamplesize){
+    /* read x - number of 1s before 0 represent the rice */
+    int x = get_unary_0_9(gb);
+
+    if (x > 8) { /* RICE THRESHOLD */
+        /* use alternative encoding */
+        x = get_bits(gb, readsamplesize);
+    } else {
     if (k >= limit)
         k = limit;
 
@@ -162,6 +169,7 @@
         } else
             skip_bits(gb, k - 1);
     }
+    }
     return x;
 }
 
@@ -184,20 +192,12 @@
         int32_t x_modified;
         int32_t final_val;
 
-        /* read x - number of 1s before 0 represent the rice */
-        x = get_unary_0_9(&alac->gb);
-
-        if (x > 8) { /* RICE THRESHOLD */
-            /* use alternative encoding */
-            x = get_bits(&alac->gb, readsamplesize);
-        } else {
             /* standard rice encoding */
             int k; /* size of extra bits */
 
             /* read k, that is bits as is */
             k = 31 - count_leading_zeros((history >> 9) + 3);
-            x= decode_postfix(&alac->gb, x, k, rice_kmodifier);
-        }
+            x= decode_scalar(&alac->gb, k, rice_kmodifier, readsamplesize);
 
         x_modified = sign_modifier + x;
         final_val = (x_modified + 1) / 2;
@@ -216,21 +216,13 @@
 
         /* special case: there may be compressed blocks of 0 */
         if ((history < 128) && (output_count+1 < output_size)) {
-            int block_size;
+            int block_size, k;
 
             sign_modifier = 1;
 
-            x = get_unary_0_9(&alac->gb);
-
-            if (x > 8) {
-                block_size = get_bits(&alac->gb, 16);
-            } else {
-                int k;
-
                 k = count_leading_zeros(history) + ((history + 16) >> 6 /* / 64 */) - 24;
 
-                block_size= decode_postfix(&alac->gb, x, k, rice_kmodifier);
-            }
+                block_size= decode_scalar(&alac->gb, k, rice_kmodifier, 16);
 
             if (block_size > 0) {
                 memset(&output_buffer[output_count+1], 0, block_size * 4);