< 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 >