diff options
| author | Christophe Thommeret <hftom@free.fr> | 2009-08-09 00:57:19 +0100 |
|---|---|---|
| committer | Christophe Thommeret <hftom@free.fr> | 2009-08-09 00:57:19 +0100 |
| commit | 4a3ea58e686bfc2bbeeca059a946253798d4d17e (patch) | |
| tree | 5b4ca537ed61f924882d5f6f45eaeca47f903391 /src/libvdpau/bits_reader.h | |
| parent | a645069fe04f733217992fd59a9c1fb4e561500d (diff) | |
| download | xine-lib-4a3ea58e686bfc2bbeeca059a946253798d4d17e.tar.gz xine-lib-4a3ea58e686bfc2bbeeca059a946253798d4d17e.tar.bz2 | |
Switch to bits_reader.
Diffstat (limited to 'src/libvdpau/bits_reader.h')
| -rw-r--r-- | src/libvdpau/bits_reader.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/libvdpau/bits_reader.h b/src/libvdpau/bits_reader.h new file mode 100644 index 000000000..9563c9d3b --- /dev/null +++ b/src/libvdpau/bits_reader.h @@ -0,0 +1,36 @@ +#include <sys/types.h> + + + +typedef struct { + uint8_t *buffer; + int offbits; +} bits_reader_t; + +static void bits_reader_set( bits_reader_t *br, uint8_t *buf ) +{ + br->buffer = buf; + br->offbits = 0; +} + +static uint32_t read_bits( bits_reader_t *br, int nbits ) +{ + int i, nbytes; + uint32_t ret = 0; + uint8_t *buf; + + buf = br->buffer; + nbytes = (br->offbits + nbits)/8; + if ( ((br->offbits + nbits) %8 ) > 0 ) + nbytes++; + for ( i=0; i<nbytes; i++ ) + ret += buf[i]<<((nbytes-i-1)*8); + i = (4-nbytes)*8+br->offbits; + ret = ((ret<<i)>>i)>>((nbytes*8)-nbits-br->offbits); + + br->offbits += nbits; + br->buffer += br->offbits / 8; + br->offbits %= 8; + + return ret; +} |
