pdf-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [pdf-devel] Bug in LZW filter?


From: Aleksander Morgado
Subject: Re: [pdf-devel] Bug in LZW filter?
Date: Tue, 29 Nov 2011 08:33:21 +0100

> >> @@ -419,7 +421,7 @@
> >>            lzw_buffer_put_code (&st->buffer, st->string.prefix);
> >>            st->string.prefix = st->string.suffix;
> >>
> >> -          if (st->buffer.maxval - st->early_change == st->dict.size)
> >> +          if (st->buffer.maxval - st->early_change + 2 == st->dict.size)
> >>              {
> >>                if (!lzw_buffer_inc_bitsize (&st->buffer))
> >>                  {
> 
> I found a very good explanation for a "+1" at this place (a second +1 is
> of course still missing).
> 
> As stated in ISO32000 bitsize increase shall happen after inserting
> table entry 511. This is what we do. But the algorithm steps in ISO32000
> are:
> 1) Accumulate longest input sequence
> 2) Emmit Code
> 3) Create new table entry
> 
> We actually do:
> 1)
> 3)
> 2)
> 
> This is why we are one output code too early.
> 
> Maybe it is worth to restructure the LZW encoder to 1),2),3). I know
> that this would need some extra cycles for looking up and additional
> inserting (instead of doing it with one call of lzw_dict_add). But maybe
> we are able to testify the testdata and get a correct and easy to
> maintain algorithm. If you wish, I will do this.
> 
> By the way: all descriptions I found explain LZW with order 1),2),3).
> 

If that is the case, then it's probably much better to reorder the
filter to work with that order, documenting each step in the source
code.

-- 
Aleksander

Attachment: signature.asc
Description: This is a digitally signed message part


reply via email to

[Prev in Thread] Current Thread [Next in Thread]