# HG changeset patch # User reimar # Date 1239997734 0 # Node ID 2c6a58787aeb505bcca771e6df7459e82fb043c1 # Parent fc15a3b977bf4a58e6791bd48f446f8fa6d5fa69 Simplify xan_huffman_decode by using get_bits diff -r fc15a3b977bf -r 2c6a58787aeb xan.c --- a/xan.c Fri Apr 17 19:29:54 2009 +0000 +++ b/xan.c Fri Apr 17 19:48:54 2009 +0000 @@ -36,6 +36,8 @@ #include "libavutil/intreadwrite.h" #include "avcodec.h" #include "bytestream.h" +#define ALT_BITSTREAM_READER_LE +#include "get_bits.h" // for av_memcpy_backptr #include "libavutil/lzo.h" @@ -93,16 +95,13 @@ unsigned char ival = byte + 0x16; const unsigned char * ptr = src + byte*2; unsigned char val = ival; - int counter = 0; unsigned char *dest_end = dest + dest_len; + GetBitContext gb; - unsigned char bits = *ptr++; + init_get_bits(&gb, ptr, 0); // FIXME: no src size available while ( val != 0x16 ) { - if ( (1 << counter) & bits ) - val = src[byte + val - 0x17]; - else - val = src[val - 0x17]; + val = src[val - 0x17 + get_bits1(&gb) * byte]; if ( val < 0x16 ) { if (dest + 1 > dest_end) @@ -110,11 +109,6 @@ *dest++ = val; val = ival; } - - if (counter++ == 7) { - counter = 0; - bits = *ptr++; - } } return 0;