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 }