<div dir="ltr"><p class="MsoNormal">Why does output buffer needs to be bigger than input buffer,
wouldn't that result in bigger buffer after compression has been done?</p>

<p class="MsoNormal">(ff_lzw_encode)</p>

<p class="MsoNormal">if(insize * 3 > (s->bufsize - s->output_bytes) *
2){</p>

<p class="MsoNormal">        return -1;</p>

<p class="MsoNormal">    }</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">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)?</p>

<p class="MsoNormal">(clearTable)</p>

<p class="MsoNormal">for (i = 0; i < 256; i++) {</p>

<p class="MsoNormal">        h = hash(0,
i);</p>

<p class="MsoNormal">       
s->tab[h].code = i;</p>

<p class="MsoNormal">       
s->tab[h].suffix = i;</p>

<p class="MsoNormal">       
s->tab[h].hash_prefix = LZW_PREFIX_EMPTY;</p>

<p class="MsoNormal">    }</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">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. </p>

<p class="MsoNormal">static inline void writeCode(LZWEncodeState * s, int c)</p>

<p class="MsoNormal">{</p>

<p class="MsoNormal">    av_assert2(0 <=
c && c < 1 << s->bits);</p>

<p class="MsoNormal">    s->put_bits(&s->pb,
s->bits, c);</p>

<p class="MsoNormal">}</p></div>