[Mndiff-dev] [mndiff]: r27 - trunk/mnzip/mnzip.c
michael
subversion at mplayerhq.hu
Fri Jun 15 16:18:57 CEST 2007
Author: michael
Date: Fri Jun 15 16:18:56 2007
New Revision: 27
Log:
dont store unused entries in the header
Modified:
trunk/mnzip/mnzip.c
Modified: trunk/mnzip/mnzip.c
==============================================================================
--- trunk/mnzip/mnzip.c (original)
+++ trunk/mnzip/mnzip.c Fri Jun 15 16:18:56 2007
@@ -640,13 +640,13 @@ fprintf(stderr,"range coding (%d %d)\n",
//memset(state, 3, sizeof(state));
for(i=0; i<256; i++)
- mtf[i]= i;
+ mtf[i]= -1;
ff_init_range_encoder(&c, out, len);
for(i=len-1; i>=0; i--){
int v= tmp[i];
- for(j=0; mtf[j] != v; j++);
+ for(j=0; mtf[j]>=0 && mtf[j] != v; j++);
assert(j<256);
tmp[i]= j;
for(;j>0; j--)
@@ -655,6 +655,10 @@ fprintf(stderr,"range coding (%d %d)\n",
}
for(i=0; i<256; i++){
+ if(mtf[i]<0){
+ put_symbol_255(&c, &state[256*16], mtf[0]);
+ break;
+ }
put_symbol_255(&c, &state[256*16], mtf[i]);
}
@@ -719,6 +723,8 @@ fprintf(stderr," block (%d %d %d)\n", ou
for(i=0; i<256; i++){
int test[256]={0};
mtf[i]= get_symbol_255(&c, &state[256*16]);
+ if(i && mtf[i] == mtf[0])
+ break;
if(mtf[i] > 255U || test[mtf[i]]++){
fprintf(stderr, "fatal error mtf invalid\n");
return -1;
More information about the Mndiff-dev
mailing list