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)
116 if (
s->little_endian)
136 if ((
s->tab[
h].suffix ==
c)
137 && (
s->tab[
h].hash_prefix == hash_prefix))
154 s->tab[hash_code].code =
s->tabsize;
155 s->tab[hash_code].suffix =
c;
156 s->tab[hash_code].hash_prefix = hash_prefix;
177 for (
i = 0;
i < 256;
i++) {
180 s->tab[
h].suffix =
i;
193 ret -=
s->output_bytes;
194 s->output_bytes += ret;
210 s->maxbits = maxbits;
212 s->bufsize = outsize;
214 s->maxcode = 1 <<
s->maxbits;
219 s->little_endian = little_endian;
233 if(insize * 3 > (
s->bufsize -
s->output_bytes) * 2){
240 for (
i = 0;
i < insize;
i++) {
248 s->last_code =
s->tab[
code].code;
249 if (
s->tabsize >=
s->maxcode - 1) {
264 if (
s->last_code != -1)
267 if (
s->little_endian) {
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Libavcodec external API header.
static float add(float src0, float src1)
mode
Use these values in ebur128_init (or'ed).
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
static void writeCode(LZWEncodeState *s, int c)
Write one code to stream.
static int hashOffset(const int head)
Hash function calculates hash offset.
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.
static int hashNext(int head, const int offset)
Hash function calculates next hash value.
const int ff_lzw_encode_state_size
static void clearTable(LZWEncodeState *s)
Clear LZW code table.
int ff_lzw_encode(LZWEncodeState *s, const uint8_t *inbuf, int insize)
LZW main compress function.
static int findCode(LZWEncodeState *s, uint8_t c, int hash_prefix)
Find LZW code for block.
static void addCode(LZWEncodeState *s, uint8_t c, int hash_prefix, int hash_code)
Add block to LZW code table.
static int writtenBytes(LZWEncodeState *s)
Calculate number of bytes written.
int ff_lzw_encode_flush(LZWEncodeState *s)
Write end code and flush bitstream.
static int hash(int head, const int add)
Hash function adding character.
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static void put_bits_le(PutBitContext *s, int n, BitBuf value)
static void flush_put_bits_le(PutBitContext *s)
static int put_bits_count(PutBitContext *s)
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
int hash_prefix
Hash code of prefix, LZW_PREFIX_EMPTY if empty prefix, or LZW_PREFIX_FREE if no code.
uint8_t suffix
Last character in code block.
int clear_code
Value of clear code.
int end_code
Value of end code.
enum FF_LZW_MODES mode
TIFF or GIF.
PutBitContext pb
Put bit context for output.
int bits
Actual bits code.
int output_bytes
Number of written bytes.
int little_endian
GIF is LE while TIFF is BE.
int maxcode
Max value of code.
int tabsize
Number of values in hash table.
int maxbits
Max bits code.
Code tab[LZW_HASH_SIZE]
Hash table.
int bufsize
Size of output buffer.
int last_code
Value of last output code or LZW_PREFIX_EMPTY.
static const uint8_t offset[127][2]