diff liba52/bitstream.c @ 1072:68d0a38bd802 libavcodec

* sync with main liba52 sources
author kabi
date Tue, 18 Feb 2003 11:48:57 +0000
parents dd4f4c3d7171
children e101d1cffec6
line wrap: on
line diff
--- a/liba52/bitstream.c	Tue Feb 18 09:33:21 2003 +0000
+++ b/liba52/bitstream.c	Tue Feb 18 11:48:57 2003 +0000
@@ -1,6 +1,6 @@
 /*
  * bitstream.c
- * Copyright (C) 2000-2002 Michel Lespinasse <walken@zoy.org>
+ * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org>
  * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
  *
  * This file is part of a52dec, a free ATSC A-52 stream decoder.
@@ -21,34 +21,33 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+#include "config.h"
+
+#include <inttypes.h>
+
 #include "a52.h"
 #include "a52_internal.h"
 #include "bitstream.h"
 
 #define BUFFER_SIZE 4096
 
-static uint32_t * buffer_start;
-
-uint32_t a52_bits_left;
-uint32_t a52_current_word;
-
-void a52_bitstream_set_ptr (uint8_t * buf)
+void a52_bitstream_set_ptr (a52_state_t * state, uint8_t * buf)
 {
     int align;
 
     align = (long)buf & 3;
-    buffer_start = (uint32_t *) (buf - align);
-    a52_bits_left = 0;
-    bitstream_get (align * 8);
+    state->buffer_start = (uint32_t *) (buf - align);
+    state->bits_left = 0;
+    state->current_word = 0;
+    bitstream_get (state, align * 8);
 }
 
-static inline void
-bitstream_fill_current()
+static inline void bitstream_fill_current (a52_state_t * state)
 {
     uint32_t tmp;
 
-    tmp = *(buffer_start++);
-    a52_current_word = swab32 (tmp);
+    tmp = *(state->buffer_start++);
+    state->current_word = swab32 (tmp);
 }
 
 /*
@@ -60,40 +59,38 @@
  * -ah
  */
 
-uint32_t
-a52_bitstream_get_bh(uint32_t num_bits)
+uint32_t a52_bitstream_get_bh (a52_state_t * state, uint32_t num_bits)
 {
     uint32_t result;
 
-    num_bits -= a52_bits_left;
-    result = ((a52_current_word << (32 - a52_bits_left)) >>
-	      (32 - a52_bits_left));
+    num_bits -= state->bits_left;
+    result = ((state->current_word << (32 - state->bits_left)) >>
+	      (32 - state->bits_left));
 
-    bitstream_fill_current();
+    bitstream_fill_current (state);
 
-    if(num_bits != 0)
-	result = (result << num_bits) | (a52_current_word >> (32 - num_bits));
+    if (num_bits != 0)
+	result = (result << num_bits) | (state->current_word >> (32 - num_bits));
 
-    a52_bits_left = 32 - num_bits;
+    state->bits_left = 32 - num_bits;
 
     return result;
 }
 
-int32_t
-a52_bitstream_get_bh_2(uint32_t num_bits)
+int32_t a52_bitstream_get_bh_2 (a52_state_t * state, uint32_t num_bits)
 {
     int32_t result;
 
-    num_bits -= a52_bits_left;
-    result = ((((int32_t)a52_current_word) << (32 - a52_bits_left)) >>
-	      (32 - a52_bits_left));
+    num_bits -= state->bits_left;
+    result = ((((int32_t)state->current_word) << (32 - state->bits_left)) >>
+	      (32 - state->bits_left));
 
-    bitstream_fill_current();
+    bitstream_fill_current(state);
 
-    if(num_bits != 0)
-	result = (result << num_bits) | (a52_current_word >> (32 - num_bits));
+    if (num_bits != 0)
+	result = (result << num_bits) | (state->current_word >> (32 - num_bits));
 	
-    a52_bits_left = 32 - num_bits;
+    state->bits_left = 32 - num_bits;
 
     return result;
 }