< prev index next >
src/java.desktop/share/native/libsplashscreen/libpng/pngrtran.c
Print this page
rev 55557 : 8217676: Upgrade libpng to 1.6.37
Reviewed-by: prr, jdv
*** 27,40 ****
* This file is available under and governed by the GNU General Public
* License version 2 only, as published by the Free Software Foundation.
* However, the following notice accompanied the original version of this
* file and, per its terms, should not be removed:
*
! * Last changed in libpng 1.6.35 [July 15, 2018]
* Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
! * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
! * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*
--- 27,40 ----
* This file is available under and governed by the GNU General Public
* License version 2 only, as published by the Free Software Foundation.
* However, the following notice accompanied the original version of this
* file and, per its terms, should not be removed:
*
! * Copyright (c) 2018-2019 Cosmin Truta
* Copyright (c) 1998-2002,2004,2006-2018 Glenn Randers-Pehrson
! * Copyright (c) 1996-1997 Andreas Dilger
! * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*
*** 44,53 ****
--- 44,64 ----
* in pngtrans.c.
*/
#include "pngpriv.h"
+ #ifdef PNG_ARM_NEON_IMPLEMENTATION
+ # if PNG_ARM_NEON_IMPLEMENTATION == 1
+ # define PNG_ARM_NEON_INTRINSICS_AVAILABLE
+ # if defined(_MSC_VER) && defined(_M_ARM64)
+ # include <arm64_neon.h>
+ # else
+ # include <arm_neon.h>
+ # endif
+ # endif
+ #endif
+
#ifdef PNG_READ_SUPPORTED
/* Set the action on getting a CRC error for an ancillary or critical chunk. */
void PNGAPI
png_set_crc_action(png_structrp png_ptr, int crit_action, int ancil_action)
*** 1206,1218 ****
/* Invert the alpha channel (in tRNS) unless the pixels are
* going to be expanded, in which case leave it for later
*/
int i, istop = png_ptr->num_trans;
! for (i=0; i<istop; i++)
! png_ptr->trans_alpha[i] = (png_byte)(255 -
! png_ptr->trans_alpha[i]);
}
}
#endif /* READ_INVERT_ALPHA */
}
} /* background expand and (therefore) no alpha association. */
--- 1217,1229 ----
/* Invert the alpha channel (in tRNS) unless the pixels are
* going to be expanded, in which case leave it for later
*/
int i, istop = png_ptr->num_trans;
! for (i = 0; i < istop; i++)
! png_ptr->trans_alpha[i] =
! (png_byte)(255 - png_ptr->trans_alpha[i]);
}
}
#endif /* READ_INVERT_ALPHA */
}
} /* background expand and (therefore) no alpha association. */
*** 3012,3036 ****
* calculated to make the sum 32768. This will result in different rounding
* to that used above.
*/
static int
png_do_rgb_to_gray(png_structrp png_ptr, png_row_infop row_info, png_bytep row)
-
{
int rgb_error = 0;
png_debug(1, "in png_do_rgb_to_gray");
if ((row_info->color_type & PNG_COLOR_MASK_PALETTE) == 0 &&
(row_info->color_type & PNG_COLOR_MASK_COLOR) != 0)
{
! PNG_CONST png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
! PNG_CONST png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
! PNG_CONST png_uint_32 bc = 32768 - rc - gc;
! PNG_CONST png_uint_32 row_width = row_info->width;
! PNG_CONST int have_alpha =
! (row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0;
if (row_info->bit_depth == 8)
{
#ifdef PNG_READ_GAMMA_SUPPORTED
/* Notice that gamma to/from 1 are not necessarily inverses (if
--- 3023,3045 ----
* calculated to make the sum 32768. This will result in different rounding
* to that used above.
*/
static int
png_do_rgb_to_gray(png_structrp png_ptr, png_row_infop row_info, png_bytep row)
{
int rgb_error = 0;
png_debug(1, "in png_do_rgb_to_gray");
if ((row_info->color_type & PNG_COLOR_MASK_PALETTE) == 0 &&
(row_info->color_type & PNG_COLOR_MASK_COLOR) != 0)
{
! png_uint_32 rc = png_ptr->rgb_to_gray_red_coeff;
! png_uint_32 gc = png_ptr->rgb_to_gray_green_coeff;
! png_uint_32 bc = 32768 - rc - gc;
! png_uint_32 row_width = row_info->width;
! int have_alpha = (row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0;
if (row_info->bit_depth == 8)
{
#ifdef PNG_READ_GAMMA_SUPPORTED
/* Notice that gamma to/from 1 are not necessarily inverses (if
*** 4169,4184 ****
if ((row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0)
{
if (row_info->bit_depth == 8)
{
! PNG_CONST png_bytep table = png_ptr->gamma_from_1;
if (table != NULL)
{
! PNG_CONST int step =
! (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 4 : 2;
/* The alpha channel is the last component: */
row += step - 1;
for (; row_width > 0; --row_width, row += step)
--- 4178,4192 ----
if ((row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0)
{
if (row_info->bit_depth == 8)
{
! png_bytep table = png_ptr->gamma_from_1;
if (table != NULL)
{
! int step = (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 4 : 2;
/* The alpha channel is the last component: */
row += step - 1;
for (; row_width > 0; --row_width, row += step)
*** 4188,4204 ****
}
}
else if (row_info->bit_depth == 16)
{
! PNG_CONST png_uint_16pp table = png_ptr->gamma_16_from_1;
! PNG_CONST int gamma_shift = png_ptr->gamma_shift;
if (table != NULL)
{
! PNG_CONST int step =
! (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 8 : 4;
/* The alpha channel is the last component: */
row += step - 2;
for (; row_width > 0; --row_width, row += step)
--- 4196,4211 ----
}
}
else if (row_info->bit_depth == 16)
{
! png_uint_16pp table = png_ptr->gamma_16_from_1;
! int gamma_shift = png_ptr->gamma_shift;
if (table != NULL)
{
! int step = (row_info->color_type & PNG_COLOR_MASK_COLOR) ? 8 : 4;
/* The alpha channel is the last component: */
row += step - 2;
for (; row_width > 0; --row_width, row += step)
*** 4225,4236 ****
#ifdef PNG_READ_EXPAND_SUPPORTED
/* Expands a palette row to an RGB or RGBA row depending
* upon whether you supply trans and num_trans.
*/
static void
! png_do_expand_palette(png_row_infop row_info, png_bytep row,
! png_const_colorp palette, png_const_bytep trans_alpha, int num_trans)
{
int shift, value;
png_bytep sp, dp;
png_uint_32 i;
png_uint_32 row_width=row_info->width;
--- 4232,4244 ----
#ifdef PNG_READ_EXPAND_SUPPORTED
/* Expands a palette row to an RGB or RGBA row depending
* upon whether you supply trans and num_trans.
*/
static void
! png_do_expand_palette(png_structrp png_ptr, png_row_infop row_info,
! png_bytep row, png_const_colorp palette, png_const_bytep trans_alpha,
! int num_trans)
{
int shift, value;
png_bytep sp, dp;
png_uint_32 i;
png_uint_32 row_width=row_info->width;
*** 4330,4347 ****
if (num_trans > 0)
{
sp = row + (size_t)row_width - 1;
dp = row + ((size_t)row_width << 2) - 1;
! for (i = 0; i < row_width; i++)
{
if ((int)(*sp) >= num_trans)
*dp-- = 0xff;
-
else
*dp-- = trans_alpha[*sp];
-
*dp-- = palette[*sp].blue;
*dp-- = palette[*sp].green;
*dp-- = palette[*sp].red;
sp--;
}
--- 4338,4368 ----
if (num_trans > 0)
{
sp = row + (size_t)row_width - 1;
dp = row + ((size_t)row_width << 2) - 1;
! i = 0;
! #ifdef PNG_ARM_NEON_INTRINSICS_AVAILABLE
! if (png_ptr->riffled_palette != NULL)
! {
! /* The RGBA optimization works with png_ptr->bit_depth == 8
! * but sometimes row_info->bit_depth has been changed to 8.
! * In these cases, the palette hasn't been riffled.
! */
! i = png_do_expand_palette_rgba8_neon(png_ptr, row_info, row,
! &sp, &dp);
! }
! #else
! PNG_UNUSED(png_ptr)
! #endif
!
! for (; i < row_width; i++)
{
if ((int)(*sp) >= num_trans)
*dp-- = 0xff;
else
*dp-- = trans_alpha[*sp];
*dp-- = palette[*sp].blue;
*dp-- = palette[*sp].green;
*dp-- = palette[*sp].red;
sp--;
}
*** 4354,4365 ****
else
{
sp = row + (size_t)row_width - 1;
dp = row + (size_t)(row_width * 3) - 1;
! for (i = 0; i < row_width; i++)
{
*dp-- = palette[*sp].blue;
*dp-- = palette[*sp].green;
*dp-- = palette[*sp].red;
sp--;
--- 4375,4393 ----
else
{
sp = row + (size_t)row_width - 1;
dp = row + (size_t)(row_width * 3) - 1;
+ i = 0;
+ #ifdef PNG_ARM_NEON_INTRINSICS_AVAILABLE
+ i = png_do_expand_palette_rgb8_neon(png_ptr, row_info, row,
+ &sp, &dp);
+ #else
+ PNG_UNUSED(png_ptr)
+ #endif
! for (; i < row_width; i++)
{
*dp-- = palette[*sp].blue;
*dp-- = palette[*sp].green;
*dp-- = palette[*sp].red;
sp--;
*** 4769,4779 ****
#ifdef PNG_READ_EXPAND_SUPPORTED
if ((png_ptr->transformations & PNG_EXPAND) != 0)
{
if (row_info->color_type == PNG_COLOR_TYPE_PALETTE)
{
! png_do_expand_palette(row_info, png_ptr->row_buf + 1,
png_ptr->palette, png_ptr->trans_alpha, png_ptr->num_trans);
}
else
{
--- 4797,4819 ----
#ifdef PNG_READ_EXPAND_SUPPORTED
if ((png_ptr->transformations & PNG_EXPAND) != 0)
{
if (row_info->color_type == PNG_COLOR_TYPE_PALETTE)
{
! #ifdef PNG_ARM_NEON_INTRINSICS_AVAILABLE
! if ((png_ptr->num_trans > 0) && (png_ptr->bit_depth == 8))
! {
! if (png_ptr->riffled_palette == NULL)
! {
! /* Initialize the accelerated palette expansion. */
! png_ptr->riffled_palette =
! (png_bytep)png_malloc(png_ptr, 256 * 4);
! png_riffle_palette_neon(png_ptr);
! }
! }
! #endif
! png_do_expand_palette(png_ptr, row_info, png_ptr->row_buf + 1,
png_ptr->palette, png_ptr->trans_alpha, png_ptr->num_trans);
}
else
{
< prev index next >