Description
Looking at the spec: https://www.fileformat.info/format/tiff/corion-lzw.htm
The function GetNextCode() retrieves the next code from the LZW-
coded data. It must keep track of bit boundaries. It knows that
the first code that it gets will be a 9-bit code. We add a table
entry each time we get a code, so GetNextCode() must switch over
to 10-bit codes as soon as string #511 is stored into the table.
We need to change the code length as soon at #511 is stored.
However in the code the change is done at 510:
Lines 94 to 96 in 73ca971
I don't know what is the correct version but the confusion could be due to TIFF version:
https://stackoverflow.com/questions/26366659/whats-special-about-tiff-5-0-style-lzw-compression
- LZW codes are written to the stream in reversed bit order.
- "New-style" increases the code size one symbol earlier than "old-style" (so-called "Early Change").
The current implementation in 'debug-lzw' branch seems however correct based on the lzw images we have and the comparison with convert
from imagemagick.