pngtrans.c revision 893912bfc2683463dc3e2c445336752d012563d3
1893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 2893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* pngtrans.c - transforms the data in a row (used by both readers and writers) 3893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * 4893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * Last changed in libpng 1.2.17 May 15, 2007 5893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * For conditions of distribution and use, see copyright notice in png.h 6893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * Copyright (c) 1998-2007 Glenn Randers-Pehrson 7893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) 8893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) 9893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project */ 10893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 11893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#define PNG_INTERNAL 12893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#include "png.h" 13893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 14893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED) 15893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) 16893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* turn on BGR-to-RGB mapping */ 17893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid PNGAPI 18893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_set_bgr(png_structp png_ptr) 19893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 20893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_set_bgr\n"); 21893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if(png_ptr == NULL) return; 22893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->transformations |= PNG_BGR; 23893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 24893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 25893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 26893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) 27893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* turn on 16 bit byte swapping */ 28893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid PNGAPI 29893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_set_swap(png_structp png_ptr) 30893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 31893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_set_swap\n"); 32893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if(png_ptr == NULL) return; 33893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (png_ptr->bit_depth == 16) 34893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->transformations |= PNG_SWAP_BYTES; 35893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 36893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 37893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 38893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) 39893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* turn on pixel packing */ 40893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid PNGAPI 41893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_set_packing(png_structp png_ptr) 42893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 43893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_set_packing\n"); 44893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if(png_ptr == NULL) return; 45893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (png_ptr->bit_depth < 8) 46893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 47893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->transformations |= PNG_PACK; 48893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->usr_bit_depth = 8; 49893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 50893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 51893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 52893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 53893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED) 54893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* turn on packed pixel swapping */ 55893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid PNGAPI 56893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_set_packswap(png_structp png_ptr) 57893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 58893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_set_packswap\n"); 59893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if(png_ptr == NULL) return; 60893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (png_ptr->bit_depth < 8) 61893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->transformations |= PNG_PACKSWAP; 62893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 63893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 64893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 65893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) 66893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid PNGAPI 67893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_set_shift(png_structp png_ptr, png_color_8p true_bits) 68893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 69893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_set_shift\n"); 70893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if(png_ptr == NULL) return; 71893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->transformations |= PNG_SHIFT; 72893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->shift = *true_bits; 73893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 74893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 75893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 76893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ 77893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project defined(PNG_WRITE_INTERLACING_SUPPORTED) 78893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectint PNGAPI 79893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_set_interlace_handling(png_structp png_ptr) 80893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 81893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_set_interlace handling\n"); 82893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (png_ptr && png_ptr->interlaced) 83893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 84893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->transformations |= PNG_INTERLACE; 85893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return (7); 86893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 87893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 88893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return (1); 89893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 90893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 91893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 92893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) 93893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* Add a filler byte on read, or remove a filler or alpha byte on write. 94893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * The filler type has changed in v0.95 to allow future 2-byte fillers 95893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * for 48-bit input data, as well as to avoid problems with some compilers 96893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * that don't like bytes as parameters. 97893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project */ 98893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid PNGAPI 99893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc) 100893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 101893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_set_filler\n"); 102893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if(png_ptr == NULL) return; 103893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->transformations |= PNG_FILLER; 104893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->filler = (png_byte)filler; 105893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (filler_loc == PNG_FILLER_AFTER) 106893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->flags |= PNG_FLAG_FILLER_AFTER; 107893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 108893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER; 109893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 110893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* This should probably go in the "do_read_filler" routine. 111893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * I attempted to do that in libpng-1.0.1a but that caused problems 112893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * so I restored it in libpng-1.0.2a 113893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project */ 114893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 115893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) 116893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 117893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->usr_channels = 4; 118893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 119893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 120893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* Also I added this in libpng-1.0.2a (what happens when we expand 121893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * a less-than-8-bit grayscale to GA? */ 122893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 123893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY && png_ptr->bit_depth >= 8) 124893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 125893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->usr_channels = 2; 126893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 127893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 128893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 129893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if !defined(PNG_1_0_X) 130893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* Added to libpng-1.2.7 */ 131893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid PNGAPI 132893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_set_add_alpha(png_structp png_ptr, png_uint_32 filler, int filler_loc) 133893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 134893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_set_add_alpha\n"); 135893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if(png_ptr == NULL) return; 136893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_set_filler(png_ptr, filler, filler_loc); 137893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->transformations |= PNG_ADD_ALPHA; 138893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 139893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 140893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 141893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 142893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 143893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ 144893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) 145893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid PNGAPI 146893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_set_swap_alpha(png_structp png_ptr) 147893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 148893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_set_swap_alpha\n"); 149893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if(png_ptr == NULL) return; 150893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->transformations |= PNG_SWAP_ALPHA; 151893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 152893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 153893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 154893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ 155893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) 156893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid PNGAPI 157893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_set_invert_alpha(png_structp png_ptr) 158893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 159893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_set_invert_alpha\n"); 160893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if(png_ptr == NULL) return; 161893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->transformations |= PNG_INVERT_ALPHA; 162893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 163893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 164893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 165893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) 166893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid PNGAPI 167893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_set_invert_mono(png_structp png_ptr) 168893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 169893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_set_invert_mono\n"); 170893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if(png_ptr == NULL) return; 171893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->transformations |= PNG_INVERT_MONO; 172893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 173893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 174893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* invert monochrome grayscale data */ 175893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid /* PRIVATE */ 176893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_do_invert(png_row_infop row_info, png_bytep row) 177893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 178893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_do_invert\n"); 179893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* This test removed from libpng version 1.0.13 and 1.2.0: 180893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * if (row_info->bit_depth == 1 && 181893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project */ 182893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_USELESS_TESTS_SUPPORTED) 183893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (row == NULL || row_info == NULL) 184893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return; 185893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 186893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (row_info->color_type == PNG_COLOR_TYPE_GRAY) 187893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 188893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_bytep rp = row; 189893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 i; 190893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 istop = row_info->rowbytes; 191893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 192893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0; i < istop; i++) 193893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 194893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *rp = (png_byte)(~(*rp)); 195893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project rp++; 196893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 197893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 198893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA && 199893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->bit_depth == 8) 200893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 201893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_bytep rp = row; 202893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 i; 203893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 istop = row_info->rowbytes; 204893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 205893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0; i < istop; i+=2) 206893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 207893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *rp = (png_byte)(~(*rp)); 208893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project rp+=2; 209893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 210893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 211893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA && 212893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->bit_depth == 16) 213893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 214893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_bytep rp = row; 215893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 i; 216893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 istop = row_info->rowbytes; 217893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 218893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0; i < istop; i+=4) 219893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 220893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *rp = (png_byte)(~(*rp)); 221893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *(rp+1) = (png_byte)(~(*(rp+1))); 222893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project rp+=4; 223893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 224893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 225893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 226893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 227893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 228893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) 229893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* swaps byte order on 16 bit depth images */ 230893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid /* PRIVATE */ 231893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_do_swap(png_row_infop row_info, png_bytep row) 232893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 233893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_do_swap\n"); 234893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if ( 235893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_USELESS_TESTS_SUPPORTED) 236893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row != NULL && row_info != NULL && 237893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 238893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->bit_depth == 16) 239893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 240893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_bytep rp = row; 241893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 i; 242893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 istop= row_info->width * row_info->channels; 243893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 244893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0; i < istop; i++, rp += 2) 245893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 246893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_byte t = *rp; 247893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *rp = *(rp + 1); 248893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *(rp + 1) = t; 249893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 250893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 251893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 252893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 253893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 254893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED) 255893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectstatic PNG_CONST png_byte onebppswaptable[256] = { 256893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 257893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0, 258893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8, 259893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, 260893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 261893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4, 262893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC, 263893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, 264893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2, 265893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2, 266893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 267893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, 268893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6, 269893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6, 270893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 271893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, 272893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1, 273893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1, 274893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 275893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9, 276893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5, 277893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, 278893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 279893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD, 280893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3, 281893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, 282893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 283893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB, 284893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7, 285893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, 286893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 287893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF 288893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}; 289893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 290893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectstatic PNG_CONST png_byte twobppswaptable[256] = { 291893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x00, 0x40, 0x80, 0xC0, 0x10, 0x50, 0x90, 0xD0, 292893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x20, 0x60, 0xA0, 0xE0, 0x30, 0x70, 0xB0, 0xF0, 293893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x04, 0x44, 0x84, 0xC4, 0x14, 0x54, 0x94, 0xD4, 294893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x24, 0x64, 0xA4, 0xE4, 0x34, 0x74, 0xB4, 0xF4, 295893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x08, 0x48, 0x88, 0xC8, 0x18, 0x58, 0x98, 0xD8, 296893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x28, 0x68, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8, 297893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0C, 0x4C, 0x8C, 0xCC, 0x1C, 0x5C, 0x9C, 0xDC, 298893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x2C, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC, 299893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x01, 0x41, 0x81, 0xC1, 0x11, 0x51, 0x91, 0xD1, 300893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x21, 0x61, 0xA1, 0xE1, 0x31, 0x71, 0xB1, 0xF1, 301893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x05, 0x45, 0x85, 0xC5, 0x15, 0x55, 0x95, 0xD5, 302893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x25, 0x65, 0xA5, 0xE5, 0x35, 0x75, 0xB5, 0xF5, 303893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x09, 0x49, 0x89, 0xC9, 0x19, 0x59, 0x99, 0xD9, 304893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x29, 0x69, 0xA9, 0xE9, 0x39, 0x79, 0xB9, 0xF9, 305893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0D, 0x4D, 0x8D, 0xCD, 0x1D, 0x5D, 0x9D, 0xDD, 306893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x2D, 0x6D, 0xAD, 0xED, 0x3D, 0x7D, 0xBD, 0xFD, 307893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x02, 0x42, 0x82, 0xC2, 0x12, 0x52, 0x92, 0xD2, 308893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x22, 0x62, 0xA2, 0xE2, 0x32, 0x72, 0xB2, 0xF2, 309893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x06, 0x46, 0x86, 0xC6, 0x16, 0x56, 0x96, 0xD6, 310893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x26, 0x66, 0xA6, 0xE6, 0x36, 0x76, 0xB6, 0xF6, 311893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0A, 0x4A, 0x8A, 0xCA, 0x1A, 0x5A, 0x9A, 0xDA, 312893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x2A, 0x6A, 0xAA, 0xEA, 0x3A, 0x7A, 0xBA, 0xFA, 313893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xDE, 314893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x2E, 0x6E, 0xAE, 0xEE, 0x3E, 0x7E, 0xBE, 0xFE, 315893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x03, 0x43, 0x83, 0xC3, 0x13, 0x53, 0x93, 0xD3, 316893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x23, 0x63, 0xA3, 0xE3, 0x33, 0x73, 0xB3, 0xF3, 317893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x07, 0x47, 0x87, 0xC7, 0x17, 0x57, 0x97, 0xD7, 318893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x27, 0x67, 0xA7, 0xE7, 0x37, 0x77, 0xB7, 0xF7, 319893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x5B, 0x9B, 0xDB, 320893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x2B, 0x6B, 0xAB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB, 321893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0F, 0x4F, 0x8F, 0xCF, 0x1F, 0x5F, 0x9F, 0xDF, 322893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF 323893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}; 324893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 325893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectstatic PNG_CONST png_byte fourbppswaptable[256] = { 326893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 327893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0, 328893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 329893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1, 330893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, 331893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2, 332893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 333893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3, 334893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74, 335893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4, 336893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75, 337893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5, 338893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76, 339893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6, 340893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 341893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7, 342893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, 343893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8, 344893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79, 345893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9, 346893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A, 347893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA, 348893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 349893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB, 350893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C, 351893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC, 352893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D, 353893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD, 354893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E, 355893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE, 356893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, 357893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF 358893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project}; 359893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 360893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* swaps pixel packing order within bytes */ 361893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid /* PRIVATE */ 362893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_do_packswap(png_row_infop row_info, png_bytep row) 363893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 364893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_do_packswap\n"); 365893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if ( 366893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_USELESS_TESTS_SUPPORTED) 367893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row != NULL && row_info != NULL && 368893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 369893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->bit_depth < 8) 370893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 371893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_bytep rp, end, table; 372893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 373893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project end = row + row_info->rowbytes; 374893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 375893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (row_info->bit_depth == 1) 376893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project table = (png_bytep)onebppswaptable; 377893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else if (row_info->bit_depth == 2) 378893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project table = (png_bytep)twobppswaptable; 379893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else if (row_info->bit_depth == 4) 380893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project table = (png_bytep)fourbppswaptable; 381893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 382893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return; 383893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 384893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (rp = row; rp < end; rp++) 385893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *rp = table[*rp]; 386893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 387893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 388893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif /* PNG_READ_PACKSWAP_SUPPORTED or PNG_WRITE_PACKSWAP_SUPPORTED */ 389893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 390893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_WRITE_FILLER_SUPPORTED) || \ 391893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project defined(PNG_READ_STRIP_ALPHA_SUPPORTED) 392893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* remove filler or alpha byte(s) */ 393893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid /* PRIVATE */ 394893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags) 395893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 396893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_do_strip_filler\n"); 397893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_USELESS_TESTS_SUPPORTED) 398893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (row != NULL && row_info != NULL) 399893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 400893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 401893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_bytep sp=row; 402893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_bytep dp=row; 403893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 row_width=row_info->width; 404893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 i; 405893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 406893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if ((row_info->color_type == PNG_COLOR_TYPE_RGB || 407893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA && 408893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project (flags & PNG_FLAG_STRIP_ALPHA))) && 409893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->channels == 4) 410893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 411893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (row_info->bit_depth == 8) 412893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 413893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* This converts from RGBX or RGBA to RGB */ 414893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (flags & PNG_FLAG_FILLER_AFTER) 415893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 416893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dp+=3; sp+=4; 417893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 1; i < row_width; i++) 418893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 419893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 420893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 421893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 422893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sp++; 423893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 424893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 425893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* This converts from XRGB or ARGB to RGB */ 426893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 427893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 428893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0; i < row_width; i++) 429893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 430893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sp++; 431893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 432893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 433893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 434893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 435893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 436893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->pixel_depth = 24; 437893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->rowbytes = row_width * 3; 438893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 439893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else /* if (row_info->bit_depth == 16) */ 440893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 441893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (flags & PNG_FLAG_FILLER_AFTER) 442893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 443893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* This converts from RRGGBBXX or RRGGBBAA to RRGGBB */ 444893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sp += 8; dp += 6; 445893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 1; i < row_width; i++) 446893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 447893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* This could be (although png_memcpy is probably slower): 448893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_memcpy(dp, sp, 6); 449893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sp += 8; 450893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dp += 6; 451893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project */ 452893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 453893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 454893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 455893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 456893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 457893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 458893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 459893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sp += 2; 460893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 461893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 462893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 463893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 464893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* This converts from XXRRGGBB or AARRGGBB to RRGGBB */ 465893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0; i < row_width; i++) 466893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 467893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* This could be (although png_memcpy is probably slower): 468893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_memcpy(dp, sp, 6); 469893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sp += 8; 470893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project dp += 6; 471893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project */ 472893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 473893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sp+=2; 474893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 475893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 476893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 477893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 478893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 479893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 480893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 481893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 482893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->pixel_depth = 48; 483893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->rowbytes = row_width * 6; 484893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 485893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->channels = 3; 486893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 487893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else if ((row_info->color_type == PNG_COLOR_TYPE_GRAY || 488893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA && 489893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project (flags & PNG_FLAG_STRIP_ALPHA))) && 490893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->channels == 2) 491893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 492893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (row_info->bit_depth == 8) 493893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 494893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* This converts from GX or GA to G */ 495893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (flags & PNG_FLAG_FILLER_AFTER) 496893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 497893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0; i < row_width; i++) 498893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 499893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 500893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sp++; 501893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 502893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 503893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* This converts from XG or AG to G */ 504893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 505893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 506893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0; i < row_width; i++) 507893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 508893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sp++; 509893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 510893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 511893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 512893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->pixel_depth = 8; 513893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->rowbytes = row_width; 514893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 515893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else /* if (row_info->bit_depth == 16) */ 516893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 517893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (flags & PNG_FLAG_FILLER_AFTER) 518893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 519893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* This converts from GGXX or GGAA to GG */ 520893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sp += 4; dp += 2; 521893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 1; i < row_width; i++) 522893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 523893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 524893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 525893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sp += 2; 526893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 527893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 528893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else 529893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 530893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project /* This converts from XXGG or AAGG to GG */ 531893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0; i < row_width; i++) 532893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 533893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project sp += 2; 534893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 535893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *dp++ = *sp++; 536893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 537893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 538893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->pixel_depth = 16; 539893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->rowbytes = row_width * 2; 540893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 541893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->channels = 1; 542893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 543893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (flags & PNG_FLAG_STRIP_ALPHA) 544893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row_info->color_type &= ~PNG_COLOR_MASK_ALPHA; 545893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 546893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 547893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 548893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 549893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) 550893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* swaps red and blue bytes within a pixel */ 551893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid /* PRIVATE */ 552893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_do_bgr(png_row_infop row_info, png_bytep row) 553893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 554893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_do_bgr\n"); 555893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if ( 556893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_USELESS_TESTS_SUPPORTED) 557893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project row != NULL && row_info != NULL && 558893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 559893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project (row_info->color_type & PNG_COLOR_MASK_COLOR)) 560893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 561893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 row_width = row_info->width; 562893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (row_info->bit_depth == 8) 563893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 564893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (row_info->color_type == PNG_COLOR_TYPE_RGB) 565893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 566893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_bytep rp; 567893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 i; 568893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 569893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0, rp = row; i < row_width; i++, rp += 3) 570893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 571893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_byte save = *rp; 572893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *rp = *(rp + 2); 573893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *(rp + 2) = save; 574893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 575893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 576893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) 577893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 578893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_bytep rp; 579893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 i; 580893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 581893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0, rp = row; i < row_width; i++, rp += 4) 582893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 583893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_byte save = *rp; 584893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *rp = *(rp + 2); 585893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *(rp + 2) = save; 586893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 587893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 588893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 589893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else if (row_info->bit_depth == 16) 590893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 591893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (row_info->color_type == PNG_COLOR_TYPE_RGB) 592893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 593893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_bytep rp; 594893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 i; 595893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 596893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0, rp = row; i < row_width; i++, rp += 6) 597893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 598893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_byte save = *rp; 599893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *rp = *(rp + 4); 600893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *(rp + 4) = save; 601893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project save = *(rp + 1); 602893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *(rp + 1) = *(rp + 5); 603893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *(rp + 5) = save; 604893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 605893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 606893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA) 607893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 608893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_bytep rp; 609893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_uint_32 i; 610893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 611893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project for (i = 0, rp = row; i < row_width; i++, rp += 8) 612893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project { 613893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_byte save = *rp; 614893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *rp = *(rp + 4); 615893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *(rp + 4) = save; 616893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project save = *(rp + 1); 617893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *(rp + 1) = *(rp + 5); 618893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project *(rp + 5) = save; 619893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 620893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 621893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 622893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project } 623893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 624893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */ 625893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 626893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ 627893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ 628893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project defined(PNG_LEGACY_SUPPORTED) 629893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectvoid PNGAPI 630893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_set_user_transform_info(png_structp png_ptr, png_voidp 631893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project user_transform_ptr, int user_transform_depth, int user_transform_channels) 632893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 633893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_debug(1, "in png_set_user_transform_info\n"); 634893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if(png_ptr == NULL) return; 635893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) 636893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->user_transform_ptr = user_transform_ptr; 637893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->user_transform_depth = (png_byte)user_transform_depth; 638893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_ptr->user_transform_channels = (png_byte)user_transform_channels; 639893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#else 640893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if(user_transform_ptr || user_transform_depth || user_transform_channels) 641893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project png_warning(png_ptr, 642893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project "This version of libpng does not support user transform info"); 643893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 644893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 645893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 646893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project 647893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project/* This function returns a pointer to the user_transform_ptr associated with 648893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * the user transform functions. The application should free any memory 649893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * associated with this pointer before png_write_destroy and png_read_destroy 650893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project * are called. 651893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project */ 652893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_voidp PNGAPI 653893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Projectpng_get_user_transform_ptr(png_structp png_ptr) 654893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project{ 655893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) 656893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project if (png_ptr == NULL) return (NULL); 657893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return ((png_voidp)png_ptr->user_transform_ptr); 658893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#else 659893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project return (NULL); 660893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif 661893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project} 662893912bfc2683463dc3e2c445336752d012563d3The Android Open Source Project#endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */ 663