From 3c2d6020ed9a3b8cc0fe53d66acf279690ac5a39 Mon Sep 17 00:00:00 2001
From: twinaphex <libretro@gmail.com>
Date: Thu, 26 Feb 2015 03:54:17 +0100
Subject: [PATCH] Move prev_scanline/decoded_scanline to rpng_process_t

---
 .../formats/png/rpng_decode_common.h          | 46 +++++++++----------
 libretro-common/include/formats/rpng.h        |  2 +
 2 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/libretro-common/formats/png/rpng_decode_common.h b/libretro-common/formats/png/rpng_decode_common.h
index b3ab4bbf43..36dd8ac453 100644
--- a/libretro-common/formats/png/rpng_decode_common.h
+++ b/libretro-common/formats/png/rpng_decode_common.h
@@ -97,8 +97,6 @@ static bool png_reverse_filter(uint32_t *data, const struct png_ihdr *ihdr,
    unsigned bpp;
    unsigned pitch;
    size_t pass_size;
-   uint8_t *prev_scanline = NULL;
-   uint8_t *decoded_scanline = NULL;
    bool ret = true;
 
    png_pass_geom(ihdr, ihdr->width, ihdr->height, &bpp, &pitch, &pass_size);
@@ -106,10 +104,10 @@ static bool png_reverse_filter(uint32_t *data, const struct png_ihdr *ihdr,
    if (pngp->stream.total_out < pass_size)
       return false;
 
-   prev_scanline    = (uint8_t*)calloc(1, pitch);
-   decoded_scanline = (uint8_t*)calloc(1, pitch);
+   pngp->prev_scanline    = (uint8_t*)calloc(1, pitch);
+   pngp->decoded_scanline = (uint8_t*)calloc(1, pitch);
 
-   if (!prev_scanline || !decoded_scanline)
+   if (!pngp->prev_scanline || !pngp->decoded_scanline)
       GOTO_END_ERROR();
 
    for (h = 0; h < ihdr->height;
@@ -120,40 +118,40 @@ static bool png_reverse_filter(uint32_t *data, const struct png_ihdr *ihdr,
       switch (filter)
       {
          case 0: /* None */
-            memcpy(decoded_scanline, inflate_buf, pitch);
+            memcpy(pngp->decoded_scanline, inflate_buf, pitch);
             break;
 
          case 1: /* Sub */
             for (i = 0; i < bpp; i++)
-               decoded_scanline[i] = inflate_buf[i];
+               pngp->decoded_scanline[i] = inflate_buf[i];
             for (i = bpp; i < pitch; i++)
-               decoded_scanline[i] = decoded_scanline[i - bpp] + inflate_buf[i];
+               pngp->decoded_scanline[i] = pngp->decoded_scanline[i - bpp] + inflate_buf[i];
             break;
 
          case 2: /* Up */
             for (i = 0; i < pitch; i++)
-               decoded_scanline[i] = prev_scanline[i] + inflate_buf[i];
+               pngp->decoded_scanline[i] = pngp->prev_scanline[i] + inflate_buf[i];
             break;
 
          case 3: /* Average */
             for (i = 0; i < bpp; i++)
             {
-               uint8_t avg = prev_scanline[i] >> 1;
-               decoded_scanline[i] = avg + inflate_buf[i];
+               uint8_t avg = pngp->prev_scanline[i] >> 1;
+               pngp->decoded_scanline[i] = avg + inflate_buf[i];
             }
             for (i = bpp; i < pitch; i++)
             {
-               uint8_t avg = (decoded_scanline[i - bpp] + prev_scanline[i]) >> 1;
-               decoded_scanline[i] = avg + inflate_buf[i];
+               uint8_t avg = (pngp->decoded_scanline[i - bpp] + pngp->prev_scanline[i]) >> 1;
+               pngp->decoded_scanline[i] = avg + inflate_buf[i];
             }
             break;
 
          case 4: /* Paeth */
             for (i = 0; i < bpp; i++)
-               decoded_scanline[i] = paeth(0, prev_scanline[i], 0) + inflate_buf[i];
+               pngp->decoded_scanline[i] = paeth(0, pngp->prev_scanline[i], 0) + inflate_buf[i];
             for (i = bpp; i < pitch; i++)
-               decoded_scanline[i] = paeth(decoded_scanline[i - bpp],
-                     prev_scanline[i], prev_scanline[i - bpp]) + inflate_buf[i];
+               pngp->decoded_scanline[i] = paeth(pngp->decoded_scanline[i - bpp],
+                     pngp->prev_scanline[i], pngp->prev_scanline[i - bpp]) + inflate_buf[i];
             break;
 
          default:
@@ -161,24 +159,24 @@ static bool png_reverse_filter(uint32_t *data, const struct png_ihdr *ihdr,
       }
 
       if (ihdr->color_type == 0)
-         copy_line_bw(data, decoded_scanline, ihdr->width, ihdr->depth);
+         copy_line_bw(data, pngp->decoded_scanline, ihdr->width, ihdr->depth);
       else if (ihdr->color_type == 2)
-         copy_line_rgb(data, decoded_scanline, ihdr->width, ihdr->depth);
+         copy_line_rgb(data, pngp->decoded_scanline, ihdr->width, ihdr->depth);
       else if (ihdr->color_type == 3)
-         copy_line_plt(data, decoded_scanline, ihdr->width,
+         copy_line_plt(data, pngp->decoded_scanline, ihdr->width,
                ihdr->depth, palette);
       else if (ihdr->color_type == 4)
-         copy_line_gray_alpha(data, decoded_scanline, ihdr->width,
+         copy_line_gray_alpha(data, pngp->decoded_scanline, ihdr->width,
                ihdr->depth);
       else if (ihdr->color_type == 6)
-         copy_line_rgba(data, decoded_scanline, ihdr->width, ihdr->depth);
+         copy_line_rgba(data, pngp->decoded_scanline, ihdr->width, ihdr->depth);
 
-      memcpy(prev_scanline, decoded_scanline, pitch);
+      memcpy(pngp->prev_scanline, pngp->decoded_scanline, pitch);
    }
 
 end:
-   free(decoded_scanline);
-   free(prev_scanline);
+   free(pngp->decoded_scanline);
+   free(pngp->prev_scanline);
    return ret;
 }
 
diff --git a/libretro-common/include/formats/rpng.h b/libretro-common/include/formats/rpng.h
index d24f7e84ab..fd323efeb2 100644
--- a/libretro-common/include/formats/rpng.h
+++ b/libretro-common/include/formats/rpng.h
@@ -63,6 +63,8 @@ struct png_ihdr
 
 struct rpng_process_t
 {
+   uint8_t *prev_scanline;
+   uint8_t *decoded_scanline;
    uint8_t *inflate_buf;
    size_t inflate_buf_size;
    z_stream stream;