]> git.saurik.com Git - wxWidgets.git/blobdiff - src/tiff/tif_predict.c
Don't release capture unless we already have it.
[wxWidgets.git] / src / tiff / tif_predict.c
index f492f6bb55f5bf23a20a7ec3ffa54d433e8526f3..0da5c8b36bab93f8f2e186f1b7fec580e0200280 100644 (file)
@@ -160,7 +160,7 @@ static void
 horAcc8(TIFF* tif, tidata_t cp0, tsize_t cc)
 {
        TIFFPredictorState* sp = PredictorState(tif);
-       u_int stride = sp->stride;
+       tsize_t stride = sp->stride;
 
        char* cp = (char*) cp0;
        if (cc > stride) {
@@ -174,9 +174,9 @@ horAcc8(TIFF* tif, tidata_t cp0, tsize_t cc)
                        u_int cb = cp[2];
                        do {
                                cc -= 3, cp += 3;
-                               cp[0] = (cr += cp[0]);
-                               cp[1] = (cg += cp[1]);
-                               cp[2] = (cb += cp[2]);
+                               cp[0] = (char) (cr += cp[0]);
+                               cp[1] = (char) (cg += cp[1]);
+                               cp[2] = (char) (cb += cp[2]);
                        } while ((int32) cc > 0);
                } else if (stride == 4)  {
                        u_int cr = cp[0];
@@ -185,14 +185,14 @@ horAcc8(TIFF* tif, tidata_t cp0, tsize_t cc)
                        u_int ca = cp[3];
                        do {
                                cc -= 4, cp += 4;
-                               cp[0] = (cr += cp[0]);
-                               cp[1] = (cg += cp[1]);
-                               cp[2] = (cb += cp[2]);
-                               cp[3] = (ca += cp[3]);
+                               cp[0] = (char) (cr += cp[0]);
+                               cp[1] = (char) (cg += cp[1]);
+                               cp[2] = (char) (cb += cp[2]);
+                               cp[3] = (char) (ca += cp[3]);
                        } while ((int32) cc > 0);
                } else  {
                        do {
-                               REPEAT4(stride, cp[stride] += *cp; cp++)
+                               REPEAT4(stride, cp[stride] = (char) (cp[stride] + *cp); cp++)
                                cc -= stride;
                        } while ((int32) cc > 0);
                }
@@ -203,7 +203,7 @@ static void
 swabHorAcc16(TIFF* tif, tidata_t cp0, tsize_t cc)
 {
        TIFFPredictorState* sp = PredictorState(tif);
-       u_int stride = sp->stride;
+       tsize_t stride = sp->stride;
        uint16* wp = (uint16*) cp0;
        tsize_t wc = cc / 2;
 
@@ -220,7 +220,7 @@ swabHorAcc16(TIFF* tif, tidata_t cp0, tsize_t cc)
 static void
 horAcc16(TIFF* tif, tidata_t cp0, tsize_t cc)
 {
-       u_int stride = PredictorState(tif)->stride;
+       tsize_t stride = PredictorState(tif)->stride;
        uint16* wp = (uint16*) cp0;
        tsize_t wc = cc / 2;
 
@@ -283,7 +283,7 @@ static void
 horDiff8(TIFF* tif, tidata_t cp0, tsize_t cc)
 {
        TIFFPredictorState* sp = PredictorState(tif);
-       u_int stride = sp->stride;
+       tsize_t stride = sp->stride;
        char* cp = (char*) cp0;
 
        if (cc > stride) {
@@ -328,7 +328,7 @@ static void
 horDiff16(TIFF* tif, tidata_t cp0, tsize_t cc)
 {
        TIFFPredictorState* sp = PredictorState(tif);
-       u_int stride = sp->stride;
+       tsize_t stride = sp->stride;
        int16 *wp = (int16*) cp0;
        tsize_t wc = cc/2;
 
@@ -443,12 +443,15 @@ TIFFPredictorInit(TIFF* tif)
         * override parent get/set field methods.
         */
        _TIFFMergeFieldInfo(tif, predictFieldInfo, N(predictFieldInfo));
-       sp->vgetparent = tif->tif_vgetfield;
-       tif->tif_vgetfield = PredictorVGetField;/* hook for predictor tag */
-       sp->vsetparent = tif->tif_vsetfield;
-       tif->tif_vsetfield = PredictorVSetField;/* hook for predictor tag */
-       sp->printdir = tif->tif_printdir;
-       tif->tif_printdir = PredictorPrintDir;  /* hook for predictor tag */
+       sp->vgetparent = tif->tif_tagmethods.vgetfield;
+       tif->tif_tagmethods.vgetfield =
+            PredictorVGetField;/* hook for predictor tag */
+       sp->vsetparent = tif->tif_tagmethods.vsetfield;
+       tif->tif_tagmethods.vsetfield =
+            PredictorVSetField;/* hook for predictor tag */
+       sp->printdir = tif->tif_tagmethods.printdir;
+       tif->tif_tagmethods.printdir =
+            PredictorPrintDir; /* hook for predictor tag */
 
        sp->setupdecode = tif->tif_setupdecode;
        tif->tif_setupdecode = PredictorSetupDecode;