Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1897 serge 1
 
2
 *
3
 * Last changed in libpng 1.5.1 [February 3, 2011]
4
 * Copyright (c) 1998-2011 Glenn Randers-Pehrson
5
 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
6
 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
7
 *
8
 * This code is released under the libpng license.
9
 * For conditions of distribution and use, see the disclaimer
10
 * and license in png.h
11
 */
12
13
 
14
15
 
16
17
 
18
/* Turn on BGR-to-RGB mapping */
19
void PNGAPI
20
png_set_bgr(png_structp png_ptr)
21
{
22
   png_debug(1, "in png_set_bgr");
23
24
 
25
      return;
26
27
 
28
}
29
#endif
30
31
 
32
/* Turn on 16 bit byte swapping */
33
void PNGAPI
34
png_set_swap(png_structp png_ptr)
35
{
36
   png_debug(1, "in png_set_swap");
37
38
 
39
      return;
40
41
 
42
      png_ptr->transformations |= PNG_SWAP_BYTES;
43
}
44
#endif
45
46
 
47
/* Turn on pixel packing */
48
void PNGAPI
49
png_set_packing(png_structp png_ptr)
50
{
51
   png_debug(1, "in png_set_packing");
52
53
 
54
      return;
55
56
 
57
   {
58
      png_ptr->transformations |= PNG_PACK;
59
      png_ptr->usr_bit_depth = 8;
60
   }
61
}
62
#endif
63
64
 
65
/* Turn on packed pixel swapping */
66
void PNGAPI
67
png_set_packswap(png_structp png_ptr)
68
{
69
   png_debug(1, "in png_set_packswap");
70
71
 
72
      return;
73
74
 
75
      png_ptr->transformations |= PNG_PACKSWAP;
76
}
77
#endif
78
79
 
80
void PNGAPI
81
png_set_shift(png_structp png_ptr, png_const_color_8p true_bits)
82
{
83
   png_debug(1, "in png_set_shift");
84
85
 
86
      return;
87
88
 
89
   png_ptr->shift = *true_bits;
90
}
91
#endif
92
93
 
94
    defined(PNG_WRITE_INTERLACING_SUPPORTED)
95
int PNGAPI
96
png_set_interlace_handling(png_structp png_ptr)
97
{
98
   png_debug(1, "in png_set_interlace handling");
99
100
 
101
   {
102
      png_ptr->transformations |= PNG_INTERLACE;
103
      return (7);
104
   }
105
106
 
107
}
108
#endif
109
110
 
111
/* Add a filler byte on read, or remove a filler or alpha byte on write.
112
 * The filler type has changed in v0.95 to allow future 2-byte fillers
113
 * for 48-bit input data, as well as to avoid problems with some compilers
114
 * that don't like bytes as parameters.
115
 */
116
void PNGAPI
117
png_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc)
118
{
119
   png_debug(1, "in png_set_filler");
120
121
 
122
      return;
123
124
 
125
   png_ptr->filler = (png_uint_16)filler;
126
127
 
128
      png_ptr->flags |= PNG_FLAG_FILLER_AFTER;
129
130
 
131
      png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER;
132
133
 
134
    * I attempted to do that in libpng-1.0.1a but that caused problems
135
    * so I restored it in libpng-1.0.2a
136
   */
137
138
 
139
   {
140
      png_ptr->usr_channels = 4;
141
   }
142
143
 
144
    * a less-than-8-bit grayscale to GA?) */
145
146
 
147
   {
148
      png_ptr->usr_channels = 2;
149
   }
150
}
151
152
 
153
void PNGAPI
154
png_set_add_alpha(png_structp png_ptr, png_uint_32 filler, int filler_loc)
155
{
156
   png_debug(1, "in png_set_add_alpha");
157
158
 
159
      return;
160
161
 
162
   png_ptr->transformations |= PNG_ADD_ALPHA;
163
}
164
165
 
166
167
 
168
    defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
169
void PNGAPI
170
png_set_swap_alpha(png_structp png_ptr)
171
{
172
   png_debug(1, "in png_set_swap_alpha");
173
174
 
175
      return;
176
177
 
178
}
179
#endif
180
181
 
182
    defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
183
void PNGAPI
184
png_set_invert_alpha(png_structp png_ptr)
185
{
186
   png_debug(1, "in png_set_invert_alpha");
187
188
 
189
      return;
190
191
 
192
}
193
#endif
194
195
 
196
void PNGAPI
197
png_set_invert_mono(png_structp png_ptr)
198
{
199
   png_debug(1, "in png_set_invert_mono");
200
201
 
202
      return;
203
204
 
205
}
206
207
 
208
void /* PRIVATE */
209
png_do_invert(png_row_infop row_info, png_bytep row)
210
{
211
   png_debug(1, "in png_do_invert");
212
213
 
214
   *   if (row_info->bit_depth == 1 &&
215
   */
216
   if (row_info->color_type == PNG_COLOR_TYPE_GRAY)
217
   {
218
      png_bytep rp = row;
219
      png_size_t i;
220
      png_size_t istop = row_info->rowbytes;
221
222
 
223
      {
224
         *rp = (png_byte)(~(*rp));
225
         rp++;
226
      }
227
   }
228
229
 
230
      row_info->bit_depth == 8)
231
   {
232
      png_bytep rp = row;
233
      png_size_t i;
234
      png_size_t istop = row_info->rowbytes;
235
236
 
237
      {
238
         *rp = (png_byte)(~(*rp));
239
         rp += 2;
240
      }
241
   }
242
243
 
244
   else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
245
      row_info->bit_depth == 16)
246
   {
247
      png_bytep rp = row;
248
      png_size_t i;
249
      png_size_t istop = row_info->rowbytes;
250
251
 
252
      {
253
         *rp = (png_byte)(~(*rp));
254
         *(rp + 1) = (png_byte)(~(*(rp + 1)));
255
         rp += 4;
256
      }
257
   }
258
#endif
259
}
260
#endif
261
262
 
263
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
264
/* Swaps byte order on 16 bit depth images */
265
void /* PRIVATE */
266
png_do_swap(png_row_infop row_info, png_bytep row)
267
{
268
   png_debug(1, "in png_do_swap");
269
270
 
271
   {
272
      png_bytep rp = row;
273
      png_uint_32 i;
274
      png_uint_32 istop= row_info->width * row_info->channels;
275
276
 
277
      {
278
         png_byte t = *rp;
279
         *rp = *(rp + 1);
280
         *(rp + 1) = t;
281
      }
282
   }
283
}
284
#endif
285
#endif
286
287
 
288
static PNG_CONST png_byte onebppswaptable[256] = {
289
   0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
290
   0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
291
   0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
292
   0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
293
   0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
294
   0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
295
   0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
296
   0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
297
   0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
298
   0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
299
   0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
300
   0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
301
   0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
302
   0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
303
   0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
304
   0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
305
   0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
306
   0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
307
   0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
308
   0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
309
   0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
310
   0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
311
   0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
312
   0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
313
   0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
314
   0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
315
   0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
316
   0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
317
   0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
318
   0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
319
   0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
320
   0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
321
};
322
323
 
324
   0x00, 0x40, 0x80, 0xC0, 0x10, 0x50, 0x90, 0xD0,
325
   0x20, 0x60, 0xA0, 0xE0, 0x30, 0x70, 0xB0, 0xF0,
326
   0x04, 0x44, 0x84, 0xC4, 0x14, 0x54, 0x94, 0xD4,
327
   0x24, 0x64, 0xA4, 0xE4, 0x34, 0x74, 0xB4, 0xF4,
328
   0x08, 0x48, 0x88, 0xC8, 0x18, 0x58, 0x98, 0xD8,
329
   0x28, 0x68, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8,
330
   0x0C, 0x4C, 0x8C, 0xCC, 0x1C, 0x5C, 0x9C, 0xDC,
331
   0x2C, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC,
332
   0x01, 0x41, 0x81, 0xC1, 0x11, 0x51, 0x91, 0xD1,
333
   0x21, 0x61, 0xA1, 0xE1, 0x31, 0x71, 0xB1, 0xF1,
334
   0x05, 0x45, 0x85, 0xC5, 0x15, 0x55, 0x95, 0xD5,
335
   0x25, 0x65, 0xA5, 0xE5, 0x35, 0x75, 0xB5, 0xF5,
336
   0x09, 0x49, 0x89, 0xC9, 0x19, 0x59, 0x99, 0xD9,
337
   0x29, 0x69, 0xA9, 0xE9, 0x39, 0x79, 0xB9, 0xF9,
338
   0x0D, 0x4D, 0x8D, 0xCD, 0x1D, 0x5D, 0x9D, 0xDD,
339
   0x2D, 0x6D, 0xAD, 0xED, 0x3D, 0x7D, 0xBD, 0xFD,
340
   0x02, 0x42, 0x82, 0xC2, 0x12, 0x52, 0x92, 0xD2,
341
   0x22, 0x62, 0xA2, 0xE2, 0x32, 0x72, 0xB2, 0xF2,
342
   0x06, 0x46, 0x86, 0xC6, 0x16, 0x56, 0x96, 0xD6,
343
   0x26, 0x66, 0xA6, 0xE6, 0x36, 0x76, 0xB6, 0xF6,
344
   0x0A, 0x4A, 0x8A, 0xCA, 0x1A, 0x5A, 0x9A, 0xDA,
345
   0x2A, 0x6A, 0xAA, 0xEA, 0x3A, 0x7A, 0xBA, 0xFA,
346
   0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xDE,
347
   0x2E, 0x6E, 0xAE, 0xEE, 0x3E, 0x7E, 0xBE, 0xFE,
348
   0x03, 0x43, 0x83, 0xC3, 0x13, 0x53, 0x93, 0xD3,
349
   0x23, 0x63, 0xA3, 0xE3, 0x33, 0x73, 0xB3, 0xF3,
350
   0x07, 0x47, 0x87, 0xC7, 0x17, 0x57, 0x97, 0xD7,
351
   0x27, 0x67, 0xA7, 0xE7, 0x37, 0x77, 0xB7, 0xF7,
352
   0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x5B, 0x9B, 0xDB,
353
   0x2B, 0x6B, 0xAB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB,
354
   0x0F, 0x4F, 0x8F, 0xCF, 0x1F, 0x5F, 0x9F, 0xDF,
355
   0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF
356
};
357
358
 
359
   0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
360
   0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
361
   0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71,
362
   0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1,
363
   0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72,
364
   0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2,
365
   0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73,
366
   0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3,
367
   0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74,
368
   0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4,
369
   0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75,
370
   0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5,
371
   0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76,
372
   0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6,
373
   0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77,
374
   0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7,
375
   0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78,
376
   0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8,
377
   0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79,
378
   0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9,
379
   0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A,
380
   0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
381
   0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B,
382
   0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB,
383
   0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C,
384
   0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC,
385
   0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D,
386
   0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD,
387
   0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E,
388
   0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
389
   0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F,
390
   0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF
391
};
392
393
 
394
void /* PRIVATE */
395
png_do_packswap(png_row_infop row_info, png_bytep row)
396
{
397
   png_debug(1, "in png_do_packswap");
398
399
 
400
   {
401
      png_bytep rp;
402
      png_const_bytep end, table;
403
404
 
405
406
 
407
         table = onebppswaptable;
408
409
 
410
         table = twobppswaptable;
411
412
 
413
         table = fourbppswaptable;
414
415
 
416
         return;
417
418
 
419
         *rp = table[*rp];
420
   }
421
}
422
#endif /* PNG_READ_PACKSWAP_SUPPORTED or PNG_WRITE_PACKSWAP_SUPPORTED */
423
424
 
425
    defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
426
/* Remove filler or alpha byte(s) */
427
void /* PRIVATE */
428
png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
429
{
430
   png_debug(1, "in png_do_strip_filler");
431
432
 
433
      png_bytep sp = row;
434
      png_bytep dp = row;
435
      png_uint_32 row_width = row_info->width;
436
      png_uint_32 i;
437
438
 
439
          (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA &&
440
          (flags & PNG_FLAG_STRIP_ALPHA))) &&
441
          row_info->channels == 4)
442
      {
443
         if (row_info->bit_depth == 8)
444
         {
445
            /* This converts from RGBX or RGBA to RGB */
446
            if (flags & PNG_FLAG_FILLER_AFTER)
447
            {
448
               dp += 3; sp += 4;
449
               for (i = 1; i < row_width; i++)
450
               {
451
                  *dp++ = *sp++;
452
                  *dp++ = *sp++;
453
                  *dp++ = *sp++;
454
                  sp++;
455
               }
456
            }
457
458
 
459
            else
460
            {
461
               for (i = 0; i < row_width; i++)
462
               {
463
                  sp++;
464
                  *dp++ = *sp++;
465
                  *dp++ = *sp++;
466
                  *dp++ = *sp++;
467
               }
468
            }
469
            row_info->pixel_depth = 24;
470
            row_info->rowbytes = row_width * 3;
471
         }
472
473
 
474
         {
475
            if (flags & PNG_FLAG_FILLER_AFTER)
476
            {
477
               /* This converts from RRGGBBXX or RRGGBBAA to RRGGBB */
478
               sp += 8; dp += 6;
479
               for (i = 1; i < row_width; i++)
480
               {
481
                  /* This could be (although png_memcpy is probably slower):
482
                  png_memcpy(dp, sp, 6);
483
                  sp += 8;
484
                  dp += 6;
485
                  */
486
487
 
488
                  *dp++ = *sp++;
489
                  *dp++ = *sp++;
490
                  *dp++ = *sp++;
491
                  *dp++ = *sp++;
492
                  *dp++ = *sp++;
493
                  sp += 2;
494
               }
495
            }
496
497
 
498
            {
499
               /* This converts from XXRRGGBB or AARRGGBB to RRGGBB */
500
               for (i = 0; i < row_width; i++)
501
               {
502
                  /* This could be (although png_memcpy is probably slower):
503
                  png_memcpy(dp, sp, 6);
504
                  sp += 8;
505
                  dp += 6;
506
                  */
507
508
 
509
                  *dp++ = *sp++;
510
                  *dp++ = *sp++;
511
                  *dp++ = *sp++;
512
                  *dp++ = *sp++;
513
                  *dp++ = *sp++;
514
                  *dp++ = *sp++;
515
               }
516
            }
517
518
 
519
            row_info->rowbytes = row_width * 6;
520
         }
521
         row_info->channels = 3;
522
      }
523
524
 
525
         (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA &&
526
         (flags & PNG_FLAG_STRIP_ALPHA))) &&
527
          row_info->channels == 2)
528
      {
529
         if (row_info->bit_depth == 8)
530
         {
531
            if (flags & PNG_FLAG_FILLER_AFTER)
532
            {
533
               /* This converts from GX or GA to G */
534
               for (i = 0; i < row_width; i++)
535
               {
536
                  *dp++ = *sp++;
537
                  sp++;
538
               }
539
            }
540
541
 
542
            {
543
               /* This converts from XG or AG to G */
544
               for (i = 0; i < row_width; i++)
545
               {
546
                  sp++;
547
                  *dp++ = *sp++;
548
               }
549
            }
550
551
 
552
            row_info->rowbytes = row_width;
553
         }
554
555
 
556
         {
557
            if (flags & PNG_FLAG_FILLER_AFTER)
558
            {
559
               /* This converts from GGXX or GGAA to GG */
560
               sp += 4; dp += 2;
561
               for (i = 1; i < row_width; i++)
562
               {
563
                  *dp++ = *sp++;
564
                  *dp++ = *sp++;
565
                  sp += 2;
566
               }
567
            }
568
569
 
570
            {
571
               /* This converts from XXGG or AAGG to GG */
572
               for (i = 0; i < row_width; i++)
573
               {
574
                  sp += 2;
575
                  *dp++ = *sp++;
576
                  *dp++ = *sp++;
577
               }
578
            }
579
580
 
581
            row_info->rowbytes = row_width * 2;
582
         }
583
         row_info->channels = 1;
584
      }
585
586
 
587
        row_info->color_type = (png_byte)(row_info->color_type &
588
            ~PNG_COLOR_MASK_ALPHA);
589
   }
590
}
591
#endif
592
593
 
594
/* Swaps red and blue bytes within a pixel */
595
void /* PRIVATE */
596
png_do_bgr(png_row_infop row_info, png_bytep row)
597
{
598
   png_debug(1, "in png_do_bgr");
599
600
 
601
   {
602
      png_uint_32 row_width = row_info->width;
603
      if (row_info->bit_depth == 8)
604
      {
605
         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
606
         {
607
            png_bytep rp;
608
            png_uint_32 i;
609
610
 
611
            {
612
               png_byte save = *rp;
613
               *rp = *(rp + 2);
614
               *(rp + 2) = save;
615
            }
616
         }
617
618
 
619
         {
620
            png_bytep rp;
621
            png_uint_32 i;
622
623
 
624
            {
625
               png_byte save = *rp;
626
               *rp = *(rp + 2);
627
               *(rp + 2) = save;
628
            }
629
         }
630
      }
631
632
 
633
      else if (row_info->bit_depth == 16)
634
      {
635
         if (row_info->color_type == PNG_COLOR_TYPE_RGB)
636
         {
637
            png_bytep rp;
638
            png_uint_32 i;
639
640
 
641
            {
642
               png_byte save = *rp;
643
               *rp = *(rp + 4);
644
               *(rp + 4) = save;
645
               save = *(rp + 1);
646
               *(rp + 1) = *(rp + 5);
647
               *(rp + 5) = save;
648
            }
649
         }
650
651
 
652
         {
653
            png_bytep rp;
654
            png_uint_32 i;
655
656
 
657
            {
658
               png_byte save = *rp;
659
               *rp = *(rp + 4);
660
               *(rp + 4) = save;
661
               save = *(rp + 1);
662
               *(rp + 1) = *(rp + 5);
663
               *(rp + 5) = save;
664
            }
665
         }
666
      }
667
#endif
668
   }
669
}
670
#endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */
671
672
 
673
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
674
#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
675
void PNGAPI
676
png_set_user_transform_info(png_structp png_ptr, png_voidp
677
   user_transform_ptr, int user_transform_depth, int user_transform_channels)
678
{
679
   png_debug(1, "in png_set_user_transform_info");
680
681
 
682
      return;
683
   png_ptr->user_transform_ptr = user_transform_ptr;
684
   png_ptr->user_transform_depth = (png_byte)user_transform_depth;
685
   png_ptr->user_transform_channels = (png_byte)user_transform_channels;
686
}
687
#endif
688
689
 
690
 * the user transform functions.  The application should free any memory
691
 * associated with this pointer before png_write_destroy and png_read_destroy
692
 * are called.
693
 */
694
#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
695
png_voidp PNGAPI
696
png_get_user_transform_ptr(png_const_structp png_ptr)
697
{
698
   if (png_ptr == NULL)
699
      return (NULL);
700
701
 
702
}
703
#endif
704
705
 
706
png_get_current_row_number(png_const_structp png_ptr)
707
{
708
   if (png_ptr != NULL)
709
      return png_ptr->row_number;
710
   return PNG_UINT_32_MAX; /* help the app not to fail silently */
711
}
712
713
 
714
png_get_current_pass_number(png_const_structp png_ptr)
715
{
716
   if (png_ptr != NULL)
717
      return png_ptr->pass;
718
   return 8; /* invalid */
719
}
720
#endif /* PNG_READ_USER_TRANSFORM_SUPPORTED ||
721
          PNG_WRITE_USER_TRANSFORM_SUPPORTED */
722
#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
723