Simplify xan_huffman_decode by using get_bits

Originally committed as revision 18595 to svn://svn.ffmpeg.org/ffmpeg/trunk
release/0.6
Reimar Döffinger 16 years ago
parent a4873f7d9d
commit be50938073
  1. 16
      libavcodec/xan.c

@ -36,6 +36,8 @@
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "avcodec.h" #include "avcodec.h"
#include "bytestream.h" #include "bytestream.h"
#define ALT_BITSTREAM_READER_LE
#include "get_bits.h"
// for av_memcpy_backptr // for av_memcpy_backptr
#include "libavutil/lzo.h" #include "libavutil/lzo.h"
@ -93,16 +95,13 @@ static int xan_huffman_decode(unsigned char *dest, const unsigned char *src,
unsigned char ival = byte + 0x16; unsigned char ival = byte + 0x16;
const unsigned char * ptr = src + byte*2; const unsigned char * ptr = src + byte*2;
unsigned char val = ival; unsigned char val = ival;
int counter = 0;
unsigned char *dest_end = dest + dest_len; 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 ) { while ( val != 0x16 ) {
if ( (1 << counter) & bits ) val = src[val - 0x17 + get_bits1(&gb) * byte];
val = src[byte + val - 0x17];
else
val = src[val - 0x17];
if ( val < 0x16 ) { if ( val < 0x16 ) {
if (dest + 1 > dest_end) if (dest + 1 > dest_end)
@ -110,11 +109,6 @@ static int xan_huffman_decode(unsigned char *dest, const unsigned char *src,
*dest++ = val; *dest++ = val;
val = ival; val = ival;
} }
if (counter++ == 7) {
counter = 0;
bits = *ptr++;
}
} }
return 0; return 0;

Loading…
Cancel
Save