~ubuntu-branches/debian/sid/gdal/sid

« back to all changes in this revision

Viewing changes to frmts/png/libpng/pngtrans.c

  • Committer: Package Import Robot
  • Author(s): Francesco Paolo Lovergine
  • Date: 2012-05-07 15:04:42 UTC
  • mfrom: (5.5.16 experimental)
  • Revision ID: package-import@ubuntu.com-20120507150442-2eks97loeh6rq005
Tags: 1.9.0-1
* Ready for sid, starting transition.
* All symfiles updated to latest builds.
* Added dh_numpy call in debian/rules to depend on numpy ABI.
* Policy bumped to 3.9.3, no changes required.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
 
2
2
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
3
3
 *
4
 
 * Last changed in libpng 1.2.30 [August 15, 2008]
5
 
 * For conditions of distribution and use, see copyright notice in png.h
6
 
 * Copyright (c) 1998-2008 Glenn Randers-Pehrson
 
4
 * Last changed in libpng 1.2.41 [December 3, 2009]
 
5
 * Copyright (c) 1998-2009 Glenn Randers-Pehrson
7
6
 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
8
7
 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
 
8
 *
 
9
 * This code is released under the libpng license.
 
10
 * For conditions of distribution and use, see the disclaimer
 
11
 * and license in png.h
9
12
 */
10
13
 
11
14
#define PNG_INTERNAL
 
15
#define PNG_NO_PEDANTIC_WARNINGS
12
16
#include "png.h"
13
17
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
14
18
 
15
19
#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
16
 
/* turn on BGR-to-RGB mapping */
 
20
/* Turn on BGR-to-RGB mapping */
17
21
void PNGAPI
18
22
png_set_bgr(png_structp png_ptr)
19
23
{
20
24
   png_debug(1, "in png_set_bgr");
21
 
   if (png_ptr == NULL) return;
 
25
 
 
26
   if (png_ptr == NULL)
 
27
      return;
22
28
   png_ptr->transformations |= PNG_BGR;
23
29
}
24
30
#endif
25
31
 
26
32
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
27
 
/* turn on 16 bit byte swapping */
 
33
/* Turn on 16 bit byte swapping */
28
34
void PNGAPI
29
35
png_set_swap(png_structp png_ptr)
30
36
{
31
37
   png_debug(1, "in png_set_swap");
32
 
   if (png_ptr == NULL) return;
 
38
 
 
39
   if (png_ptr == NULL)
 
40
      return;
33
41
   if (png_ptr->bit_depth == 16)
34
42
      png_ptr->transformations |= PNG_SWAP_BYTES;
35
43
}
36
44
#endif
37
45
 
38
46
#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
39
 
/* turn on pixel packing */
 
47
/* Turn on pixel packing */
40
48
void PNGAPI
41
49
png_set_packing(png_structp png_ptr)
42
50
{
43
51
   png_debug(1, "in png_set_packing");
44
 
   if (png_ptr == NULL) return;
 
52
 
 
53
   if (png_ptr == NULL)
 
54
      return;
45
55
   if (png_ptr->bit_depth < 8)
46
56
   {
47
57
      png_ptr->transformations |= PNG_PACK;
51
61
#endif
52
62
 
53
63
#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
54
 
/* turn on packed pixel swapping */
 
64
/* Turn on packed pixel swapping */
55
65
void PNGAPI
56
66
png_set_packswap(png_structp png_ptr)
57
67
{
58
68
   png_debug(1, "in png_set_packswap");
59
 
   if (png_ptr == NULL) return;
 
69
 
 
70
   if (png_ptr == NULL)
 
71
      return;
60
72
   if (png_ptr->bit_depth < 8)
61
73
      png_ptr->transformations |= PNG_PACKSWAP;
62
74
}
67
79
png_set_shift(png_structp png_ptr, png_color_8p true_bits)
68
80
{
69
81
   png_debug(1, "in png_set_shift");
70
 
   if (png_ptr == NULL) return;
 
82
 
 
83
   if (png_ptr == NULL)
 
84
      return;
71
85
   png_ptr->transformations |= PNG_SHIFT;
72
86
   png_ptr->shift = *true_bits;
73
87
}
79
93
png_set_interlace_handling(png_structp png_ptr)
80
94
{
81
95
   png_debug(1, "in png_set_interlace handling");
 
96
 
82
97
   if (png_ptr && png_ptr->interlaced)
83
98
   {
84
99
      png_ptr->transformations |= PNG_INTERLACE;
99
114
png_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc)
100
115
{
101
116
   png_debug(1, "in png_set_filler");
102
 
   if (png_ptr == NULL) return;
 
117
 
 
118
   if (png_ptr == NULL)
 
119
      return;
103
120
   png_ptr->transformations |= PNG_FILLER;
 
121
#ifdef PNG_LEGACY_SUPPORTED
104
122
   png_ptr->filler = (png_byte)filler;
 
123
#else
 
124
   png_ptr->filler = (png_uint_16)filler;
 
125
#endif
105
126
   if (filler_loc == PNG_FILLER_AFTER)
106
127
      png_ptr->flags |= PNG_FLAG_FILLER_AFTER;
107
128
   else
126
147
   }
127
148
}
128
149
 
129
 
#if !defined(PNG_1_0_X)
 
150
#ifndef PNG_1_0_X
130
151
/* Added to libpng-1.2.7 */
131
152
void PNGAPI
132
153
png_set_add_alpha(png_structp png_ptr, png_uint_32 filler, int filler_loc)
133
154
{
134
155
   png_debug(1, "in png_set_add_alpha");
135
 
   if (png_ptr == NULL) return;
 
156
 
 
157
   if (png_ptr == NULL)
 
158
      return;
136
159
   png_set_filler(png_ptr, filler, filler_loc);
137
160
   png_ptr->transformations |= PNG_ADD_ALPHA;
138
161
}
146
169
png_set_swap_alpha(png_structp png_ptr)
147
170
{
148
171
   png_debug(1, "in png_set_swap_alpha");
149
 
   if (png_ptr == NULL) return;
 
172
 
 
173
   if (png_ptr == NULL)
 
174
      return;
150
175
   png_ptr->transformations |= PNG_SWAP_ALPHA;
151
176
}
152
177
#endif
157
182
png_set_invert_alpha(png_structp png_ptr)
158
183
{
159
184
   png_debug(1, "in png_set_invert_alpha");
160
 
   if (png_ptr == NULL) return;
 
185
 
 
186
   if (png_ptr == NULL)
 
187
      return;
161
188
   png_ptr->transformations |= PNG_INVERT_ALPHA;
162
189
}
163
190
#endif
167
194
png_set_invert_mono(png_structp png_ptr)
168
195
{
169
196
   png_debug(1, "in png_set_invert_mono");
170
 
   if (png_ptr == NULL) return;
 
197
 
 
198
   if (png_ptr == NULL)
 
199
      return;
171
200
   png_ptr->transformations |= PNG_INVERT_MONO;
172
201
}
173
202
 
174
 
/* invert monochrome grayscale data */
 
203
/* Invert monochrome grayscale data */
175
204
void /* PRIVATE */
176
205
png_do_invert(png_row_infop row_info, png_bytep row)
177
206
{
178
207
   png_debug(1, "in png_do_invert");
 
208
 
179
209
  /* This test removed from libpng version 1.0.13 and 1.2.0:
180
210
   *   if (row_info->bit_depth == 1 &&
181
211
   */
182
 
#if defined(PNG_USELESS_TESTS_SUPPORTED)
 
212
#ifdef PNG_USELESS_TESTS_SUPPORTED
183
213
   if (row == NULL || row_info == NULL)
184
214
     return;
185
215
#endif
226
256
#endif
227
257
 
228
258
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
229
 
/* swaps byte order on 16 bit depth images */
 
259
/* Swaps byte order on 16 bit depth images */
230
260
void /* PRIVATE */
231
261
png_do_swap(png_row_infop row_info, png_bytep row)
232
262
{
233
263
   png_debug(1, "in png_do_swap");
 
264
 
234
265
   if (
235
 
#if defined(PNG_USELESS_TESTS_SUPPORTED)
 
266
#ifdef PNG_USELESS_TESTS_SUPPORTED
236
267
       row != NULL && row_info != NULL &&
237
268
#endif
238
269
       row_info->bit_depth == 16)
357
388
   0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF
358
389
};
359
390
 
360
 
/* swaps pixel packing order within bytes */
 
391
/* Swaps pixel packing order within bytes */
361
392
void /* PRIVATE */
362
393
png_do_packswap(png_row_infop row_info, png_bytep row)
363
394
{
364
395
   png_debug(1, "in png_do_packswap");
 
396
 
365
397
   if (
366
 
#if defined(PNG_USELESS_TESTS_SUPPORTED)
 
398
#ifdef PNG_USELESS_TESTS_SUPPORTED
367
399
       row != NULL && row_info != NULL &&
368
400
#endif
369
401
       row_info->bit_depth < 8)
389
421
 
390
422
#if defined(PNG_WRITE_FILLER_SUPPORTED) || \
391
423
    defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
392
 
/* remove filler or alpha byte(s) */
 
424
/* Remove filler or alpha byte(s) */
393
425
void /* PRIVATE */
394
426
png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
395
427
{
396
428
   png_debug(1, "in png_do_strip_filler");
397
 
#if defined(PNG_USELESS_TESTS_SUPPORTED)
 
429
 
 
430
#ifdef PNG_USELESS_TESTS_SUPPORTED
398
431
   if (row != NULL && row_info != NULL)
399
432
#endif
400
433
   {
404
437
      png_uint_32 i;
405
438
 
406
439
      if ((row_info->color_type == PNG_COLOR_TYPE_RGB ||
407
 
         (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA &&
408
 
         (flags & PNG_FLAG_STRIP_ALPHA))) &&
409
 
         row_info->channels == 4)
 
440
          (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA &&
 
441
          (flags & PNG_FLAG_STRIP_ALPHA))) &&
 
442
          row_info->channels == 4)
410
443
      {
411
444
         if (row_info->bit_depth == 8)
412
445
         {
547
580
#endif
548
581
 
549
582
#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
550
 
/* swaps red and blue bytes within a pixel */
 
583
/* Swaps red and blue bytes within a pixel */
551
584
void /* PRIVATE */
552
585
png_do_bgr(png_row_infop row_info, png_bytep row)
553
586
{
554
587
   png_debug(1, "in png_do_bgr");
 
588
 
555
589
   if (
556
 
#if defined(PNG_USELESS_TESTS_SUPPORTED)
 
590
#ifdef PNG_USELESS_TESTS_SUPPORTED
557
591
       row != NULL && row_info != NULL &&
558
592
#endif
559
593
       (row_info->color_type & PNG_COLOR_MASK_COLOR))
624
658
#endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */
625
659
 
626
660
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
627
 
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
628
 
    defined(PNG_LEGACY_SUPPORTED)
 
661
    defined(PNG_LEGACY_SUPPORTED) || \
 
662
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
629
663
void PNGAPI
630
664
png_set_user_transform_info(png_structp png_ptr, png_voidp
631
665
   user_transform_ptr, int user_transform_depth, int user_transform_channels)
632
666
{
633
667
   png_debug(1, "in png_set_user_transform_info");
634
 
   if (png_ptr == NULL) return;
635
 
#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
 
668
 
 
669
   if (png_ptr == NULL)
 
670
      return;
 
671
#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
636
672
   png_ptr->user_transform_ptr = user_transform_ptr;
637
673
   png_ptr->user_transform_depth = (png_byte)user_transform_depth;
638
674
   png_ptr->user_transform_channels = (png_byte)user_transform_channels;
652
688
png_voidp PNGAPI
653
689
png_get_user_transform_ptr(png_structp png_ptr)
654
690
{
655
 
   if (png_ptr == NULL) return (NULL);
656
 
#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
 
691
   if (png_ptr == NULL)
 
692
      return (NULL);
 
693
#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
657
694
   return ((png_voidp)png_ptr->user_transform_ptr);
658
695
#else
659
696
   return (NULL);