[FFmpeg-cvslog] r12873 - trunk/libavcodec/alac.c

michael subversion
Thu Apr 17 05:08:25 CEST 2008


Author: michael
Date: Thu Apr 17 05:08:25 2008
New Revision: 12873

Log:
Factorize decode_postfix() out.


Modified:
   trunk/libavcodec/alac.c

Modified: trunk/libavcodec/alac.c
==============================================================================
--- trunk/libavcodec/alac.c	(original)
+++ trunk/libavcodec/alac.c	Thu Apr 17 05:08:25 2008
@@ -145,6 +145,26 @@ static inline int count_leading_zeros(in
     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(
             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(
                 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) {




More information about the ffmpeg-cvslog mailing list