Mercurial > libavcodec.hg
comparison lzw.c @ 4732:8583aa3c21bc libavcodec
simplify
author | michael |
---|---|
date | Sun, 25 Mar 2007 23:22:11 +0000 |
parents | 5db8e9e8f71d |
children | 507d08212e36 |
comparison
equal
deleted
inserted
replaced
4731:93fca53ce2e2 | 4732:8583aa3c21bc |
---|---|
146 s->curmask = mask[s->cursize]; | 146 s->curmask = mask[s->cursize]; |
147 s->top_slot = 1 << s->cursize; | 147 s->top_slot = 1 << s->cursize; |
148 s->clear_code = 1 << s->codesize; | 148 s->clear_code = 1 << s->codesize; |
149 s->end_code = s->clear_code + 1; | 149 s->end_code = s->clear_code + 1; |
150 s->slot = s->newcodes = s->clear_code + 2; | 150 s->slot = s->newcodes = s->clear_code + 2; |
151 s->oc = s->fc = 0; | 151 s->oc = s->fc = -1; |
152 s->sp = s->stack; | 152 s->sp = s->stack; |
153 | 153 |
154 s->mode = mode; | 154 s->mode = mode; |
155 switch(s->mode){ | 155 switch(s->mode){ |
156 case FF_LZW_GIF: | 156 case FF_LZW_GIF: |
201 } else if (c == s->clear_code) { | 201 } else if (c == s->clear_code) { |
202 s->cursize = s->codesize + 1; | 202 s->cursize = s->codesize + 1; |
203 s->curmask = mask[s->cursize]; | 203 s->curmask = mask[s->cursize]; |
204 s->slot = s->newcodes; | 204 s->slot = s->newcodes; |
205 s->top_slot = 1 << s->cursize; | 205 s->top_slot = 1 << s->cursize; |
206 while ((c = lzw_get_code(s)) == s->clear_code); | 206 fc= oc= -1; |
207 if (c == s->end_code) { | |
208 s->end_code = -1; | |
209 break; | |
210 } | |
211 /* test error */ | |
212 if (c >= s->slot) | |
213 c = 0; | |
214 fc = oc = c; | |
215 *buf++ = c; | |
216 if ((--l) == 0) | |
217 break; | |
218 } else { | 207 } else { |
219 code = c; | 208 code = c; |
220 if (code >= s->slot) { | 209 if (code >= s->slot) { |
221 *sp++ = fc; | 210 *sp++ = fc; |
222 code = oc; | 211 code = oc; |
224 while (code >= s->newcodes) { | 213 while (code >= s->newcodes) { |
225 *sp++ = s->suffix[code]; | 214 *sp++ = s->suffix[code]; |
226 code = s->prefix[code]; | 215 code = s->prefix[code]; |
227 } | 216 } |
228 *sp++ = code; | 217 *sp++ = code; |
229 if (s->slot < s->top_slot) { | 218 if (s->slot < s->top_slot && oc>=0) { |
230 s->suffix[s->slot] = fc = code; | 219 s->suffix[s->slot] = code; |
231 s->prefix[s->slot++] = oc; | 220 s->prefix[s->slot++] = oc; |
232 oc = c; | 221 } |
233 } | 222 fc = code; |
223 oc = c; | |
234 if (s->slot >= s->top_slot - s->extra_slot) { | 224 if (s->slot >= s->top_slot - s->extra_slot) { |
235 if (s->cursize < LZW_MAXBITS) { | 225 if (s->cursize < LZW_MAXBITS) { |
236 s->top_slot <<= 1; | 226 s->top_slot <<= 1; |
237 s->curmask = mask[++s->cursize]; | 227 s->curmask = mask[++s->cursize]; |
238 } | 228 } |