Imported from libpng-0.81.tar
diff --git a/pngwtran.c b/pngwtran.c
index 7423ade..acbd0c2 100644
--- a/pngwtran.c
+++ b/pngwtran.c
@@ -1,10 +1,10 @@
/* pngwtran.c - transforms the data in a row for png writers
- libpng 1.0 beta 1 - version 0.71
+ libpng 1.0 beta 2 - version 0.81
For conditions of distribution and use, see copyright notice in png.h
Copyright (c) 1995 Guy Eric Schalnat, Group 42, Inc.
- June 26, 1995
+ August 24, 1995
*/
#define PNG_INTERNAL
@@ -15,29 +15,41 @@
void
png_do_write_transformations(png_struct *png_ptr)
{
+#if defined(PNG_WRITE_FILLER_SUPPORTED)
if (png_ptr->transformations & PNG_RGBA)
- png_do_write_rgbx(&(png_ptr->row_info), png_ptr->row_buf + 1);
- if (png_ptr->transformations & PNG_XRGB)
- png_do_write_xrgb(&(png_ptr->row_info), png_ptr->row_buf + 1);
+ png_do_write_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
+ png_ptr->filler_loc);
+#endif
+#if defined(PNG_WRITE_PACK_SUPPORTED)
if (png_ptr->transformations & PNG_PACK)
png_do_pack(&(png_ptr->row_info), png_ptr->row_buf + 1,
png_ptr->bit_depth);
+#endif
+#if defined(PNG_WRITE_SHIFT_SUPPORTED)
if (png_ptr->transformations & PNG_SHIFT)
png_do_shift(&(png_ptr->row_info), png_ptr->row_buf + 1,
&(png_ptr->shift));
+#endif
+#if defined(PNG_WRITE_SWAP_SUPPORTED)
if (png_ptr->transformations & PNG_SWAP_BYTES)
png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1);
+#endif
+#if defined(PNG_WRITE_BGR_SUPPORTED)
if (png_ptr->transformations & PNG_BGR)
png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1);
+#endif
+#if defined(PNG_WRITE_INVERT_SUPPORTED)
if (png_ptr->transformations & PNG_INVERT_MONO)
png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1);
+#endif
}
+#if defined(PNG_WRITE_PACK_SUPPORTED)
/* pack pixels into bytes. Pass the true bit depth in bit_depth. The
row_info bit depth should be 8 (one pixel per byte). The channels
should be 1 (this only happens on grayscale and paletted images) */
void
-png_do_pack(png_row_info *row_info, png_byte *row, png_byte bit_depth)
+png_do_pack(png_row_info *row_info, png_bytef *row, png_byte bit_depth)
{
if (row_info && row && row_info->bit_depth == 8 &&
row_info->channels == 1)
@@ -46,8 +58,8 @@
{
case 1:
{
- png_byte *sp;
- png_byte *dp;
+ png_bytef *sp;
+ png_bytef *dp;
int mask;
png_int_32 i;
int v;
@@ -77,8 +89,8 @@
}
case 2:
{
- png_byte *sp;
- png_byte *dp;
+ png_bytef *sp;
+ png_bytef *dp;
int shift;
png_int_32 i;
int v;
@@ -109,8 +121,8 @@
}
case 4:
{
- png_byte *sp;
- png_byte *dp;
+ png_bytef *sp;
+ png_bytef *dp;
int shift;
png_int_32 i;
int v;
@@ -148,7 +160,9 @@
((row_info->width * row_info->pixel_depth + 7) >> 3);
}
}
+#endif
+#if defined(PNG_WRITE_SHIFT_SUPPORTED)
/* shift pixel values to take advantage of whole range. Pass the
true number of bits in bit_depth. The row should be packed
according to row_info->bit_depth. Thus, if you had a row of
@@ -156,7 +170,7 @@
would pass 3 as bit_depth, and this routine would translate the
data to 0 to 15. */
void
-png_do_shift(png_row_info *row_info, png_byte *row, png_color_8 *bit_depth)
+png_do_shift(png_row_info *row_info, png_bytef *row, png_color_8 *bit_depth)
{
if (row && row_info &&
row_info->color_type != PNG_COLOR_TYPE_PALETTE)
@@ -193,7 +207,7 @@
/* with low row dephts, could only be grayscale, so one channel */
if (row_info->bit_depth < 8)
{
- png_byte *bp;
+ png_bytef *bp;
png_uint_32 i;
int j;
png_byte mask;
@@ -222,7 +236,7 @@
}
else if (row_info->bit_depth == 8)
{
- png_byte *bp;
+ png_bytef *bp;
png_uint_32 i;
int j;
@@ -248,7 +262,7 @@
}
else
{
- png_byte *bp;
+ png_bytef *bp;
png_uint_32 i;
int j;
@@ -278,54 +292,54 @@
}
}
}
+#endif
-/* remove filler byte after rgb */
+#ifdef PNG_WRITE_FILLER_SUPPORTED
+/* remove filler byte */
void
-png_do_write_rgbx(png_row_info *row_info, png_byte *row)
+png_do_write_filler(png_row_info *row_info, png_bytef *row,
+ png_byte filler_loc)
{
if (row && row_info && row_info->color_type == PNG_COLOR_TYPE_RGB &&
row_info->bit_depth == 8)
{
- png_byte *sp, *dp;
- png_uint_32 i;
-
- for (i = 1, sp = row + 4, dp = row + 3;
- i < row_info->width;
- i++)
+ if (filler_loc == PNG_FILLER_AFTER)
{
- *dp++ = *sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- sp++;
+ png_bytef *sp, *dp;
+ png_uint_32 i;
+
+ for (i = 1, sp = row + 4, dp = row + 3;
+ i < row_info->width;
+ i++)
+ {
+ *dp++ = *sp++;
+ *dp++ = *sp++;
+ *dp++ = *sp++;
+ sp++;
+ }
+ row_info->channels = 3;
+ row_info->pixel_depth = 24;
+ row_info->rowbytes = row_info->width * 3;
}
- row_info->channels = 3;
- row_info->pixel_depth = 24;
- row_info->rowbytes = row_info->width * 3;
+ else
+ {
+ png_bytef *sp, *dp;
+ png_uint_32 i;
+
+ for (i = 1, sp = row + 4, dp = row + 3;
+ i < row_info->width;
+ i++)
+ {
+ sp++;
+ *dp++ = *sp++;
+ *dp++ = *sp++;
+ *dp++ = *sp++;
+ }
+ row_info->channels = 3;
+ row_info->pixel_depth = 24;
+ row_info->rowbytes = row_info->width * 3;
+ }
}
}
-
-/* remove filler byte before rgb */
-void
-png_do_write_xrgb(png_row_info *row_info, png_byte *row)
-{
- if (row && row_info && row_info->color_type == PNG_COLOR_TYPE_RGB &&
- row_info->bit_depth == 8)
- {
- png_byte *sp, *dp;
- png_uint_32 i;
-
- for (i = 0, sp = row, dp = row;
- i < row_info->width;
- i++)
- {
- sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- *dp++ = *sp++;
- }
- row_info->channels = 3;
- row_info->pixel_depth = 24;
- row_info->rowbytes = row_info->width * 3;
- }
-}
+#endif