lzwenc.c File Reference

LZW encoder. More...

#include "avcodec.h"
#include "put_bits.h"
#include "lzw.h"
Include dependency graph for lzwenc.c:

Go to the source code of this file.

Data Structures

struct  Code
 One code in hash table. More...
 
struct  LZWEncodeState
 LZW encode state. More...
 

Macros

#define LZW_MAXBITS   12
 
#define LZW_SIZTABLE   (1<<LZW_MAXBITS)
 
#define LZW_HASH_SIZE   16411
 
#define LZW_HASH_SHIFT   6
 
#define LZW_PREFIX_EMPTY   -1
 
#define LZW_PREFIX_FREE   -2
 

Typedefs

typedef struct Code Code
 One code in hash table. More...
 
typedef struct LZWEncodeState LZWEncodeState
 LZW encode state. More...
 

Functions

static int hash (int head, const int add)
 Hash function adding character. More...
 
static int hashNext (int head, const int offset)
 Hash function calculates next hash value. More...
 
static int hashOffset (const int head)
 Hash function calculates hash offset. More...
 
static void writeCode (LZWEncodeState *s, int c)
 Write one code to stream. More...
 
static int findCode (LZWEncodeState *s, uint8_t c, int hash_prefix)
 Find LZW code for block. More...
 
static void addCode (LZWEncodeState *s, uint8_t c, int hash_prefix, int hash_code)
 Add block to LZW code table. More...
 
static void clearTable (LZWEncodeState *s)
 Clear LZW code table. More...
 
static int writtenBytes (LZWEncodeState *s)
 Calculate number of bytes written. More...
 
void ff_lzw_encode_init (LZWEncodeState *s, uint8_t *outbuf, int outsize, int maxbits, enum FF_LZW_MODES mode, void(*lzw_put_bits)(PutBitContext *, int, unsigned))
 Initialize LZW encoder. More...
 
int ff_lzw_encode (LZWEncodeState *s, const uint8_t *inbuf, int insize)
 LZW main compress function. More...
 
int ff_lzw_encode_flush (LZWEncodeState *s, void(*lzw_flush_put_bits)(PutBitContext *))
 Write end code and flush bitstream. More...
 

Variables

const int ff_lzw_encode_state_size = sizeof(LZWEncodeState)
 

Detailed Description

LZW encoder.

Author
Bartlomiej Wolowiec

Definition in file lzwenc.c.

Macro Definition Documentation

#define LZW_HASH_SHIFT   6

Definition at line 35 of file lzwenc.c.

Referenced by hash().

#define LZW_HASH_SIZE   16411

Definition at line 34 of file lzwenc.c.

Referenced by clearTable(), hash(), hashNext(), and hashOffset().

#define LZW_MAXBITS   12

Definition at line 32 of file lzwenc.c.

Referenced by ff_lzw_encode_init().

#define LZW_PREFIX_EMPTY   -1

Definition at line 37 of file lzwenc.c.

Referenced by clearTable(), ff_lzw_encode(), and ff_lzw_encode_init().

#define LZW_PREFIX_FREE   -2

Definition at line 38 of file lzwenc.c.

Referenced by clearTable(), ff_lzw_encode(), and findCode().

#define LZW_SIZTABLE   (1<<LZW_MAXBITS)

Definition at line 33 of file lzwenc.c.

Typedef Documentation

typedef struct Code Code

One code in hash table.

LZW encode state.

Function Documentation

static void addCode ( LZWEncodeState s,
uint8_t  c,
int  hash_prefix,
int  hash_code 
)
inlinestatic

Add block to LZW code table.

Parameters
sLZW state
cLast character in block
hash_prefixLZW code for prefix
hash_codeLZW code for bytes block

Definition at line 148 of file lzwenc.c.

Referenced by ff_lzw_encode().

static void clearTable ( LZWEncodeState s)
static

Clear LZW code table.

Parameters
sLZW state

Definition at line 164 of file lzwenc.c.

Referenced by ff_lzw_encode().

int ff_lzw_encode ( LZWEncodeState s,
const uint8_t inbuf,
int  insize 
)

LZW main compress function.

Parameters
sLZW state
inbufInput buffer
insizeSize of input buffer
Returns
Number of bytes written or -1 on error

Definition at line 226 of file lzwenc.c.

Referenced by encode_strip(), and gif_image_write_image().

int ff_lzw_encode_flush ( LZWEncodeState s,
void(*)(PutBitContext *)  lzw_flush_put_bits 
)

Write end code and flush bitstream.

Parameters
sLZW state
Returns
Number of bytes written or -1 on error

Definition at line 259 of file lzwenc.c.

void ff_lzw_encode_init ( LZWEncodeState s,
uint8_t outbuf,
int  outsize,
int  maxbits,
enum FF_LZW_MODES  mode,
void(*)(PutBitContext *, int, unsigned)  lzw_put_bits 
)

Initialize LZW encoder.

Please set s->clear_code, s->end_code and s->maxbits before run.

Parameters
sLZW state
outbufOutput buffer
outsizeSize of output buffer
maxbitsMaximum length of code

Definition at line 201 of file lzwenc.c.

static int findCode ( LZWEncodeState s,
uint8_t  c,
int  hash_prefix 
)
inlinestatic

Find LZW code for block.

Parameters
sLZW state
cLast character in block
hash_prefixLZW code for prefix
Returns
LZW code for block or -1 if not found in table

Definition at line 126 of file lzwenc.c.

Referenced by ff_lzw_encode().

static int hash ( int  head,
const int  add 
)
inlinestatic
static int hashNext ( int  head,
const int  offset 
)
inlinestatic

Hash function calculates next hash value.

Parameters
headActual hash code
offsetOffset calculated by hashOffset
Returns
New hash value

Definition at line 89 of file lzwenc.c.

Referenced by findCode().

static int hashOffset ( const int  head)
inlinestatic

Hash function calculates hash offset.

Parameters
headActual hash code
Returns
Hash offset

Definition at line 102 of file lzwenc.c.

Referenced by findCode().

static void writeCode ( LZWEncodeState s,
int  c 
)
inlinestatic

Write one code to stream.

Parameters
sLZW state
ccode to write

Definition at line 112 of file lzwenc.c.

Referenced by clearTable(), ff_lzw_encode(), and ff_lzw_encode_flush().

static int writtenBytes ( LZWEncodeState s)
static

Calculate number of bytes written.

Parameters
sLZW encode state
Returns
Number of bytes written

Definition at line 187 of file lzwenc.c.

Referenced by ff_lzw_encode(), and ff_lzw_encode_flush().

Variable Documentation

const int ff_lzw_encode_state_size = sizeof(LZWEncodeState)

Definition at line 66 of file lzwenc.c.

Referenced by encode_frame(), and gif_encode_init().