| Index: third_party/libpng/pngwrite.c
|
| diff --git a/third_party/libpng/pngwrite.c b/third_party/libpng/pngwrite.c
|
| index 894a9843dc6b9a4dfcdd1334ef1cf495edc72b3a..2dffc589f8b41e5ca4a897fd2d073da52cf8dab2 100644
|
| --- a/third_party/libpng/pngwrite.c
|
| +++ b/third_party/libpng/pngwrite.c
|
| @@ -1,8 +1,8 @@
|
|
|
| /* pngwrite.c - general routines to write a PNG file
|
| *
|
| - * Last changed in libpng 1.2.52 [November 20, 2014]
|
| - * Copyright (c) 1998-2014 Glenn Randers-Pehrson
|
| + * Last changed in libpng 1.2.54 [November 12, 2015]
|
| + * Copyright (c) 1998-2015 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.)
|
| *
|
| @@ -584,11 +584,6 @@ png_create_write_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
|
| png_set_write_fn(png_ptr, png_voidp_NULL, png_rw_ptr_NULL,
|
| png_flush_ptr_NULL);
|
|
|
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
| - png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_DEFAULT,
|
| - 1, png_doublep_NULL, png_doublep_NULL);
|
| -#endif
|
| -
|
| #ifdef PNG_SETJMP_SUPPORTED
|
| /* Applications that neglect to set up their own setjmp() and then
|
| * encounter a png_error() will longjmp here. Since the jmpbuf is
|
| @@ -731,10 +726,6 @@ png_write_init_3(png_structpp ptr_ptr, png_const_charp user_png_ver,
|
| png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
| png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
|
| (png_uint_32)png_ptr->zbuf_size);
|
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
| - png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_DEFAULT,
|
| - 1, png_doublep_NULL, png_doublep_NULL);
|
| -#endif
|
| }
|
|
|
| /* Write a few rows of image data. If the image is interlaced,
|
| @@ -1150,14 +1141,6 @@ png_write_destroy(png_structp png_ptr)
|
| png_free(png_ptr, png_ptr->time_buffer);
|
| #endif
|
|
|
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
| - png_free(png_ptr, png_ptr->prev_filters);
|
| - png_free(png_ptr, png_ptr->filter_weights);
|
| - png_free(png_ptr, png_ptr->inv_filter_weights);
|
| - png_free(png_ptr, png_ptr->filter_costs);
|
| - png_free(png_ptr, png_ptr->inv_filter_costs);
|
| -#endif
|
| -
|
| #ifdef PNG_SETJMP_SUPPORTED
|
| /* Reset structure */
|
| png_memcpy(tmp_jmp, png_ptr->jmpbuf, png_sizeof(jmp_buf));
|
| @@ -1201,14 +1184,13 @@ png_set_filter(png_structp png_ptr, int method, int filters)
|
| {
|
| switch (filters & (PNG_ALL_FILTERS | 0x07))
|
| {
|
| + case PNG_FILTER_VALUE_NONE:
|
| + png_ptr->do_filter = PNG_FILTER_NONE; break;
|
| #ifdef PNG_WRITE_FILTER_SUPPORTED
|
| case 5:
|
| case 6:
|
| case 7: png_warning(png_ptr, "Unknown row filter for method 0");
|
| -#endif /* PNG_WRITE_FILTER_SUPPORTED */
|
| - case PNG_FILTER_VALUE_NONE:
|
| - png_ptr->do_filter = PNG_FILTER_NONE; break;
|
| -#ifdef PNG_WRITE_FILTER_SUPPORTED
|
| + break;
|
| case PNG_FILTER_VALUE_SUB:
|
| png_ptr->do_filter = PNG_FILTER_SUB; break;
|
| case PNG_FILTER_VALUE_UP:
|
| @@ -1220,6 +1202,7 @@ png_set_filter(png_structp png_ptr, int method, int filters)
|
| default: png_ptr->do_filter = (png_byte)filters; break;
|
| #else
|
| default: png_warning(png_ptr, "Unknown row filter for method 0");
|
| + break;
|
| #endif /* PNG_WRITE_FILTER_SUPPORTED */
|
| }
|
|
|
| @@ -1310,117 +1293,11 @@ png_set_filter_heuristics(png_structp png_ptr, int heuristic_method,
|
| int num_weights, png_doublep filter_weights,
|
| png_doublep filter_costs)
|
| {
|
| - int i;
|
| -
|
| - png_debug(1, "in png_set_filter_heuristics");
|
| -
|
| - if (png_ptr == NULL)
|
| - return;
|
| - if (heuristic_method >= PNG_FILTER_HEURISTIC_LAST)
|
| - {
|
| - png_warning(png_ptr, "Unknown filter heuristic method");
|
| - return;
|
| - }
|
| -
|
| - if (heuristic_method == PNG_FILTER_HEURISTIC_DEFAULT)
|
| - {
|
| - heuristic_method = PNG_FILTER_HEURISTIC_UNWEIGHTED;
|
| - }
|
| -
|
| - if (num_weights < 0 || filter_weights == NULL ||
|
| - heuristic_method == PNG_FILTER_HEURISTIC_UNWEIGHTED)
|
| - {
|
| - num_weights = 0;
|
| - }
|
| -
|
| - png_ptr->num_prev_filters = (png_byte)num_weights;
|
| - png_ptr->heuristic_method = (png_byte)heuristic_method;
|
| -
|
| - if (num_weights > 0)
|
| - {
|
| - if (png_ptr->prev_filters == NULL)
|
| - {
|
| - png_ptr->prev_filters = (png_bytep)png_malloc(png_ptr,
|
| - (png_uint_32)(png_sizeof(png_byte) * num_weights));
|
| -
|
| - /* To make sure that the weighting starts out fairly */
|
| - for (i = 0; i < num_weights; i++)
|
| - {
|
| - png_ptr->prev_filters[i] = 255;
|
| - }
|
| - }
|
| -
|
| - if (png_ptr->filter_weights == NULL)
|
| - {
|
| - png_ptr->filter_weights = (png_uint_16p)png_malloc(png_ptr,
|
| - (png_uint_32)(png_sizeof(png_uint_16) * num_weights));
|
| -
|
| - png_ptr->inv_filter_weights = (png_uint_16p)png_malloc(png_ptr,
|
| - (png_uint_32)(png_sizeof(png_uint_16) * num_weights));
|
| - for (i = 0; i < num_weights; i++)
|
| - {
|
| - png_ptr->inv_filter_weights[i] =
|
| - png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
|
| - }
|
| - }
|
| -
|
| - for (i = 0; i < num_weights; i++)
|
| - {
|
| - if (filter_weights[i] < 0.0)
|
| - {
|
| - png_ptr->inv_filter_weights[i] =
|
| - png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
|
| - }
|
| - else
|
| - {
|
| - png_ptr->inv_filter_weights[i] =
|
| - (png_uint_16)((double)PNG_WEIGHT_FACTOR*filter_weights[i]+0.5);
|
| - png_ptr->filter_weights[i] =
|
| - (png_uint_16)((double)PNG_WEIGHT_FACTOR/filter_weights[i]+0.5);
|
| - }
|
| - }
|
| - }
|
| -
|
| - /* If, in the future, there are other filter methods, this would
|
| - * need to be based on png_ptr->filter.
|
| - */
|
| - if (png_ptr->filter_costs == NULL)
|
| - {
|
| - png_ptr->filter_costs = (png_uint_16p)png_malloc(png_ptr,
|
| - (png_uint_32)(png_sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST));
|
| -
|
| - png_ptr->inv_filter_costs = (png_uint_16p)png_malloc(png_ptr,
|
| - (png_uint_32)(png_sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST));
|
| -
|
| - for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
|
| - {
|
| - png_ptr->inv_filter_costs[i] =
|
| - png_ptr->filter_costs[i] = PNG_COST_FACTOR;
|
| - }
|
| - }
|
| -
|
| - /* Here is where we set the relative costs of the different filters. We
|
| - * should take the desired compression level into account when setting
|
| - * the costs, so that Paeth, for instance, has a high relative cost at low
|
| - * compression levels, while it has a lower relative cost at higher
|
| - * compression settings. The filter types are in order of increasing
|
| - * relative cost, so it would be possible to do this with an algorithm.
|
| - */
|
| - for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
|
| - {
|
| - if (filter_costs == NULL || filter_costs[i] < 0.0)
|
| - {
|
| - png_ptr->inv_filter_costs[i] =
|
| - png_ptr->filter_costs[i] = PNG_COST_FACTOR;
|
| - }
|
| - else if (filter_costs[i] >= 1.0)
|
| - {
|
| - png_ptr->inv_filter_costs[i] =
|
| - (png_uint_16)((double)PNG_COST_FACTOR / filter_costs[i] + 0.5);
|
| - png_ptr->filter_costs[i] =
|
| - (png_uint_16)((double)PNG_COST_FACTOR * filter_costs[i] + 0.5);
|
| - }
|
| - }
|
| + PNG_UNUSED(png_ptr)
|
| + PNG_UNUSED(heuristic_method)
|
| + PNG_UNUSED(num_weights)
|
| + PNG_UNUSED(filter_weights)
|
| + PNG_UNUSED(filter_costs)
|
| }
|
| #endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */
|
|
|
|
|