33 #define LZW_MAXBITS 12 34 #define LZW_SIZTABLE (1<<LZW_MAXBITS) 35 #define LZW_HASH_SIZE 16411 36 #define LZW_HASH_SHIFT 6 38 #define LZW_PREFIX_EMPTY -1 39 #define LZW_PREFIX_FREE -2 75 static inline int hash(
int head,
const int add)
177 for (i = 0; i < 256; i++) {
240 for (i = 0; i < insize; i++) {
int hash_prefix
Hash code of prefix, LZW_PREFIX_EMPTY if empty prefix, or LZW_PREFIX_FREE if no code.
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
int bufsize
Size of output buffer.
static int hash(int head, const int add)
Hash function adding character.
static void addCode(LZWEncodeState *s, uint8_t c, int hash_prefix, int hash_code)
Add block to LZW code table.
int end_code
Value of end code.
int maxbits
Max bits code.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static void clearTable(LZWEncodeState *s)
Clear LZW code table.
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
int little_endian
GIF is LE while TIFF is BE.
PutBitContext pb
Put bit context for output.
int tabsize
Number of values in hash table.
int clear_code
Value of clear code.
static int writtenBytes(LZWEncodeState *s)
Calculate number of bytes written.
int last_code
Value of last output code or LZW_PREFIX_EMPTY.
static int put_bits_count(PutBitContext *s)
static void flush_put_bits_le(PutBitContext *s)
int ff_lzw_encode(LZWEncodeState *s, const uint8_t *inbuf, int insize)
LZW main compress function.
static void put_bits_le(PutBitContext *s, int n, BitBuf value)
static void writeCode(LZWEncodeState *s, int c)
Write one code to stream.
static int findCode(LZWEncodeState *s, uint8_t c, int hash_prefix)
Find LZW code for block.
int ff_lzw_encode_flush(LZWEncodeState *s)
Write end code and flush bitstream.
uint8_t suffix
Last character in code block.
int maxcode
Max value of code.
Libavcodec external API header.
enum FF_LZW_MODES mode
TIFF or GIF.
int bits
Actual bits code.
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
int output_bytes
Number of written bytes.
static const struct twinvq_data tab
static float add(float src0, float src1)
static int hashNext(int head, const int offset)
Hash function calculates next hash value.
void ff_lzw_encode_init(LZWEncodeState *s, uint8_t *outbuf, int outsize, int maxbits, enum FF_LZW_MODES mode, int little_endian)
Initialize LZW encoder.
const int ff_lzw_encode_state_size
mode
Use these values in ebur128_init (or'ed).
static int hashOffset(const int head)
Hash function calculates hash offset.
Code tab[LZW_HASH_SIZE]
Hash table.