Simplify xan_huffman_decode by using get_bits
Originally committed as revision 18595 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user