changeset 4469:a2e82396193c libavcodec

factorize switch_buffer()
author michael
date Sat, 03 Feb 2007 13:15:55 +0000
parents 5455cb5a759c
children 2c9a66c5223a
files mpegaudiodec.c
diffstat 1 files changed, 16 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/mpegaudiodec.c	Sat Feb 03 12:42:12 2007 +0000
+++ b/mpegaudiodec.c	Sat Feb 03 13:15:55 2007 +0000
@@ -1592,6 +1592,19 @@
         return get_bits(s, n);
 }
 
+
+static void switch_buffer(MPADecodeContext *s, int *pos, int *end_pos, int *end_pos2){
+    if(s->in_gb.buffer && *pos >= s->gb.size_in_bits){
+        s->gb= s->in_gb;
+        s->in_gb.buffer=NULL;
+        assert((get_bits_count(&s->gb) & 7) == 0);
+        skip_bits_long(&s->gb, *pos - *end_pos);
+        *end_pos2=
+        *end_pos= *end_pos2 + get_bits_count(&s->gb) - *pos;
+        *pos= get_bits_count(&s->gb);
+    }
+}
+
 static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
                           int16_t *exponents, int end_pos2)
 {
@@ -1627,15 +1640,7 @@
 
             if (pos >= end_pos){
 //                av_log(NULL, AV_LOG_ERROR, "pos: %d %d %d %d\n", pos, end_pos, end_pos2, s_index);
-                if(s->in_gb.buffer && pos >= s->gb.size_in_bits){
-                    s->gb= s->in_gb;
-                    s->in_gb.buffer=NULL;
-                    assert((get_bits_count(&s->gb) & 7) == 0);
-                    skip_bits_long(&s->gb, pos - end_pos);
-                    end_pos2=
-                    end_pos= end_pos2 + get_bits_count(&s->gb) - pos;
-                    pos= get_bits_count(&s->gb);
-                }
+                switch_buffer(s, &pos, &end_pos, &end_pos2);
 //                av_log(NULL, AV_LOG_ERROR, "new pos: %d %d\n", pos, end_pos);
                 if(pos >= end_pos)
                     break;
@@ -1712,15 +1717,7 @@
                 break;
             }
 //                av_log(NULL, AV_LOG_ERROR, "pos2: %d %d %d %d\n", pos, end_pos, end_pos2, s_index);
-            if(s->in_gb.buffer && pos >= s->gb.size_in_bits){
-                s->gb= s->in_gb;
-                s->in_gb.buffer=NULL;
-                assert((get_bits_count(&s->gb) & 7) == 0);
-                skip_bits_long(&s->gb, pos - end_pos);
-                end_pos2=
-                end_pos= end_pos2 + get_bits_count(&s->gb) - pos;
-                pos= get_bits_count(&s->gb);
-            }
+            switch_buffer(s, &pos, &end_pos, &end_pos2);
 //                av_log(NULL, AV_LOG_ERROR, "new pos2: %d %d %d\n", pos, end_pos, s_index);
             if(pos >= end_pos)
                 break;
@@ -1760,12 +1757,7 @@
     skip_bits_long(&s->gb, bits_left);
 
     i= get_bits_count(&s->gb);
-    if(s->in_gb.buffer && i >= s->gb.size_in_bits){
-        s->gb= s->in_gb;
-        s->in_gb.buffer=NULL;
-        assert((get_bits_count(&s->gb) & 7) == 0);
-        skip_bits_long(&s->gb, i - end_pos);
-    }
+    switch_buffer(s, &i, &end_pos, &end_pos2);
 
     return 0;
 }