|
|
@ -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; |
|
|
|