[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