]> Creatis software - gdcm.git/blobdiff - src/jpeg/libijg/jquant1.c
ENH: Fix the remaining warnings using: diff -u --strip-trailing-cr --ignore-space...
[gdcm.git] / src / jpeg / libijg / jquant1.c
index b2f96aa15d25dd722c55b955bf0e475eb3160c15..2ec9a41ed4c7c5fc81e78485098aaf5d1c9d107a 100644 (file)
@@ -68,9 +68,9 @@
  * table in both directions.
  */
 
-#define ODITHER_SIZE  16       /* dimension of dither matrix */
+#define ODITHER_SIZE  16  /* dimension of dither matrix */
 /* NB: if ODITHER_SIZE is not a power of 2, ODITHER_MASK uses will break */
-#define ODITHER_CELLS (ODITHER_SIZE*ODITHER_SIZE)      /* # cells in matrix */
+#define ODITHER_CELLS (ODITHER_SIZE*ODITHER_SIZE)  /* # cells in matrix */
 #define ODITHER_MASK  (ODITHER_SIZE-1) /* mask for wrapping around counters */
 
 typedef int ODITHER_MATRIX[ODITHER_SIZE][ODITHER_SIZE];
@@ -105,8 +105,8 @@ static const UINT8 base_dither_matrix[ODITHER_SIZE][ODITHER_SIZE] = {
  * Errors are accumulated into the array fserrors[], at a resolution of
  * 1/16th of a pixel count.  The error at a given pixel is propagated
  * to its not-yet-processed neighbors using the standard F-S fractions,
- *             ...     (here)  7/16
- *             3/16    5/16    1/16
+ *    ...  (here)  7/16
+ *    3/16  5/16  1/16
  * We work left-to-right on even rows, right-to-left on odd rows.
  *
  * We can get away with a single array (holding one row's worth of errors)
@@ -125,43 +125,43 @@ static const UINT8 base_dither_matrix[ODITHER_SIZE][ODITHER_SIZE] = {
  */
 
 #if BITS_IN_JSAMPLE == 8
-typedef INT16 FSERROR;         /* 16 bits should be enough */
-typedef int LOCFSERROR;                /* use 'int' for calculation temps */
+typedef INT16 FSERROR;    /* 16 bits should be enough */
+typedef int LOCFSERROR;    /* use 'int' for calculation temps */
 #else
-typedef INT32 FSERROR;         /* may need more than 16 bits */
-typedef INT32 LOCFSERROR;      /* be sure calculation temps are big enough */
+typedef INT32 FSERROR;    /* may need more than 16 bits */
+typedef INT32 LOCFSERROR;  /* be sure calculation temps are big enough */
 #endif
 
-typedef FSERROR FAR *FSERRPTR; /* pointer to error array (in FAR storage!) */
+typedef FSERROR FAR *FSERRPTR;  /* pointer to error array (in FAR storage!) */
 
 
 /* Private subobject */
 
-#define MAX_Q_COMPS 4          /* max components I can handle */
+#define MAX_Q_COMPS 4    /* max components I can handle */
 
 typedef struct {
   struct jpeg_color_quantizer pub; /* public fields */
 
   /* Initially allocated colormap is saved here */
-  JSAMPARRAY sv_colormap;      /* The color map as a 2-D pixel array */
-  int sv_actual;               /* number of entries in use */
+  JSAMPARRAY sv_colormap;  /* The color map as a 2-D pixel array */
+  int sv_actual;    /* number of entries in use */
 
-  JSAMPARRAY colorindex;       /* Precomputed mapping for speed */
+  JSAMPARRAY colorindex;  /* Precomputed mapping for speed */
   /* colorindex[i][j] = index of color closest to pixel value j in component i,
    * premultiplied as described above.  Since colormap indexes must fit into
    * JSAMPLEs, the entries of this array will too.
    */
-  boolean is_padded;           /* is the colorindex padded for odither? */
+  boolean is_padded;    /* is the colorindex padded for odither? */
 
-  int Ncolors[MAX_Q_COMPS];    /* # of values alloced to each component */
+  int Ncolors[MAX_Q_COMPS];  /* # of values alloced to each component */
 
   /* Variables for ordered dithering */
-  int row_index;               /* cur row's vertical index in dither matrix */
+  int row_index;    /* cur row's vertical index in dither matrix */
   ODITHER_MATRIX_PTR odither[MAX_Q_COMPS]; /* one dither array per component */
 
   /* Variables for Floyd-Steinberg dithering */
   FSERRPTR fserrors[MAX_Q_COMPS]; /* accumulated errors */
-  boolean on_odd_row;          /* flag to remember which row we are on */
+  boolean on_odd_row;    /* flag to remember which row we are on */
 } my_cquantizer;
 
 typedef my_cquantizer * my_cquantize_ptr;
@@ -200,11 +200,11 @@ select_ncolors (j_decompress_ptr cinfo, int Ncolors[])
   iroot = 1;
   do {
     iroot++;
-    temp = iroot;              /* set temp = iroot ** nc */
+    temp = iroot;    /* set temp = iroot ** nc */
     for (i = 1; i < nc; i++)
       temp *= iroot;
   } while (temp <= (long) max_colors); /* repeat till iroot exceeds root */
-  iroot--;                     /* now iroot = floor(root) */
+  iroot--;      /* now iroot = floor(root) */
 
   /* Must have at least 2 color values per component */
   if (iroot < 2)
@@ -228,10 +228,10 @@ select_ncolors (j_decompress_ptr cinfo, int Ncolors[])
       j = (cinfo->out_color_space == JCS_RGB ? RGB_order[i] : i);
       /* calculate new total_colors if Ncolors[j] is incremented */
       temp = total_colors / Ncolors[j];
-      temp *= Ncolors[j]+1;    /* done in long arith to avoid oflo */
+      temp *= Ncolors[j]+1;  /* done in long arith to avoid oflo */
       if (temp > (long) max_colors)
-       break;                  /* won't fit, done with this pass */
-      Ncolors[j]++;            /* OK, apply the increment */
+  break;      /* won't fit, done with this pass */
+      Ncolors[j]++;    /* OK, apply the increment */
       total_colors = (int) temp;
       changed = TRUE;
     }
@@ -246,6 +246,8 @@ output_value (j_decompress_ptr cinfo, int ci, int j, int maxj)
 /* Return j'th output value, where j will range from 0 to maxj */
 /* The output values must fall in 0..MAXJSAMPLE in increasing order */
 {
+  cinfo = 0;
+  ci = 0;
   /* We always provide values 0 and MAXJSAMPLE for each component;
    * any additional values are equally spaced between these limits.
    * (Forcing the upper and lower values to the limits ensures that
@@ -260,6 +262,8 @@ largest_input_value (j_decompress_ptr cinfo, int ci, int j, int maxj)
 /* Return largest input value that should map to j'th output value */
 /* Must have largest(j=0) >= 0, and largest(j=maxj) >= MAXJSAMPLE */
 {
+  cinfo = 0;
+  ci = 0;
   /* Breakpoints are halfway between values returned by output_value */
   return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj));
 }
@@ -273,8 +277,8 @@ LOCAL(void)
 create_colormap (j_decompress_ptr cinfo)
 {
   my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  JSAMPARRAY colormap;         /* Created colormap */
-  int total_colors;            /* Number of distinct output colors */
+  JSAMPARRAY colormap;    /* Created colormap */
+  int total_colors;    /* Number of distinct output colors */
   int i,j,k, nci, blksize, blkdist, ptr, val;
 
   /* Select number of colors for each component */
@@ -283,8 +287,8 @@ create_colormap (j_decompress_ptr cinfo)
   /* Report selected color counts */
   if (cinfo->out_color_components == 3)
     TRACEMS4(cinfo, 1, JTRC_QUANT_3_NCOLORS,
-            total_colors, cquantize->Ncolors[0],
-            cquantize->Ncolors[1], cquantize->Ncolors[2]);
+       total_colors, cquantize->Ncolors[0],
+       cquantize->Ncolors[1], cquantize->Ncolors[2]);
   else
     TRACEMS1(cinfo, 1, JTRC_QUANT_NCOLORS, total_colors);
 
@@ -309,12 +313,12 @@ create_colormap (j_decompress_ptr cinfo)
       val = output_value(cinfo, i, j, nci-1);
       /* Fill in all colormap entries that have this value of this component */
       for (ptr = j * blksize; ptr < total_colors; ptr += blkdist) {
-       /* fill in blksize entries beginning at ptr */
-       for (k = 0; k < blksize; k++)
-         colormap[i][ptr+k] = (JSAMPLE) val;
+  /* fill in blksize entries beginning at ptr */
+  for (k = 0; k < blksize; k++)
+    colormap[i][ptr+k] = (JSAMPLE) val;
       }
     }
-    blkdist = blksize;         /* blksize of this color is blkdist of next */
+    blkdist = blksize;    /* blksize of this color is blkdist of next */
   }
 
   /* Save the colormap in private storage,
@@ -372,16 +376,16 @@ create_colorindex (j_decompress_ptr cinfo)
     val = 0;
     k = largest_input_value(cinfo, i, 0, nci-1);
     for (j = 0; j <= MAXJSAMPLE; j++) {
-      while (j > k)            /* advance val if past boundary */
-       k = largest_input_value(cinfo, i, ++val, nci-1);
+      while (j > k)    /* advance val if past boundary */
+  k = largest_input_value(cinfo, i, ++val, nci-1);
       /* premultiply so that no multiplication needed in main processing */
       indexptr[j] = (JSAMPLE) (val * blksize);
     }
     /* Pad at both ends if necessary */
     if (pad)
       for (j = 1; j <= MAXJSAMPLE; j++) {
-       indexptr[-j] = indexptr[0];
-       indexptr[MAXJSAMPLE+j] = indexptr[MAXJSAMPLE];
+  indexptr[-j] = indexptr[0];
+  indexptr[MAXJSAMPLE+j] = indexptr[MAXJSAMPLE];
       }
   }
 }
@@ -401,7 +405,7 @@ make_odither_array (j_decompress_ptr cinfo, int ncolors)
 
   odither = (ODITHER_MATRIX_PTR)
     (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-                               SIZEOF(ODITHER_MATRIX));
+        SIZEOF(ODITHER_MATRIX));
   /* The inter-value distance for this color is MAXJSAMPLE/(ncolors-1).
    * Hence the dither value for the matrix cell with fill order f
    * (f=0..N-1) should be (N-1-2*f)/(2*N) * MAXJSAMPLE/(ncolors-1).
@@ -411,7 +415,7 @@ make_odither_array (j_decompress_ptr cinfo, int ncolors)
   for (j = 0; j < ODITHER_SIZE; j++) {
     for (k = 0; k < ODITHER_SIZE; k++) {
       num = ((INT32) (ODITHER_CELLS-1 - 2*((int)base_dither_matrix[j][k])))
-           * MAXJSAMPLE;
+      * MAXJSAMPLE;
       /* Ensure round towards zero despite C's lack of consistency
        * about rounding negative values in integer division...
        */
@@ -437,14 +441,14 @@ create_odither_tables (j_decompress_ptr cinfo)
 
   for (i = 0; i < cinfo->out_color_components; i++) {
     nci = cquantize->Ncolors[i]; /* # of distinct values for this color */
-    odither = NULL;            /* search for matching prior component */
+    odither = NULL;    /* search for matching prior component */
     for (j = 0; j < i; j++) {
       if (nci == cquantize->Ncolors[j]) {
-       odither = cquantize->odither[j];
-       break;
+  odither = cquantize->odither[j];
+  break;
       }
     }
-    if (odither == NULL)       /* need a new table? */
+    if (odither == NULL)  /* need a new table? */
       odither = make_odither_array(cinfo, nci);
     cquantize->odither[i] = odither;
   }
@@ -457,7 +461,7 @@ create_odither_tables (j_decompress_ptr cinfo)
 
 METHODDEF(void)
 color_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-               JSAMPARRAY output_buf, int num_rows)
+    JSAMPARRAY output_buf, int num_rows)
 /* General case, no dithering */
 {
   my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
@@ -475,7 +479,7 @@ color_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
     for (col = width; col > 0; col--) {
       pixcode = 0;
       for (ci = 0; ci < nc; ci++) {
-       pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]);
+  pixcode += GETJSAMPLE(colorindex[ci][GETJSAMPLE(*ptrin++)]);
       }
       *ptrout++ = (JSAMPLE) pixcode;
     }
@@ -485,7 +489,7 @@ color_quantize (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
 
 METHODDEF(void)
 color_quantize3 (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-                JSAMPARRAY output_buf, int num_rows)
+     JSAMPARRAY output_buf, int num_rows)
 /* Fast path for out_color_components==3, no dithering */
 {
   my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
@@ -513,15 +517,15 @@ color_quantize3 (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
 
 METHODDEF(void)
 quantize_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-                    JSAMPARRAY output_buf, int num_rows)
+         JSAMPARRAY output_buf, int num_rows)
 /* General case, with ordered dithering */
 {
   my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
   register JSAMPROW input_ptr;
   register JSAMPROW output_ptr;
   JSAMPROW colorindex_ci;
-  int * dither;                        /* points to active row of dither matrix */
-  int row_index, col_index;    /* current indexes into dither matrix */
+  int * dither;      /* points to active row of dither matrix */
+  int row_index, col_index;  /* current indexes into dither matrix */
   int nc = cinfo->out_color_components;
   int ci;
   int row;
@@ -531,7 +535,7 @@ quantize_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
   for (row = 0; row < num_rows; row++) {
     /* Initialize output values to 0 so can process components separately */
     jzero_far((void FAR *) output_buf[row],
-             (size_t) (width * SIZEOF(JSAMPLE)));
+        (size_t) (width * SIZEOF(JSAMPLE)));
     row_index = cquantize->row_index;
     for (ci = 0; ci < nc; ci++) {
       input_ptr = input_buf[row] + ci;
@@ -541,17 +545,17 @@ quantize_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
       col_index = 0;
 
       for (col = width; col > 0; col--) {
-       /* Form pixel value + dither, range-limit to 0..MAXJSAMPLE,
-        * select output value, accumulate into output code for this pixel.
-        * Range-limiting need not be done explicitly, as we have extended
-        * the colorindex table to produce the right answers for out-of-range
-        * inputs.  The maximum dither is +- MAXJSAMPLE; this sets the
-        * required amount of padding.
-        */
-       *output_ptr += colorindex_ci[GETJSAMPLE(*input_ptr)+dither[col_index]];
-       input_ptr += nc;
-       output_ptr++;
-       col_index = (col_index + 1) & ODITHER_MASK;
+  /* Form pixel value + dither, range-limit to 0..MAXJSAMPLE,
+   * select output value, accumulate into output code for this pixel.
+   * Range-limiting need not be done explicitly, as we have extended
+   * the colorindex table to produce the right answers for out-of-range
+   * inputs.  The maximum dither is +- MAXJSAMPLE; this sets the
+   * required amount of padding.
+   */
+  *output_ptr += colorindex_ci[GETJSAMPLE(*input_ptr)+dither[col_index]];
+  input_ptr += nc;
+  output_ptr++;
+  col_index = (col_index + 1) & ODITHER_MASK;
       }
     }
     /* Advance row index for next row */
@@ -563,7 +567,7 @@ quantize_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
 
 METHODDEF(void)
 quantize3_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-                     JSAMPARRAY output_buf, int num_rows)
+          JSAMPARRAY output_buf, int num_rows)
 /* Fast path for out_color_components==3, with ordered dithering */
 {
   my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
@@ -573,10 +577,10 @@ quantize3_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
   JSAMPROW colorindex0 = cquantize->colorindex[0];
   JSAMPROW colorindex1 = cquantize->colorindex[1];
   JSAMPROW colorindex2 = cquantize->colorindex[2];
-  int * dither0;               /* points to active row of dither matrix */
+  int * dither0;    /* points to active row of dither matrix */
   int * dither1;
   int * dither2;
-  int row_index, col_index;    /* current indexes into dither matrix */
+  int row_index, col_index;  /* current indexes into dither matrix */
   int row;
   JDIMENSION col;
   JDIMENSION width = cinfo->output_width;
@@ -592,11 +596,11 @@ quantize3_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
 
     for (col = width; col > 0; col--) {
       pixcode  = GETJSAMPLE(colorindex0[GETJSAMPLE(*input_ptr++) +
-                                       dither0[col_index]]);
+          dither0[col_index]]);
       pixcode += GETJSAMPLE(colorindex1[GETJSAMPLE(*input_ptr++) +
-                                       dither1[col_index]]);
+          dither1[col_index]]);
       pixcode += GETJSAMPLE(colorindex2[GETJSAMPLE(*input_ptr++) +
-                                       dither2[col_index]]);
+          dither2[col_index]]);
       *output_ptr++ = (JSAMPLE) pixcode;
       col_index = (col_index + 1) & ODITHER_MASK;
     }
@@ -608,24 +612,24 @@ quantize3_ord_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
 
 METHODDEF(void)
 quantize_fs_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
-                   JSAMPARRAY output_buf, int num_rows)
+        JSAMPARRAY output_buf, int num_rows)
 /* General case, with Floyd-Steinberg dithering */
 {
   my_cquantize_ptr cquantize = (my_cquantize_ptr) cinfo->cquantize;
-  register LOCFSERROR cur;     /* current error or pixel value */
-  LOCFSERROR belowerr;         /* error for pixel below cur */
-  LOCFSERROR bpreverr;         /* error for below/prev col */
-  LOCFSERROR bnexterr;         /* error for below/next col */
+  register LOCFSERROR cur;  /* current error or pixel value */
+  LOCFSERROR belowerr;    /* error for pixel below cur */
+  LOCFSERROR bpreverr;    /* error for below/prev col */
+  LOCFSERROR bnexterr;    /* error for below/next col */
   LOCFSERROR delta;
-  register FSERRPTR errorptr;  /* => fserrors[] at column before current */
+  register FSERRPTR errorptr;  /* => fserrors[] at column before current */
   register JSAMPROW input_ptr;
   register JSAMPROW output_ptr;
   JSAMPROW colorindex_ci;
   JSAMPROW colormap_ci;
   int pixcode;
   int nc = cinfo->out_color_components;
-  int dir;                     /* 1 for left-to-right, -1 for right-to-left */
-  int dirnc;                   /* dir * nc */
+  int dir;      /* 1 for left-to-right, -1 for right-to-left */
+  int dirnc;      /* dir * nc */
   int ci;
   int row;
   JDIMENSION col;
@@ -636,22 +640,22 @@ quantize_fs_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
   for (row = 0; row < num_rows; row++) {
     /* Initialize output values to 0 so can process components separately */
     jzero_far((void FAR *) output_buf[row],
-             (size_t) (width * SIZEOF(JSAMPLE)));
+        (size_t) (width * SIZEOF(JSAMPLE)));
     for (ci = 0; ci < nc; ci++) {
       input_ptr = input_buf[row] + ci;
       output_ptr = output_buf[row];
       if (cquantize->on_odd_row) {
-       /* work right to left in this row */
-       input_ptr += (width-1) * nc; /* so point to rightmost pixel */
-       output_ptr += width-1;
-       dir = -1;
-       dirnc = -nc;
-       errorptr = cquantize->fserrors[ci] + (width+1); /* => entry after last column */
+  /* work right to left in this row */
+  input_ptr += (width-1) * nc; /* so point to rightmost pixel */
+  output_ptr += width-1;
+  dir = -1;
+  dirnc = -nc;
+  errorptr = cquantize->fserrors[ci] + (width+1); /* => entry after last column */
       } else {
-       /* work left to right in this row */
-       dir = 1;
-       dirnc = nc;
-       errorptr = cquantize->fserrors[ci]; /* => entry before first column */
+  /* work left to right in this row */
+  dir = 1;
+  dirnc = nc;
+  errorptr = cquantize->fserrors[ci]; /* => entry before first column */
       }
       colorindex_ci = cquantize->colorindex[ci];
       colormap_ci = cquantize->sv_colormap[ci];
@@ -661,47 +665,47 @@ quantize_fs_dither (j_decompress_ptr cinfo, JSAMPARRAY input_buf,
       belowerr = bpreverr = 0;
 
       for (col = width; col > 0; col--) {
-       /* cur holds the error propagated from the previous pixel on the
-        * current line.  Add the error propagated from the previous line
-        * to form the complete error correction term for this pixel, and
-        * round the error term (which is expressed * 16) to an integer.
-        * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct
-        * for either sign of the error value.
-        * Note: errorptr points to *previous* column's array entry.
-        */
-       cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4);
-       /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE.
-        * The maximum error is +- MAXJSAMPLE; this sets the required size
-        * of the range_limit array.
-        */
-       cur += GETJSAMPLE(*input_ptr);
-       cur = GETJSAMPLE(range_limit[cur]);
-       /* Select output value, accumulate into output code for this pixel */
-       pixcode = GETJSAMPLE(colorindex_ci[cur]);
-       *output_ptr += (JSAMPLE) pixcode;
-       /* Compute actual representation error at this pixel */
-       /* Note: we can do this even though we don't have the final */
-       /* pixel code, because the colormap is orthogonal. */
-       cur -= GETJSAMPLE(colormap_ci[pixcode]);
-       /* Compute error fractions to be propagated to adjacent pixels.
-        * Add these into the running sums, and simultaneously shift the
-        * next-line error sums left by 1 column.
-        */
-       bnexterr = cur;
-       delta = cur * 2;
-       cur += delta;           /* form error * 3 */
-       errorptr[0] = (FSERROR) (bpreverr + cur);
-       cur += delta;           /* form error * 5 */
-       bpreverr = belowerr + cur;
-       belowerr = bnexterr;
-       cur += delta;           /* form error * 7 */
-       /* At this point cur contains the 7/16 error value to be propagated
-        * to the next pixel on the current line, and all the errors for the
-        * next line have been shifted over. We are therefore ready to move on.
-        */
-       input_ptr += dirnc;     /* advance input ptr to next column */
-       output_ptr += dir;      /* advance output ptr to next column */
-       errorptr += dir;        /* advance errorptr to current column */
+  /* cur holds the error propagated from the previous pixel on the
+   * current line.  Add the error propagated from the previous line
+   * to form the complete error correction term for this pixel, and
+   * round the error term (which is expressed * 16) to an integer.
+   * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct
+   * for either sign of the error value.
+   * Note: errorptr points to *previous* column's array entry.
+   */
+  cur = RIGHT_SHIFT(cur + errorptr[dir] + 8, 4);
+  /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE.
+   * The maximum error is +- MAXJSAMPLE; this sets the required size
+   * of the range_limit array.
+   */
+  cur += GETJSAMPLE(*input_ptr);
+  cur = GETJSAMPLE(range_limit[cur]);
+  /* Select output value, accumulate into output code for this pixel */
+  pixcode = GETJSAMPLE(colorindex_ci[cur]);
+  *output_ptr += (JSAMPLE) pixcode;
+  /* Compute actual representation error at this pixel */
+  /* Note: we can do this even though we don't have the final */
+  /* pixel code, because the colormap is orthogonal. */
+  cur -= GETJSAMPLE(colormap_ci[pixcode]);
+  /* Compute error fractions to be propagated to adjacent pixels.
+   * Add these into the running sums, and simultaneously shift the
+   * next-line error sums left by 1 column.
+   */
+  bnexterr = cur;
+  delta = cur * 2;
+  cur += delta;    /* form error * 3 */
+  errorptr[0] = (FSERROR) (bpreverr + cur);
+  cur += delta;    /* form error * 5 */
+  bpreverr = belowerr + cur;
+  belowerr = bnexterr;
+  cur += delta;    /* form error * 7 */
+  /* At this point cur contains the 7/16 error value to be propagated
+   * to the next pixel on the current line, and all the errors for the
+   * next line have been shifted over. We are therefore ready to move on.
+   */
+  input_ptr += dirnc;  /* advance input ptr to next column */
+  output_ptr += dir;  /* advance output ptr to next column */
+  errorptr += dir;  /* advance errorptr to current column */
       }
       /* Post-loop cleanup: we must unload the final error value into the
        * final fserrors[] entry.  Note we need not unload belowerr because
@@ -744,6 +748,7 @@ start_pass_1_quant (j_decompress_ptr cinfo, boolean is_pre_scan)
   size_t arraysize;
   int i;
 
+  is_pre_scan = 0;
   /* Install my colormap. */
   cinfo->colormap = cquantize->sv_colormap;
   cinfo->actual_number_of_colors = cquantize->sv_actual;
@@ -761,7 +766,7 @@ start_pass_1_quant (j_decompress_ptr cinfo, boolean is_pre_scan)
       cquantize->pub.color_quantize = quantize3_ord_dither;
     else
       cquantize->pub.color_quantize = quantize_ord_dither;
-    cquantize->row_index = 0;  /* initialize state for ordered dither */
+    cquantize->row_index = 0;  /* initialize state for ordered dither */
     /* If user changed to ordered dither from another mode,
      * we must recreate the color index table with padding.
      * This will cost extra space, but probably isn't very likely.
@@ -797,6 +802,7 @@ start_pass_1_quant (j_decompress_ptr cinfo, boolean is_pre_scan)
 METHODDEF(void)
 finish_pass_1_quant (j_decompress_ptr cinfo)
 {
+  cinfo = 0;
   /* no work in 1-pass case */
 }
 
@@ -824,13 +830,13 @@ jinit_1pass_quantizer (j_decompress_ptr cinfo)
 
   cquantize = (my_cquantize_ptr)
     (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
-                               SIZEOF(my_cquantizer));
+        SIZEOF(my_cquantizer));
   cinfo->cquantize = (struct jpeg_color_quantizer *) cquantize;
   cquantize->pub.start_pass = start_pass_1_quant;
   cquantize->pub.finish_pass = finish_pass_1_quant;
   cquantize->pub.new_color_map = new_color_map_1_quant;
   cquantize->fserrors[0] = NULL; /* Flag FS workspace not allocated */
-  cquantize->odither[0] = NULL;        /* Also flag odither arrays not allocated */
+  cquantize->odither[0] = NULL;  /* Also flag odither arrays not allocated */
 
   /* Make sure my internal arrays won't overflow */
   if (cinfo->out_color_components > MAX_Q_COMPS)