diff Plugins/Input/mpg123/getbits.c @ 61:fa848bd484d8 trunk

[svn] Move plugins to Plugins/
author nenolod
date Fri, 28 Oct 2005 22:58:11 -0700
parents
children 05d824e30afd
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/Input/mpg123/getbits.c	Fri Oct 28 22:58:11 2005 -0700
@@ -0,0 +1,132 @@
+#include "mpg123.h"
+
+#if 0
+static void
+check_buffer_range(int size)
+{
+    int pos = (bsi.wordpointer - bsbuf) + (size >> 3);
+
+    if (pos >= fsizeold) {
+        fprintf(stderr, "Pointer out of range (%d,%d)!\n", pos, fsizeold);
+    }
+}
+#endif
+
+void
+mpg123_backbits(int number_of_bits)
+{
+    bsi.bitindex -= number_of_bits;
+    bsi.wordpointer += (bsi.bitindex >> 3);
+    bsi.bitindex &= 0x7;
+}
+
+int
+mpg123_getbitoffset(void)
+{
+    return (-bsi.bitindex) & 0x7;
+}
+
+int
+mpg123_getbyte(void)
+{
+#ifdef DEBUG_GETBITS
+    if (bsi.bitindex)
+        fprintf(stderr, "getbyte called unsynched!\n");
+#endif
+    return *bsi.wordpointer++;
+}
+
+unsigned int
+mpg123_getbits(int number_of_bits)
+{
+    unsigned long rval;
+
+#ifdef DEBUG_GETBITS
+    fprintf(stderr, "g%d", number_of_bits);
+#endif
+
+    if (!number_of_bits)
+        return 0;
+
+#if 0
+    check_buffer_range(number_of_bits + bsi.bitindex);
+#endif
+
+    {
+        rval = bsi.wordpointer[0];
+        rval <<= 8;
+        rval |= bsi.wordpointer[1];
+        rval <<= 8;
+        rval |= bsi.wordpointer[2];
+
+        rval <<= bsi.bitindex;
+        rval &= 0xffffff;
+
+        bsi.bitindex += number_of_bits;
+
+        rval >>= (24 - number_of_bits);
+
+        bsi.wordpointer += (bsi.bitindex >> 3);
+        bsi.bitindex &= 7;
+    }
+
+#ifdef DEBUG_GETBITS
+    fprintf(stderr, ":%x ", rval);
+#endif
+
+    return rval;
+}
+
+unsigned int
+mpg123_getbits_fast(int number_of_bits)
+{
+    unsigned int rval;
+#ifdef DEBUG_GETBITS
+    fprintf(stderr, "g%d", number_of_bits);
+#endif
+
+#if 0
+    check_buffer_range(number_of_bits + bsi.bitindex);
+#endif
+
+    rval = (unsigned char) (bsi.wordpointer[0] << bsi.bitindex);
+    rval |= ((unsigned int) bsi.wordpointer[1] << bsi.bitindex) >> 8;
+    rval <<= number_of_bits;
+    rval >>= 8;
+
+    bsi.bitindex += number_of_bits;
+
+    bsi.wordpointer += (bsi.bitindex >> 3);
+    bsi.bitindex &= 7;
+
+#ifdef DEBUG_GETBITS
+    fprintf(stderr, ":%x ", rval);
+#endif
+    return rval;
+}
+
+unsigned int
+mpg123_get1bit(void)
+{
+    unsigned char rval;
+
+#ifdef DEBUG_GETBITS
+    fprintf(stderr, "g%d", 1);
+#endif
+
+#if 0
+    check_buffer_range(1 + bsi.bitindex);
+#endif
+
+    rval = *bsi.wordpointer << bsi.bitindex;
+
+    bsi.bitindex++;
+    bsi.wordpointer += (bsi.bitindex >> 3);
+    bsi.bitindex &= 7;
+
+#ifdef DEBUG_GETBITS
+    fprintf(stderr, ":%d ", rval >> 7);
+#endif
+
+    return rval >> 7;
+}