[Libav-user] Using libav LZW compression methods.

Luka Petrinsak lukapetrinsakx at gmail.com
Mon Apr 4 12:16:40 CEST 2016

Why does output buffer needs to be bigger than input buffer, wouldn't that
result in bigger buffer after compression has been done?


if(insize * 3 > (s->bufsize - s->output_bytes) * 2){

        return -1;


Why are first 256 indexes in hash table filled with LZW_PREFIX_EMPTY
hash_prefix value and others are filled with LZW_PREFIX_FREE (which marks
the tables as free/clear)?


for (i = 0; i < 256; i++) {

        h = hash(0, i);

        s->tab[h].code = i;

        s->tab[h].suffix = i;

        s->tab[h].hash_prefix = LZW_PREFIX_EMPTY;


What is writeCode actually doing? Since i can't figure out what is put_bits
function used for. Also, im guessing av_assert2 macro is used for error
reporting depending on the condition passed through it.

static inline void writeCode(LZWEncodeState * s, int c)


    av_assert2(0 <= c && c < 1 << s->bits);

    s->put_bits(&s->pb, s->bits, c);

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20160404/fa7f26de/attachment.html>

More information about the Libav-user mailing list