jdk/src/java.desktop/share/native/libsplashscreen/libpng/pngwrite.c
author azvegint
Tue, 08 Dec 2015 19:01:33 +0300
changeset 35296 659e92aaf7f4
parent 29913 95258013e132
child 40436 94ae0ede53a5
permissions -rw-r--r--
8143941: Update splashscreen displays Reviewed-by: ahgross, prr, serb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     1
/*
90ce3da70b43 Initial load
duke
parents:
diff changeset
     2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
90ce3da70b43 Initial load
duke
parents:
diff changeset
     3
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
     4
 * This code is free software; you can redistribute it and/or modify it
90ce3da70b43 Initial load
duke
parents:
diff changeset
     5
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
     6
 * published by the Free Software Foundation.  Oracle designates this
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     7
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
     8
 * by Oracle in the LICENSE file that accompanied this code.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
     9
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
90ce3da70b43 Initial load
duke
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
90ce3da70b43 Initial load
duke
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
90ce3da70b43 Initial load
duke
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
90ce3da70b43 Initial load
duke
parents:
diff changeset
    14
 * accompanied this code).
90ce3da70b43 Initial load
duke
parents:
diff changeset
    15
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
90ce3da70b43 Initial load
duke
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
90ce3da70b43 Initial load
duke
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    19
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    20
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    21
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 2
diff changeset
    22
 * questions.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    23
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    24
90ce3da70b43 Initial load
duke
parents:
diff changeset
    25
/* pngwrite.c - general routines to write a PNG file
90ce3da70b43 Initial load
duke
parents:
diff changeset
    26
 *
90ce3da70b43 Initial load
duke
parents:
diff changeset
    27
 * This file is available under and governed by the GNU General Public
90ce3da70b43 Initial load
duke
parents:
diff changeset
    28
 * License version 2 only, as published by the Free Software Foundation.
90ce3da70b43 Initial load
duke
parents:
diff changeset
    29
 * However, the following notice accompanied the original version of this
90ce3da70b43 Initial load
duke
parents:
diff changeset
    30
 * file and, per its terms, should not be removed:
90ce3da70b43 Initial load
duke
parents:
diff changeset
    31
 *
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
    32
 * Last changed in libpng 1.6.19 [November 12, 2015]
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
    33
 * Copyright (c) 1998-2015 Glenn Randers-Pehrson
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    34
 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
90ce3da70b43 Initial load
duke
parents:
diff changeset
    35
 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
    36
 *
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
    37
 * This code is released under the libpng license.
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
    38
 * For conditions of distribution and use, see the disclaimer
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
    39
 * and license in png.h
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    40
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
    41
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
    42
#include "pngpriv.h"
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    43
#if defined(PNG_SIMPLIFIED_WRITE_SUPPORTED) && defined(PNG_STDIO_SUPPORTED)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    44
#  include <errno.h>
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    45
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
    46
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
    47
#ifdef PNG_WRITE_SUPPORTED
90ce3da70b43 Initial load
duke
parents:
diff changeset
    48
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    49
#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    50
/* Write out all the unknown chunks for the current given location */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    51
static void
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    52
write_unknown_chunks(png_structrp png_ptr, png_const_inforp info_ptr,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    53
   unsigned int where)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    54
{
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    55
   if (info_ptr->unknown_chunks_num != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    56
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    57
      png_const_unknown_chunkp up;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    58
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    59
      png_debug(5, "writing extra chunks");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    60
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    61
      for (up = info_ptr->unknown_chunks;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    62
           up < info_ptr->unknown_chunks + info_ptr->unknown_chunks_num;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    63
           ++up)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    64
         if ((up->location & where) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    65
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    66
         /* If per-chunk unknown chunk handling is enabled use it, otherwise
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    67
          * just write the chunks the application has set.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    68
          */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    69
#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    70
         int keep = png_handle_as_unknown(png_ptr, up->name);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    71
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    72
         /* NOTE: this code is radically different from the read side in the
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    73
          * matter of handling an ancillary unknown chunk.  In the read side
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    74
          * the default behavior is to discard it, in the code below the default
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    75
          * behavior is to write it.  Critical chunks are, however, only
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    76
          * written if explicitly listed or if the default is set to write all
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    77
          * unknown chunks.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    78
          *
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    79
          * The default handling is also slightly weird - it is not possible to
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    80
          * stop the writing of all unsafe-to-copy chunks!
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    81
          *
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    82
          * TODO: REVIEW: this would seem to be a bug.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    83
          */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    84
         if (keep != PNG_HANDLE_CHUNK_NEVER &&
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    85
             ((up->name[3] & 0x20) /* safe-to-copy overrides everything */ ||
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    86
              keep == PNG_HANDLE_CHUNK_ALWAYS ||
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    87
              (keep == PNG_HANDLE_CHUNK_AS_DEFAULT &&
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    88
               png_ptr->unknown_default == PNG_HANDLE_CHUNK_ALWAYS)))
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    89
#endif
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    90
         {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    91
            /* TODO: review, what is wrong with a zero length unknown chunk? */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    92
            if (up->size == 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    93
               png_warning(png_ptr, "Writing zero-length unknown chunk");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    94
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    95
            png_write_chunk(png_ptr, up->name, up->data, up->size);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    96
         }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    97
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    98
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
    99
}
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   100
#endif /* WRITE_UNKNOWN_CHUNKS */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   101
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   102
/* Writes all the PNG information.  This is the suggested way to use the
90ce3da70b43 Initial load
duke
parents:
diff changeset
   103
 * library.  If you have a new chunk to add, make a function to write it,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   104
 * and put it in the correct location here.  If you want the chunk written
90ce3da70b43 Initial load
duke
parents:
diff changeset
   105
 * after the image data, put it in png_write_end().  I strongly encourage
90ce3da70b43 Initial load
duke
parents:
diff changeset
   106
 * you to supply a PNG_INFO_ flag, and check info_ptr->valid before writing
90ce3da70b43 Initial load
duke
parents:
diff changeset
   107
 * the chunk, as that will keep the code from breaking if you want to just
90ce3da70b43 Initial load
duke
parents:
diff changeset
   108
 * write a plain PNG file.  If you have long comments, I suggest writing
90ce3da70b43 Initial load
duke
parents:
diff changeset
   109
 * them in png_write_end(), and compressing them.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   110
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   111
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   112
png_write_info_before_PLTE(png_structrp png_ptr, png_const_inforp info_ptr)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   113
{
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   114
   png_debug(1, "in png_write_info_before_PLTE");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   115
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   116
   if (png_ptr == NULL || info_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   117
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   118
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   119
   if ((png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE) == 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   120
   {
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   121
      /* Write PNG signature */
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   122
      png_write_sig(png_ptr);
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   123
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   124
#ifdef PNG_MNG_FEATURES_SUPPORTED
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   125
      if ((png_ptr->mode & PNG_HAVE_PNG_SIGNATURE) != 0 && \
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   126
          png_ptr->mng_features_permitted != 0)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   127
      {
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   128
         png_warning(png_ptr,
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   129
             "MNG features are not allowed in a PNG datastream");
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   130
         png_ptr->mng_features_permitted = 0;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   131
      }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   132
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   133
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   134
      /* Write IHDR information. */
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   135
      png_write_IHDR(png_ptr, info_ptr->width, info_ptr->height,
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   136
          info_ptr->bit_depth, info_ptr->color_type, info_ptr->compression_type,
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   137
          info_ptr->filter_type,
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   138
#ifdef PNG_WRITE_INTERLACING_SUPPORTED
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   139
          info_ptr->interlace_type
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   140
#else
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   141
          0
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   142
#endif
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   143
         );
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   144
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   145
      /* The rest of these check to see if the valid field has the appropriate
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   146
       * flag set, and if it does, writes the chunk.
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   147
       *
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   148
       * 1.6.0: COLORSPACE support controls the writing of these chunks too, and
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   149
       * the chunks will be written if the WRITE routine is there and
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   150
       * information * is available in the COLORSPACE. (See
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   151
       * png_colorspace_sync_info in png.c for where the valid flags get set.)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   152
       *
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   153
       * Under certain circumstances the colorspace can be invalidated without
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   154
       * syncing the info_struct 'valid' flags; this happens if libpng detects
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   155
       * an error and calls png_error while the color space is being set, yet
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   156
       * the application continues writing the PNG.  So check the 'invalid'
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   157
       * flag here too.
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   158
       */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   159
#ifdef PNG_GAMMA_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   160
#  ifdef PNG_WRITE_gAMA_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   161
      if ((info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) == 0 &&
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   162
          (info_ptr->colorspace.flags & PNG_COLORSPACE_FROM_gAMA) != 0 &&
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   163
          (info_ptr->valid & PNG_INFO_gAMA) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   164
         png_write_gAMA_fixed(png_ptr, info_ptr->colorspace.gamma);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   165
#  endif
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   166
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   167
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   168
#ifdef PNG_COLORSPACE_SUPPORTED
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   169
      /* Write only one of sRGB or an ICC profile.  If a profile was supplied
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   170
       * and it matches one of the known sRGB ones issue a warning.
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   171
       */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   172
#  ifdef PNG_WRITE_iCCP_SUPPORTED
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   173
         if ((info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) == 0 &&
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   174
             (info_ptr->valid & PNG_INFO_iCCP) != 0)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   175
         {
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   176
#    ifdef PNG_WRITE_sRGB_SUPPORTED
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   177
               if ((info_ptr->valid & PNG_INFO_sRGB) != 0)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   178
                  png_app_warning(png_ptr,
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   179
                     "profile matches sRGB but writing iCCP instead");
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   180
#     endif
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   181
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   182
            png_write_iCCP(png_ptr, info_ptr->iccp_name,
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   183
               info_ptr->iccp_profile);
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   184
         }
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   185
#     ifdef PNG_WRITE_sRGB_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   186
         else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   187
#     endif
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   188
#  endif
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   189
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   190
#  ifdef PNG_WRITE_sRGB_SUPPORTED
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   191
         if ((info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) == 0 &&
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   192
             (info_ptr->valid & PNG_INFO_sRGB) != 0)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   193
            png_write_sRGB(png_ptr, info_ptr->colorspace.rendering_intent);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   194
#  endif /* WRITE_sRGB */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   195
#endif /* COLORSPACE */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   196
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   197
#ifdef PNG_WRITE_sBIT_SUPPORTED
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   198
         if ((info_ptr->valid & PNG_INFO_sBIT) != 0)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   199
            png_write_sBIT(png_ptr, &(info_ptr->sig_bit), info_ptr->color_type);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   200
#endif
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   201
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   202
#ifdef PNG_COLORSPACE_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   203
#  ifdef PNG_WRITE_cHRM_SUPPORTED
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   204
         if ((info_ptr->colorspace.flags & PNG_COLORSPACE_INVALID) == 0 &&
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   205
             (info_ptr->colorspace.flags & PNG_COLORSPACE_FROM_cHRM) != 0 &&
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   206
             (info_ptr->valid & PNG_INFO_cHRM) != 0)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   207
            png_write_cHRM_fixed(png_ptr, &info_ptr->colorspace.end_points_xy);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   208
#  endif
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   209
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   210
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   211
#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   212
         write_unknown_chunks(png_ptr, info_ptr, PNG_HAVE_IHDR);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   213
#endif
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   214
90ce3da70b43 Initial load
duke
parents:
diff changeset
   215
      png_ptr->mode |= PNG_WROTE_INFO_BEFORE_PLTE;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   216
   }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   217
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   218
90ce3da70b43 Initial load
duke
parents:
diff changeset
   219
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   220
png_write_info(png_structrp png_ptr, png_const_inforp info_ptr)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   221
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   222
#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   223
   int i;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   224
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   225
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   226
   png_debug(1, "in png_write_info");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   227
90ce3da70b43 Initial load
duke
parents:
diff changeset
   228
   if (png_ptr == NULL || info_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   229
      return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   230
90ce3da70b43 Initial load
duke
parents:
diff changeset
   231
   png_write_info_before_PLTE(png_ptr, info_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   232
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   233
   if ((info_ptr->valid & PNG_INFO_PLTE) != 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   234
      png_write_PLTE(png_ptr, info_ptr->palette,
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   235
          (png_uint_32)info_ptr->num_palette);
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   236
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   237
   else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   238
      png_error(png_ptr, "Valid palette required for paletted images");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   239
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   240
#ifdef PNG_WRITE_tRNS_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   241
   if ((info_ptr->valid & PNG_INFO_tRNS) !=0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   242
   {
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   243
#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   244
      /* Invert the alpha channel (in tRNS) */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   245
      if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0 &&
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   246
          info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   247
      {
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   248
         int j, jend;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   249
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   250
         jend = info_ptr->num_trans;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   251
         if (jend > PNG_MAX_PALETTE_LENGTH)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   252
            jend = PNG_MAX_PALETTE_LENGTH;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   253
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   254
         for (j = 0; j<jend; ++j)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   255
            info_ptr->trans_alpha[j] =
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   256
               (png_byte)(255 - info_ptr->trans_alpha[j]);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   257
      }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   258
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   259
      png_write_tRNS(png_ptr, info_ptr->trans_alpha, &(info_ptr->trans_color),
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   260
          info_ptr->num_trans, info_ptr->color_type);
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   261
   }
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   262
#endif
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   263
#ifdef PNG_WRITE_bKGD_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   264
   if ((info_ptr->valid & PNG_INFO_bKGD) != 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   265
      png_write_bKGD(png_ptr, &(info_ptr->background), info_ptr->color_type);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   266
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   267
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   268
#ifdef PNG_WRITE_hIST_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   269
   if ((info_ptr->valid & PNG_INFO_hIST) != 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   270
      png_write_hIST(png_ptr, info_ptr->hist, info_ptr->num_palette);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   271
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   272
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   273
#ifdef PNG_WRITE_oFFs_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   274
   if ((info_ptr->valid & PNG_INFO_oFFs) != 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   275
      png_write_oFFs(png_ptr, info_ptr->x_offset, info_ptr->y_offset,
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   276
          info_ptr->offset_unit_type);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   277
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   278
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   279
#ifdef PNG_WRITE_pCAL_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   280
   if ((info_ptr->valid & PNG_INFO_pCAL) != 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   281
      png_write_pCAL(png_ptr, info_ptr->pcal_purpose, info_ptr->pcal_X0,
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   282
          info_ptr->pcal_X1, info_ptr->pcal_type, info_ptr->pcal_nparams,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   283
          info_ptr->pcal_units, info_ptr->pcal_params);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   284
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   285
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   286
#ifdef PNG_WRITE_sCAL_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   287
   if ((info_ptr->valid & PNG_INFO_sCAL) != 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   288
      png_write_sCAL_s(png_ptr, (int)info_ptr->scal_unit,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   289
          info_ptr->scal_s_width, info_ptr->scal_s_height);
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   290
#endif /* sCAL */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   291
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   292
#ifdef PNG_WRITE_pHYs_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   293
   if ((info_ptr->valid & PNG_INFO_pHYs) != 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   294
      png_write_pHYs(png_ptr, info_ptr->x_pixels_per_unit,
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   295
          info_ptr->y_pixels_per_unit, info_ptr->phys_unit_type);
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   296
#endif /* pHYs */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   297
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   298
#ifdef PNG_WRITE_tIME_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   299
   if ((info_ptr->valid & PNG_INFO_tIME) != 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   300
   {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   301
      png_write_tIME(png_ptr, &(info_ptr->mod_time));
90ce3da70b43 Initial load
duke
parents:
diff changeset
   302
      png_ptr->mode |= PNG_WROTE_tIME;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   303
   }
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   304
#endif /* tIME */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   305
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   306
#ifdef PNG_WRITE_sPLT_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   307
   if ((info_ptr->valid & PNG_INFO_sPLT) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   308
      for (i = 0; i < (int)info_ptr->splt_palettes_num; i++)
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   309
         png_write_sPLT(png_ptr, info_ptr->splt_palettes + i);
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   310
#endif /* sPLT */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   311
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   312
#ifdef PNG_WRITE_TEXT_SUPPORTED
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   313
   /* Check to see if we need to write text chunks */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   314
   for (i = 0; i < info_ptr->num_text; i++)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   315
   {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   316
      png_debug2(2, "Writing header text chunk %d, type %d", i,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   317
          info_ptr->text[i].compression);
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   318
      /* An internationalized chunk? */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   319
      if (info_ptr->text[i].compression > 0)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   320
      {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   321
#ifdef PNG_WRITE_iTXt_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   322
         /* Write international chunk */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   323
         png_write_iTXt(png_ptr,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   324
             info_ptr->text[i].compression,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   325
             info_ptr->text[i].key,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   326
             info_ptr->text[i].lang,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   327
             info_ptr->text[i].lang_key,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   328
             info_ptr->text[i].text);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   329
         /* Mark this chunk as written */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   330
         if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   331
            info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   332
         else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   333
            info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   334
#else
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   335
         png_warning(png_ptr, "Unable to write international text");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   336
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   337
      }
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   338
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   339
      /* If we want a compressed text chunk */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   340
      else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_zTXt)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   341
      {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   342
#ifdef PNG_WRITE_zTXt_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   343
         /* Write compressed chunk */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   344
         png_write_zTXt(png_ptr, info_ptr->text[i].key,
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   345
             info_ptr->text[i].text, info_ptr->text[i].compression);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   346
         /* Mark this chunk as written */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   347
         info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   348
#else
90ce3da70b43 Initial load
duke
parents:
diff changeset
   349
         png_warning(png_ptr, "Unable to write compressed text");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   350
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   351
      }
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   352
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   353
      else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   354
      {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   355
#ifdef PNG_WRITE_tEXt_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   356
         /* Write uncompressed chunk */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   357
         png_write_tEXt(png_ptr, info_ptr->text[i].key,
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   358
             info_ptr->text[i].text,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   359
             0);
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   360
         /* Mark this chunk as written */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   361
         info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   362
#else
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   363
         /* Can't get here */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   364
         png_warning(png_ptr, "Unable to write uncompressed text");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   365
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   366
      }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   367
   }
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   368
#endif /* tEXt */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   369
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   370
#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   371
   write_unknown_chunks(png_ptr, info_ptr, PNG_HAVE_PLTE);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   372
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   373
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   374
90ce3da70b43 Initial load
duke
parents:
diff changeset
   375
/* Writes the end of the PNG file.  If you don't want to write comments or
90ce3da70b43 Initial load
duke
parents:
diff changeset
   376
 * time information, you can pass NULL for info.  If you already wrote these
90ce3da70b43 Initial load
duke
parents:
diff changeset
   377
 * in png_write_info(), do not write them again here.  If you have long
90ce3da70b43 Initial load
duke
parents:
diff changeset
   378
 * comments, I suggest writing them here, and compressing them.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   379
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   380
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   381
png_write_end(png_structrp png_ptr, png_inforp info_ptr)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   382
{
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   383
   png_debug(1, "in png_write_end");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   384
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   385
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   386
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   387
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   388
   if ((png_ptr->mode & PNG_HAVE_IDAT) == 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   389
      png_error(png_ptr, "No IDATs written into file");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   390
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   391
#ifdef PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   392
   if (png_ptr->num_palette_max > png_ptr->num_palette)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   393
      png_benign_error(png_ptr, "Wrote palette index exceeding num_palette");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   394
#endif
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   395
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   396
   /* See if user wants us to write information chunks */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   397
   if (info_ptr != NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   398
   {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   399
#ifdef PNG_WRITE_TEXT_SUPPORTED
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   400
      int i; /* local index variable */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   401
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   402
#ifdef PNG_WRITE_tIME_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   403
      /* Check to see if user has supplied a time chunk */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   404
      if ((info_ptr->valid & PNG_INFO_tIME) != 0 &&
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   405
          (png_ptr->mode & PNG_WROTE_tIME) == 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   406
         png_write_tIME(png_ptr, &(info_ptr->mod_time));
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   407
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   408
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   409
#ifdef PNG_WRITE_TEXT_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   410
      /* Loop through comment chunks */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   411
      for (i = 0; i < info_ptr->num_text; i++)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   412
      {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   413
         png_debug2(2, "Writing trailer text chunk %d, type %d", i,
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   414
            info_ptr->text[i].compression);
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   415
         /* An internationalized chunk? */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   416
         if (info_ptr->text[i].compression > 0)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   417
         {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   418
#ifdef PNG_WRITE_iTXt_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   419
            /* Write international chunk */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   420
            png_write_iTXt(png_ptr,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   421
                info_ptr->text[i].compression,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   422
                info_ptr->text[i].key,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   423
                info_ptr->text[i].lang,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   424
                info_ptr->text[i].lang_key,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   425
                info_ptr->text[i].text);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   426
            /* Mark this chunk as written */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   427
            if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   428
               info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   429
            else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   430
               info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   431
#else
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   432
            png_warning(png_ptr, "Unable to write international text");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   433
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   434
         }
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   435
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   436
         else if (info_ptr->text[i].compression >= PNG_TEXT_COMPRESSION_zTXt)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   437
         {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   438
#ifdef PNG_WRITE_zTXt_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   439
            /* Write compressed chunk */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   440
            png_write_zTXt(png_ptr, info_ptr->text[i].key,
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   441
                info_ptr->text[i].text, info_ptr->text[i].compression);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   442
            /* Mark this chunk as written */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   443
            info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   444
#else
90ce3da70b43 Initial load
duke
parents:
diff changeset
   445
            png_warning(png_ptr, "Unable to write compressed text");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   446
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   447
         }
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   448
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   449
         else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   450
         {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   451
#ifdef PNG_WRITE_tEXt_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   452
            /* Write uncompressed chunk */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   453
            png_write_tEXt(png_ptr, info_ptr->text[i].key,
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   454
                info_ptr->text[i].text, 0);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   455
            /* Mark this chunk as written */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   456
            info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   457
#else
90ce3da70b43 Initial load
duke
parents:
diff changeset
   458
            png_warning(png_ptr, "Unable to write uncompressed text");
90ce3da70b43 Initial load
duke
parents:
diff changeset
   459
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   460
         }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   461
      }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   462
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   463
#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   464
      write_unknown_chunks(png_ptr, info_ptr, PNG_AFTER_IDAT);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   465
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   466
   }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   467
90ce3da70b43 Initial load
duke
parents:
diff changeset
   468
   png_ptr->mode |= PNG_AFTER_IDAT;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   469
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   470
   /* Write end of PNG file */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   471
   png_write_IEND(png_ptr);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   472
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   473
   /* This flush, added in libpng-1.0.8, removed from libpng-1.0.9beta03,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   474
    * and restored again in libpng-1.2.30, may cause some applications that
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   475
    * do not set png_ptr->output_flush_fn to crash.  If your application
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   476
    * experiences a problem, please try building libpng with
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   477
    * PNG_WRITE_FLUSH_AFTER_IEND_SUPPORTED defined, and report the event to
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   478
    * png-mng-implement at lists.sf.net .
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   479
    */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   480
#ifdef PNG_WRITE_FLUSH_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   481
#  ifdef PNG_WRITE_FLUSH_AFTER_IEND_SUPPORTED
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   482
   png_flush(png_ptr);
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   483
#  endif
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   484
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   485
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   486
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   487
#ifdef PNG_CONVERT_tIME_SUPPORTED
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   488
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   489
png_convert_from_struct_tm(png_timep ptime, PNG_CONST struct tm * ttime)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   490
{
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   491
   png_debug(1, "in png_convert_from_struct_tm");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   492
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   493
   ptime->year = (png_uint_16)(1900 + ttime->tm_year);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   494
   ptime->month = (png_byte)(ttime->tm_mon + 1);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   495
   ptime->day = (png_byte)ttime->tm_mday;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   496
   ptime->hour = (png_byte)ttime->tm_hour;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   497
   ptime->minute = (png_byte)ttime->tm_min;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   498
   ptime->second = (png_byte)ttime->tm_sec;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   499
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   500
90ce3da70b43 Initial load
duke
parents:
diff changeset
   501
void PNGAPI
90ce3da70b43 Initial load
duke
parents:
diff changeset
   502
png_convert_from_time_t(png_timep ptime, time_t ttime)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   503
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   504
   struct tm *tbuf;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   505
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   506
   png_debug(1, "in png_convert_from_time_t");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   507
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   508
   tbuf = gmtime(&ttime);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   509
   png_convert_from_struct_tm(ptime, tbuf);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   510
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   511
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   512
90ce3da70b43 Initial load
duke
parents:
diff changeset
   513
/* Initialize png_ptr structure, and allocate any memory needed */
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   514
PNG_FUNCTION(png_structp,PNGAPI
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   515
png_create_write_struct,(png_const_charp user_png_ver, png_voidp error_ptr,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   516
    png_error_ptr error_fn, png_error_ptr warn_fn),PNG_ALLOCATED)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   517
{
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   518
#ifndef PNG_USER_MEM_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   519
   png_structrp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   520
       error_fn, warn_fn, NULL, NULL, NULL);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   521
#else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   522
   return png_create_write_struct_2(user_png_ver, error_ptr, error_fn,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   523
       warn_fn, NULL, NULL, NULL);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   524
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   525
90ce3da70b43 Initial load
duke
parents:
diff changeset
   526
/* Alternate initialize png_ptr structure, and allocate any memory needed */
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   527
PNG_FUNCTION(png_structp,PNGAPI
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   528
png_create_write_struct_2,(png_const_charp user_png_ver, png_voidp error_ptr,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   529
    png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   530
    png_malloc_ptr malloc_fn, png_free_ptr free_fn),PNG_ALLOCATED)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   531
{
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   532
   png_structrp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   533
       error_fn, warn_fn, mem_ptr, malloc_fn, free_fn);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   534
#endif /* USER_MEM */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   535
   if (png_ptr != NULL)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   536
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   537
      /* Set the zlib control values to defaults; they can be overridden by the
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   538
       * application after the struct has been created.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   539
       */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   540
      png_ptr->zbuffer_size = PNG_ZBUF_SIZE;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   541
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   542
      /* The 'zlib_strategy' setting is irrelevant because png_default_claim in
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   543
       * pngwutil.c defaults it according to whether or not filters will be
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   544
       * used, and ignores this setting.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   545
       */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   546
      png_ptr->zlib_strategy = PNG_Z_DEFAULT_STRATEGY;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   547
      png_ptr->zlib_level = PNG_Z_DEFAULT_COMPRESSION;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   548
      png_ptr->zlib_mem_level = 8;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   549
      png_ptr->zlib_window_bits = 15;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   550
      png_ptr->zlib_method = 8;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   551
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   552
#ifdef PNG_WRITE_COMPRESSED_TEXT_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   553
      png_ptr->zlib_text_strategy = PNG_TEXT_Z_DEFAULT_STRATEGY;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   554
      png_ptr->zlib_text_level = PNG_TEXT_Z_DEFAULT_COMPRESSION;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   555
      png_ptr->zlib_text_mem_level = 8;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   556
      png_ptr->zlib_text_window_bits = 15;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   557
      png_ptr->zlib_text_method = 8;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   558
#endif /* WRITE_COMPRESSED_TEXT */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   559
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   560
      /* This is a highly dubious configuration option; by default it is off,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   561
       * but it may be appropriate for private builds that are testing
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   562
       * extensions not conformant to the current specification, or of
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   563
       * applications that must not fail to write at all costs!
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   564
       */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   565
#ifdef PNG_BENIGN_WRITE_ERRORS_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   566
      /* In stable builds only warn if an application error can be completely
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   567
       * handled.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   568
       */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   569
      png_ptr->flags |= PNG_FLAG_BENIGN_ERRORS_WARN;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   570
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   571
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   572
      /* App warnings are warnings in release (or release candidate) builds but
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   573
       * are errors during development.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   574
       */
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   575
#if PNG_RELEASE_BUILD
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   576
      png_ptr->flags |= PNG_FLAG_APP_WARNINGS_WARN;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   577
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   578
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   579
      /* TODO: delay this, it can be done in png_init_io() (if the app doesn't
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   580
       * do it itself) avoiding setting the default function if it is not
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   581
       * required.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   582
       */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   583
      png_set_write_fn(png_ptr, NULL, NULL, NULL);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   584
   }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   585
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   586
   return png_ptr;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   587
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   588
90ce3da70b43 Initial load
duke
parents:
diff changeset
   589
90ce3da70b43 Initial load
duke
parents:
diff changeset
   590
/* Write a few rows of image data.  If the image is interlaced,
90ce3da70b43 Initial load
duke
parents:
diff changeset
   591
 * either you will have to write the 7 sub images, or, if you
90ce3da70b43 Initial load
duke
parents:
diff changeset
   592
 * have called png_set_interlace_handling(), you will have to
90ce3da70b43 Initial load
duke
parents:
diff changeset
   593
 * "write" the image seven times.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   594
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   595
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   596
png_write_rows(png_structrp png_ptr, png_bytepp row,
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   597
    png_uint_32 num_rows)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   598
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   599
   png_uint_32 i; /* row counter */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   600
   png_bytepp rp; /* row pointer */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   601
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   602
   png_debug(1, "in png_write_rows");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   603
90ce3da70b43 Initial load
duke
parents:
diff changeset
   604
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   605
      return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   606
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   607
   /* Loop through the rows */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   608
   for (i = 0, rp = row; i < num_rows; i++, rp++)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   609
   {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   610
      png_write_row(png_ptr, *rp);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   611
   }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   612
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   613
90ce3da70b43 Initial load
duke
parents:
diff changeset
   614
/* Write the image.  You only need to call this function once, even
90ce3da70b43 Initial load
duke
parents:
diff changeset
   615
 * if you are writing an interlaced image.
90ce3da70b43 Initial load
duke
parents:
diff changeset
   616
 */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   617
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   618
png_write_image(png_structrp png_ptr, png_bytepp image)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   619
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
   620
   png_uint_32 i; /* row index */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   621
   int pass, num_pass; /* pass variables */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   622
   png_bytepp rp; /* points to current row */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   623
90ce3da70b43 Initial load
duke
parents:
diff changeset
   624
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   625
      return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   626
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   627
   png_debug(1, "in png_write_image");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   628
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   629
#ifdef PNG_WRITE_INTERLACING_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   630
   /* Initialize interlace handling.  If image is not interlaced,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   631
    * this will set pass to 1
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   632
    */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   633
   num_pass = png_set_interlace_handling(png_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   634
#else
90ce3da70b43 Initial load
duke
parents:
diff changeset
   635
   num_pass = 1;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   636
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   637
   /* Loop through passes */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   638
   for (pass = 0; pass < num_pass; pass++)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   639
   {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   640
      /* Loop through image */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   641
      for (i = 0, rp = image; i < png_ptr->height; i++, rp++)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   642
      {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   643
         png_write_row(png_ptr, *rp);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   644
      }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   645
   }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   646
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   647
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   648
#ifdef PNG_MNG_FEATURES_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   649
/* Performs intrapixel differencing  */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   650
static void
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   651
png_do_write_intrapixel(png_row_infop row_info, png_bytep row)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   652
{
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   653
   png_debug(1, "in png_do_write_intrapixel");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   654
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   655
   if ((row_info->color_type & PNG_COLOR_MASK_COLOR) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   656
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   657
      int bytes_per_pixel;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   658
      png_uint_32 row_width = row_info->width;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   659
      if (row_info->bit_depth == 8)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   660
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   661
         png_bytep rp;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   662
         png_uint_32 i;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   663
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   664
         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   665
            bytes_per_pixel = 3;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   666
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   667
         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   668
            bytes_per_pixel = 4;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   669
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   670
         else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   671
            return;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   672
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   673
         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   674
         {
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   675
            *(rp)     = (png_byte)(*rp       - *(rp + 1));
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   676
            *(rp + 2) = (png_byte)(*(rp + 2) - *(rp + 1));
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   677
         }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   678
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   679
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   680
#ifdef PNG_WRITE_16BIT_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   681
      else if (row_info->bit_depth == 16)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   682
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   683
         png_bytep rp;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   684
         png_uint_32 i;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   685
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   686
         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   687
            bytes_per_pixel = 6;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   688
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   689
         else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   690
            bytes_per_pixel = 8;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   691
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   692
         else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   693
            return;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   694
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   695
         for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   696
         {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   697
            png_uint_32 s0   = (*(rp    ) << 8) | *(rp + 1);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   698
            png_uint_32 s1   = (*(rp + 2) << 8) | *(rp + 3);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   699
            png_uint_32 s2   = (*(rp + 4) << 8) | *(rp + 5);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   700
            png_uint_32 red  = (png_uint_32)((s0 - s1) & 0xffffL);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   701
            png_uint_32 blue = (png_uint_32)((s2 - s1) & 0xffffL);
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   702
            *(rp    ) = (png_byte)(red >> 8);
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   703
            *(rp + 1) = (png_byte)red;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   704
            *(rp + 4) = (png_byte)(blue >> 8);
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   705
            *(rp + 5) = (png_byte)blue;
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   706
         }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   707
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   708
#endif /* WRITE_16BIT */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   709
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   710
}
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   711
#endif /* MNG_FEATURES */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   712
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   713
/* Called by user to write a row of image data */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   714
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   715
png_write_row(png_structrp png_ptr, png_const_bytep row)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   716
{
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   717
   /* 1.5.6: moved from png_struct to be a local structure: */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   718
   png_row_info row_info;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   719
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   720
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   721
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   722
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   723
   png_debug2(1, "in png_write_row (row %u, pass %d)",
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   724
      png_ptr->row_number, png_ptr->pass);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   725
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   726
   /* Initialize transformations and other stuff if first time */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   727
   if (png_ptr->row_number == 0 && png_ptr->pass == 0)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   728
   {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   729
      /* Make sure we wrote the header info */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   730
      if ((png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE) == 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   731
         png_error(png_ptr,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   732
             "png_write_info was never called before png_write_row");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   733
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   734
      /* Check for transforms that have been set but were defined out */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   735
#if !defined(PNG_WRITE_INVERT_SUPPORTED) && defined(PNG_READ_INVERT_SUPPORTED)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   736
      if ((png_ptr->transformations & PNG_INVERT_MONO) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   737
         png_warning(png_ptr, "PNG_WRITE_INVERT_SUPPORTED is not defined");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   738
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   739
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   740
#if !defined(PNG_WRITE_FILLER_SUPPORTED) && defined(PNG_READ_FILLER_SUPPORTED)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   741
      if ((png_ptr->transformations & PNG_FILLER) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   742
         png_warning(png_ptr, "PNG_WRITE_FILLER_SUPPORTED is not defined");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   743
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   744
#if !defined(PNG_WRITE_PACKSWAP_SUPPORTED) && \
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   745
    defined(PNG_READ_PACKSWAP_SUPPORTED)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   746
      if ((png_ptr->transformations & PNG_PACKSWAP) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   747
         png_warning(png_ptr,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   748
             "PNG_WRITE_PACKSWAP_SUPPORTED is not defined");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   749
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   750
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   751
#if !defined(PNG_WRITE_PACK_SUPPORTED) && defined(PNG_READ_PACK_SUPPORTED)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   752
      if ((png_ptr->transformations & PNG_PACK) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   753
         png_warning(png_ptr, "PNG_WRITE_PACK_SUPPORTED is not defined");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   754
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   755
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   756
#if !defined(PNG_WRITE_SHIFT_SUPPORTED) && defined(PNG_READ_SHIFT_SUPPORTED)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   757
      if ((png_ptr->transformations & PNG_SHIFT) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   758
         png_warning(png_ptr, "PNG_WRITE_SHIFT_SUPPORTED is not defined");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   759
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   760
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   761
#if !defined(PNG_WRITE_BGR_SUPPORTED) && defined(PNG_READ_BGR_SUPPORTED)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   762
      if ((png_ptr->transformations & PNG_BGR) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   763
         png_warning(png_ptr, "PNG_WRITE_BGR_SUPPORTED is not defined");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   764
#endif
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   765
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   766
#if !defined(PNG_WRITE_SWAP_SUPPORTED) && defined(PNG_READ_SWAP_SUPPORTED)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   767
      if ((png_ptr->transformations & PNG_SWAP_BYTES) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   768
         png_warning(png_ptr, "PNG_WRITE_SWAP_SUPPORTED is not defined");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   769
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   770
90ce3da70b43 Initial load
duke
parents:
diff changeset
   771
      png_write_start_row(png_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   772
   }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   773
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   774
#ifdef PNG_WRITE_INTERLACING_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   775
   /* If interlaced and not interested in row, return */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   776
   if (png_ptr->interlaced != 0 &&
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   777
       (png_ptr->transformations & PNG_INTERLACE) != 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   778
   {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   779
      switch (png_ptr->pass)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   780
      {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   781
         case 0:
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   782
            if ((png_ptr->row_number & 0x07) != 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   783
            {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   784
               png_write_finish_row(png_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   785
               return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   786
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   787
            break;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   788
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   789
         case 1:
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   790
            if ((png_ptr->row_number & 0x07) != 0 || png_ptr->width < 5)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   791
            {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   792
               png_write_finish_row(png_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   793
               return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   794
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   795
            break;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   796
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   797
         case 2:
90ce3da70b43 Initial load
duke
parents:
diff changeset
   798
            if ((png_ptr->row_number & 0x07) != 4)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   799
            {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   800
               png_write_finish_row(png_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   801
               return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   802
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   803
            break;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   804
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   805
         case 3:
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   806
            if ((png_ptr->row_number & 0x03) != 0 || png_ptr->width < 3)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   807
            {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   808
               png_write_finish_row(png_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   809
               return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   810
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   811
            break;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   812
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   813
         case 4:
90ce3da70b43 Initial load
duke
parents:
diff changeset
   814
            if ((png_ptr->row_number & 0x03) != 2)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   815
            {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   816
               png_write_finish_row(png_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   817
               return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   818
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   819
            break;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   820
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   821
         case 5:
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   822
            if ((png_ptr->row_number & 0x01) != 0 || png_ptr->width < 2)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   823
            {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   824
               png_write_finish_row(png_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   825
               return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   826
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   827
            break;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   828
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   829
         case 6:
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   830
            if ((png_ptr->row_number & 0x01) == 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   831
            {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   832
               png_write_finish_row(png_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   833
               return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   834
            }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   835
            break;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   836
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   837
         default: /* error: ignore it */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   838
            break;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   839
      }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   840
   }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   841
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   842
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   843
   /* Set up row info for transformations */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   844
   row_info.color_type = png_ptr->color_type;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   845
   row_info.width = png_ptr->usr_width;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   846
   row_info.channels = png_ptr->usr_channels;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   847
   row_info.bit_depth = png_ptr->usr_bit_depth;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   848
   row_info.pixel_depth = (png_byte)(row_info.bit_depth * row_info.channels);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   849
   row_info.rowbytes = PNG_ROWBYTES(row_info.pixel_depth, row_info.width);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   850
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   851
   png_debug1(3, "row_info->color_type = %d", row_info.color_type);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   852
   png_debug1(3, "row_info->width = %u", row_info.width);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   853
   png_debug1(3, "row_info->channels = %d", row_info.channels);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   854
   png_debug1(3, "row_info->bit_depth = %d", row_info.bit_depth);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   855
   png_debug1(3, "row_info->pixel_depth = %d", row_info.pixel_depth);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   856
   png_debug1(3, "row_info->rowbytes = %lu", (unsigned long)row_info.rowbytes);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   857
90ce3da70b43 Initial load
duke
parents:
diff changeset
   858
   /* Copy user's row into buffer, leaving room for filter byte. */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   859
   memcpy(png_ptr->row_buf + 1, row, row_info.rowbytes);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   860
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   861
#ifdef PNG_WRITE_INTERLACING_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   862
   /* Handle interlacing */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   863
   if (png_ptr->interlaced && png_ptr->pass < 6 &&
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   864
       (png_ptr->transformations & PNG_INTERLACE) != 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   865
   {
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   866
      png_do_write_interlace(&row_info, png_ptr->row_buf + 1, png_ptr->pass);
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   867
      /* This should always get caught above, but still ... */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   868
      if (row_info.width == 0)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   869
      {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   870
         png_write_finish_row(png_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   871
         return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   872
      }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   873
   }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   874
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   875
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   876
#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   877
   /* Handle other transformations */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   878
   if (png_ptr->transformations != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   879
      png_do_write_transformations(png_ptr, &row_info);
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   880
#endif
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   881
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   882
   /* At this point the row_info pixel depth must match the 'transformed' depth,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   883
    * which is also the output depth.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   884
    */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   885
   if (row_info.pixel_depth != png_ptr->pixel_depth ||
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   886
       row_info.pixel_depth != png_ptr->transformed_pixel_depth)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   887
      png_error(png_ptr, "internal write transform logic error");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   888
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   889
#ifdef PNG_MNG_FEATURES_SUPPORTED
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   890
   /* Write filter_method 64 (intrapixel differencing) only if
90ce3da70b43 Initial load
duke
parents:
diff changeset
   891
    * 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
90ce3da70b43 Initial load
duke
parents:
diff changeset
   892
    * 2. Libpng did not write a PNG signature (this filter_method is only
90ce3da70b43 Initial load
duke
parents:
diff changeset
   893
    *    used in PNG datastreams that are embedded in MNG datastreams) and
90ce3da70b43 Initial load
duke
parents:
diff changeset
   894
    * 3. The application called png_permit_mng_features with a mask that
90ce3da70b43 Initial load
duke
parents:
diff changeset
   895
    *    included PNG_FLAG_MNG_FILTER_64 and
90ce3da70b43 Initial load
duke
parents:
diff changeset
   896
    * 4. The filter_method is 64 and
90ce3da70b43 Initial load
duke
parents:
diff changeset
   897
    * 5. The color_type is RGB or RGBA
90ce3da70b43 Initial load
duke
parents:
diff changeset
   898
    */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   899
   if ((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) != 0 &&
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   900
       (png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING))
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   901
   {
90ce3da70b43 Initial load
duke
parents:
diff changeset
   902
      /* Intrapixel differencing */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   903
      png_do_write_intrapixel(&row_info, png_ptr->row_buf + 1);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   904
   }
90ce3da70b43 Initial load
duke
parents:
diff changeset
   905
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   906
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   907
/* Added at libpng-1.5.10 */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   908
#ifdef PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   909
   /* Check for out-of-range palette index */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   910
   if (row_info.color_type == PNG_COLOR_TYPE_PALETTE &&
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   911
       png_ptr->num_palette_max >= 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   912
      png_do_check_palette_indexes(png_ptr, &row_info);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   913
#endif
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   914
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   915
   /* Find a filter if necessary, filter the row and write it out. */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   916
   png_write_find_filter(png_ptr, &row_info);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   917
90ce3da70b43 Initial load
duke
parents:
diff changeset
   918
   if (png_ptr->write_row_fn != NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   919
      (*(png_ptr->write_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   920
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   921
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   922
#ifdef PNG_WRITE_FLUSH_SUPPORTED
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   923
/* Set the automatic flush interval or 0 to turn flushing off */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   924
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   925
png_set_flush(png_structrp png_ptr, int nrows)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   926
{
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   927
   png_debug(1, "in png_set_flush");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   928
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   929
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   930
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   931
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   932
   png_ptr->flush_dist = (nrows < 0 ? 0 : nrows);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   933
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
   934
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   935
/* Flush the current output buffers now */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   936
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   937
png_write_flush(png_structrp png_ptr)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   938
{
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   939
   png_debug(1, "in png_write_flush");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   940
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   941
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
   942
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   943
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   944
   /* We have already written out all of the data */
90ce3da70b43 Initial load
duke
parents:
diff changeset
   945
   if (png_ptr->row_number >= png_ptr->num_rows)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   946
      return;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   947
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   948
   png_compress_IDAT(png_ptr, NULL, 0, Z_SYNC_FLUSH);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   949
   png_ptr->flush_rows = 0;
90ce3da70b43 Initial load
duke
parents:
diff changeset
   950
   png_flush(png_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
   951
}
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   952
#endif /* WRITE_FLUSH */
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   953
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   954
/* Free any memory used in png_ptr struct without freeing the struct itself. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   955
static void
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   956
png_write_destroy(png_structrp png_ptr)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   957
{
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   958
   png_debug(1, "in png_write_destroy");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   959
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   960
   /* Free any memory zlib uses */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   961
   if ((png_ptr->flags & PNG_FLAG_ZSTREAM_INITIALIZED) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   962
      deflateEnd(&png_ptr->zstream);
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   963
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   964
   /* Free our memory.  png_free checks NULL for us. */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   965
   png_free_buffer_list(png_ptr, &png_ptr->zbuffer_list);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   966
   png_free(png_ptr, png_ptr->row_buf);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   967
   png_ptr->row_buf = NULL;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
   968
#ifdef PNG_WRITE_FILTER_SUPPORTED
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   969
   png_free(png_ptr, png_ptr->prev_row);
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   970
   png_free(png_ptr, png_ptr->try_row);
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   971
   png_free(png_ptr, png_ptr->tst_row);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   972
   png_ptr->prev_row = NULL;
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   973
   png_ptr->try_row = NULL;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
   974
   png_ptr->tst_row = NULL;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   975
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   976
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   977
#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   978
   png_free(png_ptr, png_ptr->chunk_list);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   979
   png_ptr->chunk_list = NULL;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   980
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
   981
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   982
   /* The error handling and memory handling information is left intact at this
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   983
    * point: the jmp_buf may still have to be freed.  See png_destroy_png_struct
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   984
    * for how this happens.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   985
    */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   986
}
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   987
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   988
/* Free all memory used by the write.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   989
 * In libpng 1.6.0 this API changed quietly to no longer accept a NULL value for
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   990
 * *png_ptr_ptr.  Prior to 1.6.0 it would accept such a value and it would free
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   991
 * the passed in info_structs but it would quietly fail to free any of the data
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   992
 * inside them.  In 1.6.0 it quietly does nothing (it has to be quiet because it
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   993
 * has no png_ptr.)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   994
 */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   995
void PNGAPI
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   996
png_destroy_write_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   997
{
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
   998
   png_debug(1, "in png_destroy_write_struct");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
   999
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1000
   if (png_ptr_ptr != NULL)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1001
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1002
      png_structrp png_ptr = *png_ptr_ptr;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1003
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1004
      if (png_ptr != NULL) /* added in libpng 1.6.0 */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1005
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1006
         png_destroy_info_struct(png_ptr, info_ptr_ptr);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1007
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1008
         *png_ptr_ptr = NULL;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1009
         png_write_destroy(png_ptr);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1010
         png_destroy_png_struct(png_ptr);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1011
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1012
   }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1013
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1014
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1015
/* Allow the application to select one or more row filters to use. */
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1016
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1017
png_set_filter(png_structrp png_ptr, int method, int filters)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1018
{
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1019
   png_debug(1, "in png_set_filter");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1020
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1021
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1022
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1023
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1024
#ifdef PNG_MNG_FEATURES_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1025
   if ((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) != 0 &&
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1026
       (method == PNG_INTRAPIXEL_DIFFERENCING))
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1027
      method = PNG_FILTER_TYPE_BASE;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1028
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1029
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1030
   if (method == PNG_FILTER_TYPE_BASE)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1031
   {
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1032
      switch (filters & (PNG_ALL_FILTERS | 0x07))
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1033
      {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1034
#ifdef PNG_WRITE_FILTER_SUPPORTED
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1035
         case 5:
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1036
         case 6:
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1037
         case 7: png_app_error(png_ptr, "Unknown row filter for method 0");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1038
            /* FALL THROUGH */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1039
#endif /* WRITE_FILTER */
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1040
         case PNG_FILTER_VALUE_NONE:
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1041
            png_ptr->do_filter = PNG_FILTER_NONE; break;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1042
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1043
#ifdef PNG_WRITE_FILTER_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1044
         case PNG_FILTER_VALUE_SUB:
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1045
            png_ptr->do_filter = PNG_FILTER_SUB; break;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1046
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1047
         case PNG_FILTER_VALUE_UP:
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1048
            png_ptr->do_filter = PNG_FILTER_UP; break;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1049
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1050
         case PNG_FILTER_VALUE_AVG:
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1051
            png_ptr->do_filter = PNG_FILTER_AVG; break;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1052
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1053
         case PNG_FILTER_VALUE_PAETH:
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1054
            png_ptr->do_filter = PNG_FILTER_PAETH; break;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1055
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1056
         default:
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1057
            png_ptr->do_filter = (png_byte)filters; break;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1058
#else
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1059
         default:
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1060
            png_app_error(png_ptr, "Unknown row filter for method 0");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1061
#endif /* WRITE_FILTER */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1062
      }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1063
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1064
#ifdef PNG_WRITE_FILTER_SUPPORTED
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1065
      /* If we have allocated the row_buf, this means we have already started
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1066
       * with the image and we should have allocated all of the filter buffers
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1067
       * that have been selected.  If prev_row isn't already allocated, then
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1068
       * it is too late to start using the filters that need it, since we
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1069
       * will be missing the data in the previous row.  If an application
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1070
       * wants to start and stop using particular filters during compression,
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1071
       * it should start out with all of the filters, and then remove them
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1072
       * or add them back after the start of compression.
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1073
       *
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1074
       * NOTE: this is a nasty constraint on the code, because it means that the
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1075
       * prev_row buffer must be maintained even if there are currently no
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1076
       * 'prev_row' requiring filters active.
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1077
       */
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1078
      if (png_ptr->row_buf != NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1079
      {
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1080
         int num_filters;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1081
         png_alloc_size_t buf_size;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1082
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1083
         /* Repeat the checks in png_write_start_row; 1 pixel high or wide
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1084
          * images cannot benefit from certain filters.  If this isn't done here
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1085
          * the check below will fire on 1 pixel high images.
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1086
          */
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1087
         if (png_ptr->height == 1)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1088
            filters &= ~(PNG_FILTER_UP|PNG_FILTER_AVG|PNG_FILTER_PAETH);
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1089
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1090
         if (png_ptr->width == 1)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1091
            filters &= ~(PNG_FILTER_SUB|PNG_FILTER_AVG|PNG_FILTER_PAETH);
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1092
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1093
         if ((filters & (PNG_FILTER_UP|PNG_FILTER_AVG|PNG_FILTER_PAETH)) != 0
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1094
            && png_ptr->prev_row == NULL)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1095
         {
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1096
            /* This is the error case, however it is benign - the previous row
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1097
             * is not available so the filter can't be used.  Just warn here.
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1098
             */
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1099
            png_app_warning(png_ptr,
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1100
               "png_set_filter: UP/AVG/PAETH cannot be added after start");
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1101
            filters &= ~(PNG_FILTER_UP|PNG_FILTER_AVG|PNG_FILTER_PAETH);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1102
         }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1103
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1104
         num_filters = 0;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1105
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1106
         if (filters & PNG_FILTER_SUB)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1107
            num_filters++;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1108
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1109
         if (filters & PNG_FILTER_UP)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1110
            num_filters++;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1111
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1112
         if (filters & PNG_FILTER_AVG)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1113
            num_filters++;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1114
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1115
         if (filters & PNG_FILTER_PAETH)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1116
            num_filters++;
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1117
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1118
         /* Allocate needed row buffers if they have not already been
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1119
          * allocated.
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1120
          */
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1121
         buf_size = PNG_ROWBYTES(png_ptr->usr_channels * png_ptr->usr_bit_depth,
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1122
             png_ptr->width) + 1;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1123
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1124
         if (png_ptr->try_row == NULL)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1125
            png_ptr->try_row = png_voidcast(png_bytep,
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1126
               png_malloc(png_ptr, buf_size));
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1127
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1128
         if (num_filters > 1)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1129
         {
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1130
            if (png_ptr->tst_row == NULL)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1131
               png_ptr->tst_row = png_voidcast(png_bytep,
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1132
                  png_malloc(png_ptr, buf_size));
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1133
         }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1134
      }
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1135
      png_ptr->do_filter = (png_byte)filters;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1136
#endif
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1137
   }
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1138
   else
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1139
      png_error(png_ptr, "Unknown custom filter method");
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1140
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1141
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1142
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* DEPRECATED */
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1143
/* Provide floating and fixed point APIs */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1144
#ifdef PNG_FLOATING_POINT_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1145
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1146
png_set_filter_heuristics(png_structrp png_ptr, int heuristic_method,
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1147
    int num_weights, png_const_doublep filter_weights,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1148
    png_const_doublep filter_costs)
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1149
{
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1150
   PNG_UNUSED(png_ptr)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1151
   PNG_UNUSED(heuristic_method)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1152
   PNG_UNUSED(num_weights)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1153
   PNG_UNUSED(filter_weights)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1154
   PNG_UNUSED(filter_costs)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1155
}
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1156
#endif /* FLOATING_POINT */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1157
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1158
#ifdef PNG_FIXED_POINT_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1159
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1160
png_set_filter_heuristics_fixed(png_structrp png_ptr, int heuristic_method,
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1161
    int num_weights, png_const_fixed_point_p filter_weights,
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1162
    png_const_fixed_point_p filter_costs)
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1163
{
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1164
   PNG_UNUSED(png_ptr)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1165
   PNG_UNUSED(heuristic_method)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1166
   PNG_UNUSED(num_weights)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1167
   PNG_UNUSED(filter_weights)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1168
   PNG_UNUSED(filter_costs)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1169
}
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1170
#endif /* FIXED_POINT */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1171
#endif /* WRITE_WEIGHTED_FILTER */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1172
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1173
#ifdef PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1174
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1175
png_set_compression_level(png_structrp png_ptr, int level)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1176
{
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1177
   png_debug(1, "in png_set_compression_level");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1178
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1179
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1180
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1181
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1182
   png_ptr->zlib_level = level;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1183
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1184
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1185
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1186
png_set_compression_mem_level(png_structrp png_ptr, int mem_level)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1187
{
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1188
   png_debug(1, "in png_set_compression_mem_level");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1189
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1190
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1191
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1192
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1193
   png_ptr->zlib_mem_level = mem_level;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1194
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1195
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1196
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1197
png_set_compression_strategy(png_structrp png_ptr, int strategy)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1198
{
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1199
   png_debug(1, "in png_set_compression_strategy");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1200
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1201
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1202
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1203
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1204
   /* The flag setting here prevents the libpng dynamic selection of strategy.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1205
    */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1206
   png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_STRATEGY;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1207
   png_ptr->zlib_strategy = strategy;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1208
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1209
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1210
/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1211
 * smaller value of window_bits if it can do so safely.
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1212
 */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1213
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1214
png_set_compression_window_bits(png_structrp png_ptr, int window_bits)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1215
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1216
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1217
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1218
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1219
   /* Prior to 1.6.0 this would warn but then set the window_bits value. This
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1220
    * meant that negative window bits values could be selected that would cause
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1221
    * libpng to write a non-standard PNG file with raw deflate or gzip
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1222
    * compressed IDAT or ancillary chunks.  Such files can be read and there is
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1223
    * no warning on read, so this seems like a very bad idea.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1224
    */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1225
   if (window_bits > 15)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1226
   {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1227
      png_warning(png_ptr, "Only compression windows <= 32k supported by PNG");
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1228
      window_bits = 15;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1229
   }
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1230
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1231
   else if (window_bits < 8)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1232
   {
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1233
      png_warning(png_ptr, "Only compression windows >= 256 supported by PNG");
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1234
      window_bits = 8;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1235
   }
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1236
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1237
   png_ptr->zlib_window_bits = window_bits;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1238
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1239
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1240
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1241
png_set_compression_method(png_structrp png_ptr, int method)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1242
{
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1243
   png_debug(1, "in png_set_compression_method");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1244
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1245
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1246
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1247
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1248
   /* This would produce an invalid PNG file if it worked, but it doesn't and
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1249
    * deflate will fault it, so it is harmless to just warn here.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1250
    */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1251
   if (method != 8)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1252
      png_warning(png_ptr, "Only compression method 8 is supported by PNG");
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1253
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1254
   png_ptr->zlib_method = method;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1255
}
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1256
#endif /* WRITE_CUSTOMIZE_COMPRESSION */
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1257
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1258
/* The following were added to libpng-1.5.4 */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1259
#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1260
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1261
png_set_text_compression_level(png_structrp png_ptr, int level)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1262
{
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1263
   png_debug(1, "in png_set_text_compression_level");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1264
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1265
   if (png_ptr == NULL)
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1266
      return;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1267
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1268
   png_ptr->zlib_text_level = level;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1269
}
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1270
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1271
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1272
png_set_text_compression_mem_level(png_structrp png_ptr, int mem_level)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1273
{
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1274
   png_debug(1, "in png_set_text_compression_mem_level");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1275
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1276
   if (png_ptr == NULL)
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1277
      return;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1278
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1279
   png_ptr->zlib_text_mem_level = mem_level;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1280
}
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1281
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1282
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1283
png_set_text_compression_strategy(png_structrp png_ptr, int strategy)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1284
{
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1285
   png_debug(1, "in png_set_text_compression_strategy");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1286
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1287
   if (png_ptr == NULL)
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1288
      return;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1289
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1290
   png_ptr->zlib_text_strategy = strategy;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1291
}
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1292
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1293
/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1294
 * smaller value of window_bits if it can do so safely.
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1295
 */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1296
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1297
png_set_text_compression_window_bits(png_structrp png_ptr, int window_bits)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1298
{
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1299
   if (png_ptr == NULL)
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1300
      return;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1301
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1302
   if (window_bits > 15)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1303
   {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1304
      png_warning(png_ptr, "Only compression windows <= 32k supported by PNG");
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1305
      window_bits = 15;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1306
   }
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1307
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1308
   else if (window_bits < 8)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1309
   {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1310
      png_warning(png_ptr, "Only compression windows >= 256 supported by PNG");
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1311
      window_bits = 8;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1312
   }
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1313
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1314
   png_ptr->zlib_text_window_bits = window_bits;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1315
}
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1316
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1317
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1318
png_set_text_compression_method(png_structrp png_ptr, int method)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1319
{
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1320
   png_debug(1, "in png_set_text_compression_method");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1321
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1322
   if (png_ptr == NULL)
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1323
      return;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1324
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1325
   if (method != 8)
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1326
      png_warning(png_ptr, "Only compression method 8 is supported by PNG");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1327
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1328
   png_ptr->zlib_text_method = method;
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1329
}
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1330
#endif /* WRITE_CUSTOMIZE_ZTXT_COMPRESSION */
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1331
/* end of API added to libpng-1.5.4 */
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1332
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1333
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1334
png_set_write_status_fn(png_structrp png_ptr, png_write_status_ptr write_row_fn)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1335
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1336
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1337
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1338
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1339
   png_ptr->write_row_fn = write_row_fn;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1340
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1341
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1342
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1343
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1344
png_set_write_user_transform_fn(png_structrp png_ptr, png_user_transform_ptr
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1345
    write_user_transform_fn)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1346
{
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1347
   png_debug(1, "in png_set_write_user_transform_fn");
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1348
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1349
   if (png_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1350
      return;
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1351
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1352
   png_ptr->transformations |= PNG_USER_TRANSFORM;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1353
   png_ptr->write_user_transform_fn = write_user_transform_fn;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1354
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1355
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1356
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1357
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1358
#ifdef PNG_INFO_IMAGE_SUPPORTED
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1359
void PNGAPI
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1360
png_write_png(png_structrp png_ptr, png_inforp info_ptr,
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1361
    int transforms, voidp params)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1362
{
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1363
   if (png_ptr == NULL || info_ptr == NULL)
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1364
      return;
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1365
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1366
   if ((info_ptr->valid & PNG_INFO_IDAT) == 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1367
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1368
      png_app_error(png_ptr, "no rows for png_write_image to write");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1369
      return;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1370
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1371
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1372
   /* Write the file header information. */
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1373
   png_write_info(png_ptr, info_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1374
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1375
   /* ------ these transformations don't touch the info structure ------- */
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1376
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1377
   /* Invert monochrome pixels */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1378
   if ((transforms & PNG_TRANSFORM_INVERT_MONO) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1379
#ifdef PNG_WRITE_INVERT_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1380
      png_set_invert_mono(png_ptr);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1381
#else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1382
      png_app_error(png_ptr, "PNG_TRANSFORM_INVERT_MONO not supported");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1383
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1384
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1385
   /* Shift the pixels up to a legal bit depth and fill in
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1386
    * as appropriate to correctly scale the image.
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1387
    */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1388
   if ((transforms & PNG_TRANSFORM_SHIFT) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1389
#ifdef PNG_WRITE_SHIFT_SUPPORTED
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1390
      if ((info_ptr->valid & PNG_INFO_sBIT) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1391
         png_set_shift(png_ptr, &info_ptr->sig_bit);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1392
#else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1393
      png_app_error(png_ptr, "PNG_TRANSFORM_SHIFT not supported");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1394
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1395
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1396
   /* Pack pixels into bytes */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1397
   if ((transforms & PNG_TRANSFORM_PACKING) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1398
#ifdef PNG_WRITE_PACK_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1399
      png_set_packing(png_ptr);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1400
#else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1401
      png_app_error(png_ptr, "PNG_TRANSFORM_PACKING not supported");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1402
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1403
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1404
   /* Swap location of alpha bytes from ARGB to RGBA */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1405
   if ((transforms & PNG_TRANSFORM_SWAP_ALPHA) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1406
#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1407
      png_set_swap_alpha(png_ptr);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1408
#else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1409
      png_app_error(png_ptr, "PNG_TRANSFORM_SWAP_ALPHA not supported");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1410
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1411
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1412
   /* Remove a filler (X) from XRGB/RGBX/AG/GA into to convert it into
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1413
    * RGB, note that the code expects the input color type to be G or RGB; no
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1414
    * alpha channel.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1415
    */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1416
   if ((transforms & (PNG_TRANSFORM_STRIP_FILLER_AFTER|
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1417
       PNG_TRANSFORM_STRIP_FILLER_BEFORE)) != 0)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1418
   {
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1419
#ifdef PNG_WRITE_FILLER_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1420
      if ((transforms & PNG_TRANSFORM_STRIP_FILLER_AFTER) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1421
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1422
         if ((transforms & PNG_TRANSFORM_STRIP_FILLER_BEFORE) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1423
            png_app_error(png_ptr,
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1424
                "PNG_TRANSFORM_STRIP_FILLER: BEFORE+AFTER not supported");
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1425
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1426
         /* Continue if ignored - this is the pre-1.6.10 behavior */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1427
         png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1428
      }
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1429
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1430
      else if ((transforms & PNG_TRANSFORM_STRIP_FILLER_BEFORE) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1431
         png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1432
#else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1433
      png_app_error(png_ptr, "PNG_TRANSFORM_STRIP_FILLER not supported");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1434
#endif
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1435
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1436
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1437
   /* Flip BGR pixels to RGB */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1438
   if ((transforms & PNG_TRANSFORM_BGR) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1439
#ifdef PNG_WRITE_BGR_SUPPORTED
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1440
      png_set_bgr(png_ptr);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1441
#else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1442
      png_app_error(png_ptr, "PNG_TRANSFORM_BGR not supported");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1443
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1444
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1445
   /* Swap bytes of 16-bit files to most significant byte first */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1446
   if ((transforms & PNG_TRANSFORM_SWAP_ENDIAN) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1447
#ifdef PNG_WRITE_SWAP_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1448
      png_set_swap(png_ptr);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1449
#else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1450
      png_app_error(png_ptr, "PNG_TRANSFORM_SWAP_ENDIAN not supported");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1451
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1452
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1453
   /* Swap bits of 1-bit, 2-bit, 4-bit packed pixel formats */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1454
   if ((transforms & PNG_TRANSFORM_PACKSWAP) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1455
#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1456
      png_set_packswap(png_ptr);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1457
#else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1458
      png_app_error(png_ptr, "PNG_TRANSFORM_PACKSWAP not supported");
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1459
#endif
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1460
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1461
   /* Invert the alpha channel from opacity to transparency */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1462
   if ((transforms & PNG_TRANSFORM_INVERT_ALPHA) != 0)
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1463
#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1464
      png_set_invert_alpha(png_ptr);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1465
#else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1466
      png_app_error(png_ptr, "PNG_TRANSFORM_INVERT_ALPHA not supported");
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1467
#endif
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1468
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1469
   /* ----------------------- end of transformations ------------------- */
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1470
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1471
   /* Write the bits */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1472
   png_write_image(png_ptr, info_ptr->row_pointers);
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1473
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1474
   /* It is REQUIRED to call this to finish writing the rest of the file */
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1475
   png_write_end(png_ptr, info_ptr);
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1476
10576
db3409425573 7088287: libpng need to be updated.
bae
parents: 5506
diff changeset
  1477
   PNG_UNUSED(params)
2
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1478
}
90ce3da70b43 Initial load
duke
parents:
diff changeset
  1479
#endif
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1480
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1481
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1482
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1483
# ifdef PNG_STDIO_SUPPORTED /* currently required for png_image_write_* */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1484
/* Initialize the write structure - general purpose utility. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1485
static int
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1486
png_image_write_init(png_imagep image)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1487
{
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1488
   png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, image,
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1489
       png_safe_error, png_safe_warning);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1490
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1491
   if (png_ptr != NULL)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1492
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1493
      png_infop info_ptr = png_create_info_struct(png_ptr);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1494
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1495
      if (info_ptr != NULL)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1496
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1497
         png_controlp control = png_voidcast(png_controlp,
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1498
             png_malloc_warn(png_ptr, (sizeof *control)));
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1499
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1500
         if (control != NULL)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1501
         {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1502
            memset(control, 0, (sizeof *control));
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1503
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1504
            control->png_ptr = png_ptr;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1505
            control->info_ptr = info_ptr;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1506
            control->for_write = 1;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1507
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1508
            image->opaque = control;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1509
            return 1;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1510
         }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1511
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1512
         /* Error clean up */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1513
         png_destroy_info_struct(png_ptr, &info_ptr);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1514
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1515
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1516
      png_destroy_write_struct(&png_ptr, NULL);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1517
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1518
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1519
   return png_image_error(image, "png_image_write_: out of memory");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1520
}
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1521
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1522
/* Arguments to png_image_write_main: */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1523
typedef struct
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1524
{
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1525
   /* Arguments: */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1526
   png_imagep      image;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1527
   png_const_voidp buffer;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1528
   png_int_32      row_stride;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1529
   png_const_voidp colormap;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1530
   int             convert_to_8bit;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1531
   /* Local variables: */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1532
   png_const_voidp first_row;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1533
   ptrdiff_t       row_bytes;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1534
   png_voidp       local_row;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1535
} png_image_write_control;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1536
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1537
/* Write png_uint_16 input to a 16-bit PNG; the png_ptr has already been set to
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1538
 * do any necessary byte swapping.  The component order is defined by the
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1539
 * png_image format value.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1540
 */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1541
static int
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1542
png_write_image_16bit(png_voidp argument)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1543
{
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1544
   png_image_write_control *display = png_voidcast(png_image_write_control*,
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1545
       argument);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1546
   png_imagep image = display->image;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1547
   png_structrp png_ptr = image->opaque->png_ptr;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1548
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1549
   png_const_uint_16p input_row = png_voidcast(png_const_uint_16p,
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1550
       display->first_row);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1551
   png_uint_16p output_row = png_voidcast(png_uint_16p, display->local_row);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1552
   png_uint_16p row_end;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1553
   const int channels = (image->format & PNG_FORMAT_FLAG_COLOR) != 0 ? 3 : 1;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1554
   int aindex = 0;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1555
   png_uint_32 y = image->height;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1556
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1557
   if ((image->format & PNG_FORMAT_FLAG_ALPHA) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1558
   {
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1559
#   ifdef PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1560
      if ((image->format & PNG_FORMAT_FLAG_AFIRST) != 0)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1561
      {
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1562
         aindex = -1;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1563
         ++input_row; /* To point to the first component */
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1564
         ++output_row;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1565
      }
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1566
         else
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1567
            aindex = channels;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1568
#     else
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1569
         aindex = channels;
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1570
#     endif
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1571
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1572
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1573
   else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1574
      png_error(png_ptr, "png_write_image: internal call error");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1575
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1576
   /* Work out the output row end and count over this, note that the increment
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1577
    * above to 'row' means that row_end can actually be beyond the end of the
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1578
    * row; this is correct.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1579
    */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1580
   row_end = output_row + image->width * (channels+1);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1581
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1582
   while (y-- > 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1583
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1584
      png_const_uint_16p in_ptr = input_row;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1585
      png_uint_16p out_ptr = output_row;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1586
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1587
      while (out_ptr < row_end)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1588
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1589
         const png_uint_16 alpha = in_ptr[aindex];
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1590
         png_uint_32 reciprocal = 0;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1591
         int c;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1592
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1593
         out_ptr[aindex] = alpha;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1594
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1595
         /* Calculate a reciprocal.  The correct calculation is simply
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1596
          * component/alpha*65535 << 15. (I.e. 15 bits of precision); this
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1597
          * allows correct rounding by adding .5 before the shift.  'reciprocal'
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1598
          * is only initialized when required.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1599
          */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1600
         if (alpha > 0 && alpha < 65535)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1601
            reciprocal = ((0xffff<<15)+(alpha>>1))/alpha;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1602
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1603
         c = channels;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1604
         do /* always at least one channel */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1605
         {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1606
            png_uint_16 component = *in_ptr++;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1607
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1608
            /* The following gives 65535 for an alpha of 0, which is fine,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1609
             * otherwise if 0/0 is represented as some other value there is more
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1610
             * likely to be a discontinuity which will probably damage
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1611
             * compression when moving from a fully transparent area to a
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1612
             * nearly transparent one.  (The assumption here is that opaque
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1613
             * areas tend not to be 0 intensity.)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1614
             */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1615
            if (component >= alpha)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1616
               component = 65535;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1617
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1618
            /* component<alpha, so component/alpha is less than one and
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1619
             * component*reciprocal is less than 2^31.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1620
             */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1621
            else if (component > 0 && alpha < 65535)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1622
            {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1623
               png_uint_32 calc = component * reciprocal;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1624
               calc += 16384; /* round to nearest */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1625
               component = (png_uint_16)(calc >> 15);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1626
            }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1627
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1628
            *out_ptr++ = component;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1629
         }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1630
         while (--c > 0);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1631
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1632
         /* Skip to next component (skip the intervening alpha channel) */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1633
         ++in_ptr;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1634
         ++out_ptr;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1635
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1636
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1637
      png_write_row(png_ptr, png_voidcast(png_const_bytep, display->local_row));
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1638
      input_row += display->row_bytes/(sizeof (png_uint_16));
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1639
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1640
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1641
   return 1;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1642
}
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1643
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1644
/* Given 16-bit input (1 to 4 channels) write 8-bit output.  If an alpha channel
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1645
 * is present it must be removed from the components, the components are then
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1646
 * written in sRGB encoding.  No components are added or removed.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1647
 *
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1648
 * Calculate an alpha reciprocal to reverse pre-multiplication.  As above the
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1649
 * calculation can be done to 15 bits of accuracy; however, the output needs to
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1650
 * be scaled in the range 0..255*65535, so include that scaling here.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1651
 */
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1652
#   define UNP_RECIPROCAL(alpha) ((((0xffff*0xff)<<7)+(alpha>>1))/alpha)
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1653
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1654
static png_byte
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1655
png_unpremultiply(png_uint_32 component, png_uint_32 alpha,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1656
   png_uint_32 reciprocal/*from the above macro*/)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1657
{
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1658
   /* The following gives 1.0 for an alpha of 0, which is fine, otherwise if 0/0
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1659
    * is represented as some other value there is more likely to be a
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1660
    * discontinuity which will probably damage compression when moving from a
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1661
    * fully transparent area to a nearly transparent one.  (The assumption here
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1662
    * is that opaque areas tend not to be 0 intensity.)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1663
    *
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1664
    * There is a rounding problem here; if alpha is less than 128 it will end up
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1665
    * as 0 when scaled to 8 bits.  To avoid introducing spurious colors into the
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1666
    * output change for this too.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1667
    */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1668
   if (component >= alpha || alpha < 128)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1669
      return 255;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1670
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1671
   /* component<alpha, so component/alpha is less than one and
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1672
    * component*reciprocal is less than 2^31.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1673
    */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1674
   else if (component > 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1675
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1676
      /* The test is that alpha/257 (rounded) is less than 255, the first value
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1677
       * that becomes 255 is 65407.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1678
       * NOTE: this must agree with the PNG_DIV257 macro (which must, therefore,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1679
       * be exact!)  [Could also test reciprocal != 0]
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1680
       */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1681
      if (alpha < 65407)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1682
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1683
         component *= reciprocal;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1684
         component += 64; /* round to nearest */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1685
         component >>= 7;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1686
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1687
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1688
      else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1689
         component *= 255;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1690
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1691
      /* Convert the component to sRGB. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1692
      return (png_byte)PNG_sRGB_FROM_LINEAR(component);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1693
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1694
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1695
   else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1696
      return 0;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1697
}
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1698
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1699
static int
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1700
png_write_image_8bit(png_voidp argument)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1701
{
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1702
   png_image_write_control *display = png_voidcast(png_image_write_control*,
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1703
       argument);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1704
   png_imagep image = display->image;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1705
   png_structrp png_ptr = image->opaque->png_ptr;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1706
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1707
   png_const_uint_16p input_row = png_voidcast(png_const_uint_16p,
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1708
       display->first_row);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1709
   png_bytep output_row = png_voidcast(png_bytep, display->local_row);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1710
   png_uint_32 y = image->height;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1711
   const int channels = (image->format & PNG_FORMAT_FLAG_COLOR) != 0 ? 3 : 1;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1712
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1713
   if ((image->format & PNG_FORMAT_FLAG_ALPHA) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1714
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1715
      png_bytep row_end;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1716
      int aindex;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1717
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1718
#   ifdef PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1719
      if ((image->format & PNG_FORMAT_FLAG_AFIRST) != 0)
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1720
      {
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1721
         aindex = -1;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1722
         ++input_row; /* To point to the first component */
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1723
         ++output_row;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1724
      }
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1725
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1726
      else
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1727
#   endif
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1728
      aindex = channels;
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1729
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1730
      /* Use row_end in place of a loop counter: */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1731
      row_end = output_row + image->width * (channels+1);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1732
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1733
      while (y-- > 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1734
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1735
         png_const_uint_16p in_ptr = input_row;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1736
         png_bytep out_ptr = output_row;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1737
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1738
         while (out_ptr < row_end)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1739
         {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1740
            png_uint_16 alpha = in_ptr[aindex];
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1741
            png_byte alphabyte = (png_byte)PNG_DIV257(alpha);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1742
            png_uint_32 reciprocal = 0;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1743
            int c;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1744
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1745
            /* Scale and write the alpha channel. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1746
            out_ptr[aindex] = alphabyte;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1747
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1748
            if (alphabyte > 0 && alphabyte < 255)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1749
               reciprocal = UNP_RECIPROCAL(alpha);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1750
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1751
            c = channels;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1752
            do /* always at least one channel */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1753
               *out_ptr++ = png_unpremultiply(*in_ptr++, alpha, reciprocal);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1754
            while (--c > 0);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1755
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1756
            /* Skip to next component (skip the intervening alpha channel) */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1757
            ++in_ptr;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1758
            ++out_ptr;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1759
         } /* while out_ptr < row_end */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1760
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1761
         png_write_row(png_ptr, png_voidcast(png_const_bytep,
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1762
             display->local_row));
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1763
         input_row += display->row_bytes/(sizeof (png_uint_16));
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1764
      } /* while y */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1765
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1766
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1767
   else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1768
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1769
      /* No alpha channel, so the row_end really is the end of the row and it
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1770
       * is sufficient to loop over the components one by one.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1771
       */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1772
      png_bytep row_end = output_row + image->width * channels;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1773
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1774
      while (y-- > 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1775
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1776
         png_const_uint_16p in_ptr = input_row;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1777
         png_bytep out_ptr = output_row;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1778
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1779
         while (out_ptr < row_end)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1780
         {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1781
            png_uint_32 component = *in_ptr++;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1782
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1783
            component *= 255;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1784
            *out_ptr++ = (png_byte)PNG_sRGB_FROM_LINEAR(component);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1785
         }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1786
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1787
         png_write_row(png_ptr, output_row);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1788
         input_row += display->row_bytes/(sizeof (png_uint_16));
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1789
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1790
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1791
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1792
   return 1;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1793
}
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1794
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1795
static void
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1796
png_image_set_PLTE(png_image_write_control *display)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1797
{
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1798
   const png_imagep image = display->image;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1799
   const void *cmap = display->colormap;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1800
   const int entries = image->colormap_entries > 256 ? 256 :
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1801
       (int)image->colormap_entries;
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1802
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1803
   /* NOTE: the caller must check for cmap != NULL and entries != 0 */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1804
   const png_uint_32 format = image->format;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1805
   const int channels = PNG_IMAGE_SAMPLE_CHANNELS(format);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1806
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1807
#   if defined(PNG_FORMAT_BGR_SUPPORTED) &&\
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1808
      defined(PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1809
      const int afirst = (format & PNG_FORMAT_FLAG_AFIRST) != 0 &&
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1810
          (format & PNG_FORMAT_FLAG_ALPHA) != 0;
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1811
#   else
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1812
#     define afirst 0
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1813
#   endif
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1814
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1815
#   ifdef PNG_FORMAT_BGR_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1816
      const int bgr = (format & PNG_FORMAT_FLAG_BGR) != 0 ? 2 : 0;
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1817
#   else
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1818
#     define bgr 0
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1819
#   endif
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1820
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1821
   int i, num_trans;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1822
   png_color palette[256];
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1823
   png_byte tRNS[256];
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1824
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1825
   memset(tRNS, 255, (sizeof tRNS));
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1826
   memset(palette, 0, (sizeof palette));
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1827
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1828
   for (i=num_trans=0; i<entries; ++i)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1829
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1830
      /* This gets automatically converted to sRGB with reversal of the
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1831
       * pre-multiplication if the color-map has an alpha channel.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1832
       */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1833
      if ((format & PNG_FORMAT_FLAG_LINEAR) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1834
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1835
         png_const_uint_16p entry = png_voidcast(png_const_uint_16p, cmap);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1836
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1837
         entry += i * channels;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1838
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1839
         if ((channels & 1) != 0) /* no alpha */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1840
         {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1841
            if (channels >= 3) /* RGB */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1842
            {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1843
               palette[i].blue = (png_byte)PNG_sRGB_FROM_LINEAR(255 *
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1844
                   entry[(2 ^ bgr)]);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1845
               palette[i].green = (png_byte)PNG_sRGB_FROM_LINEAR(255 *
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1846
                   entry[1]);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1847
               palette[i].red = (png_byte)PNG_sRGB_FROM_LINEAR(255 *
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1848
                   entry[bgr]);
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1849
            }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1850
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1851
            else /* Gray */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1852
               palette[i].blue = palette[i].red = palette[i].green =
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1853
                  (png_byte)PNG_sRGB_FROM_LINEAR(255 * *entry);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1854
         }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1855
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1856
         else /* alpha */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1857
         {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1858
            png_uint_16 alpha = entry[afirst ? 0 : channels-1];
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1859
            png_byte alphabyte = (png_byte)PNG_DIV257(alpha);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1860
            png_uint_32 reciprocal = 0;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1861
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1862
            /* Calculate a reciprocal, as in the png_write_image_8bit code above
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1863
             * this is designed to produce a value scaled to 255*65535 when
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1864
             * divided by 128 (i.e. asr 7).
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1865
             */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1866
            if (alphabyte > 0 && alphabyte < 255)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1867
               reciprocal = (((0xffff*0xff)<<7)+(alpha>>1))/alpha;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1868
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1869
            tRNS[i] = alphabyte;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1870
            if (alphabyte < 255)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1871
               num_trans = i+1;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1872
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1873
            if (channels >= 3) /* RGB */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1874
            {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1875
               palette[i].blue = png_unpremultiply(entry[afirst + (2 ^ bgr)],
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1876
                  alpha, reciprocal);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1877
               palette[i].green = png_unpremultiply(entry[afirst + 1], alpha,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1878
                  reciprocal);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1879
               palette[i].red = png_unpremultiply(entry[afirst + bgr], alpha,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1880
                  reciprocal);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1881
            }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1882
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1883
            else /* gray */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1884
               palette[i].blue = palette[i].red = palette[i].green =
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1885
                  png_unpremultiply(entry[afirst], alpha, reciprocal);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1886
         }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1887
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1888
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1889
      else /* Color-map has sRGB values */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1890
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1891
         png_const_bytep entry = png_voidcast(png_const_bytep, cmap);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1892
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1893
         entry += i * channels;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1894
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1895
         switch (channels)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1896
         {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1897
            case 4:
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1898
               tRNS[i] = entry[afirst ? 0 : 3];
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1899
               if (tRNS[i] < 255)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1900
                  num_trans = i+1;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1901
               /* FALL THROUGH */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1902
            case 3:
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1903
               palette[i].blue = entry[afirst + (2 ^ bgr)];
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1904
               palette[i].green = entry[afirst + 1];
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1905
               palette[i].red = entry[afirst + bgr];
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1906
               break;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1907
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1908
            case 2:
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1909
               tRNS[i] = entry[1 ^ afirst];
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1910
               if (tRNS[i] < 255)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1911
                  num_trans = i+1;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1912
               /* FALL THROUGH */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1913
            case 1:
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1914
               palette[i].blue = palette[i].red = palette[i].green =
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1915
                  entry[afirst];
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1916
               break;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1917
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1918
            default:
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1919
               break;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1920
         }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1921
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1922
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1923
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1924
#   ifdef afirst
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1925
#     undef afirst
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1926
#   endif
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1927
#   ifdef bgr
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1928
#     undef bgr
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1929
#   endif
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1930
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1931
   png_set_PLTE(image->opaque->png_ptr, image->opaque->info_ptr, palette,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1932
      entries);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1933
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1934
   if (num_trans > 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1935
      png_set_tRNS(image->opaque->png_ptr, image->opaque->info_ptr, tRNS,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1936
         num_trans, NULL);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1937
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1938
   image->colormap_entries = entries;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1939
}
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1940
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1941
static int
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1942
png_image_write_main(png_voidp argument)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1943
{
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1944
   png_image_write_control *display = png_voidcast(png_image_write_control*,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1945
      argument);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1946
   png_imagep image = display->image;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1947
   png_structrp png_ptr = image->opaque->png_ptr;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1948
   png_inforp info_ptr = image->opaque->info_ptr;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1949
   png_uint_32 format = image->format;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1950
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1951
   /* The following four ints are actually booleans */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1952
   int colormap = (format & PNG_FORMAT_FLAG_COLORMAP);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1953
   int linear = !colormap && (format & PNG_FORMAT_FLAG_LINEAR); /* input */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1954
   int alpha = !colormap && (format & PNG_FORMAT_FLAG_ALPHA);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1955
   int write_16bit = linear && !colormap && (display->convert_to_8bit == 0);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1956
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1957
#   ifdef PNG_BENIGN_ERRORS_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1958
      /* Make sure we error out on any bad situation */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1959
      png_set_benign_errors(png_ptr, 0/*error*/);
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  1960
#   endif
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1961
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1962
   /* Default the 'row_stride' parameter if required. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1963
   if (display->row_stride == 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1964
      display->row_stride = PNG_IMAGE_ROW_STRIDE(*image);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1965
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1966
   /* Set the required transforms then write the rows in the correct order. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1967
   if ((format & PNG_FORMAT_FLAG_COLORMAP) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1968
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1969
      if (display->colormap != NULL && image->colormap_entries > 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1970
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1971
         png_uint_32 entries = image->colormap_entries;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1972
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1973
         png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1974
            entries > 16 ? 8 : (entries > 4 ? 4 : (entries > 2 ? 2 : 1)),
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1975
            PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1976
            PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1977
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1978
         png_image_set_PLTE(display);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1979
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1980
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1981
      else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1982
         png_error(image->opaque->png_ptr,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1983
            "no color-map for color-mapped image");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1984
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1985
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1986
   else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1987
      png_set_IHDR(png_ptr, info_ptr, image->width, image->height,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1988
         write_16bit ? 16 : 8,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1989
         ((format & PNG_FORMAT_FLAG_COLOR) ? PNG_COLOR_MASK_COLOR : 0) +
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1990
         ((format & PNG_FORMAT_FLAG_ALPHA) ? PNG_COLOR_MASK_ALPHA : 0),
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1991
         PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1992
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1993
   /* Counter-intuitively the data transformations must be called *after*
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1994
    * png_write_info, not before as in the read code, but the 'set' functions
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1995
    * must still be called before.  Just set the color space information, never
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1996
    * write an interlaced image.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1997
    */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1998
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  1999
   if (write_16bit != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2000
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2001
      /* The gamma here is 1.0 (linear) and the cHRM chunk matches sRGB. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2002
      png_set_gAMA_fixed(png_ptr, info_ptr, PNG_GAMMA_LINEAR);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2003
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2004
      if ((image->flags & PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB) == 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2005
         png_set_cHRM_fixed(png_ptr, info_ptr,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2006
            /* color      x       y */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2007
            /* white */ 31270, 32900,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2008
            /* red   */ 64000, 33000,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2009
            /* green */ 30000, 60000,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2010
            /* blue  */ 15000,  6000
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2011
         );
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2012
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2013
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2014
   else if ((image->flags & PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB) == 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2015
      png_set_sRGB(png_ptr, info_ptr, PNG_sRGB_INTENT_PERCEPTUAL);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2016
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2017
   /* Else writing an 8-bit file and the *colors* aren't sRGB, but the 8-bit
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2018
    * space must still be gamma encoded.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2019
    */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2020
   else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2021
      png_set_gAMA_fixed(png_ptr, info_ptr, PNG_GAMMA_sRGB_INVERSE);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2022
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2023
   /* Write the file header. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2024
   png_write_info(png_ptr, info_ptr);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2025
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2026
   /* Now set up the data transformations (*after* the header is written),
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2027
    * remove the handled transformations from the 'format' flags for checking.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2028
    *
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  2029
    * First check for a little endian system if writing 16-bit files.
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2030
    */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2031
   if (write_16bit != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2032
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2033
      PNG_CONST png_uint_16 le = 0x0001;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2034
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2035
      if ((*(png_const_bytep) & le) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2036
         png_set_swap(png_ptr);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2037
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2038
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  2039
#   ifdef PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2040
      if ((format & PNG_FORMAT_FLAG_BGR) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2041
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2042
         if (colormap == 0 && (format & PNG_FORMAT_FLAG_COLOR) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2043
            png_set_bgr(png_ptr);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2044
         format &= ~PNG_FORMAT_FLAG_BGR;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2045
      }
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  2046
#   endif
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2047
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  2048
#   ifdef PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2049
      if ((format & PNG_FORMAT_FLAG_AFIRST) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2050
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2051
         if (colormap == 0 && (format & PNG_FORMAT_FLAG_ALPHA) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2052
            png_set_swap_alpha(png_ptr);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2053
         format &= ~PNG_FORMAT_FLAG_AFIRST;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2054
      }
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  2055
#   endif
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2056
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2057
   /* If there are 16 or fewer color-map entries we wrote a lower bit depth
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2058
    * above, but the application data is still byte packed.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2059
    */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2060
   if (colormap != 0 && image->colormap_entries <= 16)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2061
      png_set_packing(png_ptr);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2062
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2063
   /* That should have handled all (both) the transforms. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2064
   if ((format & ~(png_uint_32)(PNG_FORMAT_FLAG_COLOR | PNG_FORMAT_FLAG_LINEAR |
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2065
         PNG_FORMAT_FLAG_ALPHA | PNG_FORMAT_FLAG_COLORMAP)) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2066
      png_error(png_ptr, "png_write_image: unsupported transformation");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2067
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2068
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2069
      png_const_bytep row = png_voidcast(png_const_bytep, display->buffer);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2070
      ptrdiff_t row_bytes = display->row_stride;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2071
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2072
      if (linear != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2073
         row_bytes *= (sizeof (png_uint_16));
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2074
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2075
      if (row_bytes < 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2076
         row += (image->height-1) * (-row_bytes);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2077
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2078
      display->first_row = row;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2079
      display->row_bytes = row_bytes;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2080
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2081
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2082
   /* Apply 'fast' options if the flag is set. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2083
   if ((image->flags & PNG_IMAGE_FLAG_FAST) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2084
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2085
      png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE, PNG_NO_FILTERS);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2086
      /* NOTE: determined by experiment using pngstest, this reflects some
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2087
       * balance between the time to write the image once and the time to read
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2088
       * it about 50 times.  The speed-up in pngstest was about 10-20% of the
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2089
       * total (user) time on a heavily loaded system.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2090
       */
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  2091
#   ifdef PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2092
      png_set_compression_level(png_ptr, 3);
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  2093
#   endif
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2094
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2095
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2096
   /* Check for the cases that currently require a pre-transform on the row
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2097
    * before it is written.  This only applies when the input is 16-bit and
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2098
    * either there is an alpha channel or it is converted to 8-bit.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2099
    */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2100
   if ((linear != 0 && alpha != 0 ) ||
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2101
       (colormap == 0 && display->convert_to_8bit != 0))
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2102
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2103
      png_bytep row = png_voidcast(png_bytep, png_malloc(png_ptr,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2104
         png_get_rowbytes(png_ptr, info_ptr)));
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2105
      int result;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2106
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2107
      display->local_row = row;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2108
      if (write_16bit != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2109
         result = png_safe_execute(image, png_write_image_16bit, display);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2110
      else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2111
         result = png_safe_execute(image, png_write_image_8bit, display);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2112
      display->local_row = NULL;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2113
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2114
      png_free(png_ptr, row);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2115
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2116
      /* Skip the 'write_end' on error: */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2117
      if (result == 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2118
         return 0;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2119
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2120
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2121
   /* Otherwise this is the case where the input is in a format currently
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2122
    * supported by the rest of the libpng write code; call it directly.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2123
    */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2124
   else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2125
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2126
      png_const_bytep row = png_voidcast(png_const_bytep, display->first_row);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2127
      ptrdiff_t row_bytes = display->row_bytes;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2128
      png_uint_32 y = image->height;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2129
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2130
      while (y-- > 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2131
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2132
         png_write_row(png_ptr, row);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2133
         row += row_bytes;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2134
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2135
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2136
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2137
   png_write_end(png_ptr, info_ptr);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2138
   return 1;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2139
}
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2140
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2141
int PNGAPI
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2142
png_image_write_to_stdio(png_imagep image, FILE *file, int convert_to_8bit,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2143
   const void *buffer, png_int_32 row_stride, const void *colormap)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2144
{
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2145
   /* Write the image to the given (FILE*). */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2146
   if (image != NULL && image->version == PNG_IMAGE_VERSION)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2147
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2148
      if (file != NULL)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2149
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2150
         if (png_image_write_init(image) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2151
         {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2152
            png_image_write_control display;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2153
            int result;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2154
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2155
            /* This is slightly evil, but png_init_io doesn't do anything other
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2156
             * than this and we haven't changed the standard IO functions so
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2157
             * this saves a 'safe' function.
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2158
             */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2159
            image->opaque->png_ptr->io_ptr = file;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2160
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2161
            memset(&display, 0, (sizeof display));
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2162
            display.image = image;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2163
            display.buffer = buffer;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2164
            display.row_stride = row_stride;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2165
            display.colormap = colormap;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2166
            display.convert_to_8bit = convert_to_8bit;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2167
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2168
            result = png_safe_execute(image, png_image_write_main, &display);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2169
            png_image_free(image);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2170
            return result;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2171
         }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2172
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2173
         else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2174
            return 0;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2175
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2176
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2177
      else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2178
         return png_image_error(image,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2179
            "png_image_write_to_stdio: invalid argument");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2180
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2181
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2182
   else if (image != NULL)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2183
      return png_image_error(image,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2184
         "png_image_write_to_stdio: incorrect PNG_IMAGE_VERSION");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2185
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2186
   else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2187
      return 0;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2188
}
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2189
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2190
int PNGAPI
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2191
png_image_write_to_file(png_imagep image, const char *file_name,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2192
   int convert_to_8bit, const void *buffer, png_int_32 row_stride,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2193
   const void *colormap)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2194
{
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2195
   /* Write the image to the named file. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2196
   if (image != NULL && image->version == PNG_IMAGE_VERSION)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2197
   {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2198
      if (file_name != NULL)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2199
      {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2200
         FILE *fp = fopen(file_name, "wb");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2201
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2202
         if (fp != NULL)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2203
         {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2204
            if (png_image_write_to_stdio(image, fp, convert_to_8bit, buffer,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2205
               row_stride, colormap) != 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2206
            {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2207
               int error; /* from fflush/fclose */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2208
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2209
               /* Make sure the file is flushed correctly. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2210
               if (fflush(fp) == 0 && ferror(fp) == 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2211
               {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2212
                  if (fclose(fp) == 0)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2213
                     return 1;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2214
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2215
                  error = errno; /* from fclose */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2216
               }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2217
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2218
               else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2219
               {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2220
                  error = errno; /* from fflush or ferror */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2221
                  (void)fclose(fp);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2222
               }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2223
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2224
               (void)remove(file_name);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2225
               /* The image has already been cleaned up; this is just used to
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2226
                * set the error (because the original write succeeded).
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2227
                */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2228
               return png_image_error(image, strerror(error));
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2229
            }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2230
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2231
            else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2232
            {
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2233
               /* Clean up: just the opened file. */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2234
               (void)fclose(fp);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2235
               (void)remove(file_name);
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2236
               return 0;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2237
            }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2238
         }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2239
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2240
         else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2241
            return png_image_error(image, strerror(errno));
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2242
      }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2243
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2244
      else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2245
         return png_image_error(image,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2246
            "png_image_write_to_file: invalid argument");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2247
   }
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2248
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2249
   else if (image != NULL)
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2250
      return png_image_error(image,
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2251
         "png_image_write_to_file: incorrect PNG_IMAGE_VERSION");
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2252
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2253
   else
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2254
      return 0;
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2255
}
35296
659e92aaf7f4 8143941: Update splashscreen displays
azvegint
parents: 29913
diff changeset
  2256
# endif /* STDIO */
29913
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2257
#endif /* SIMPLIFIED_WRITE */
95258013e132 8069198: Upgrade image library
azvegint
parents: 25859
diff changeset
  2258
#endif /* WRITE */