(png_size_t)((png_ptr->width * png_ptr->row_info.pixel_depth + 7) >> 3));
PNG_ROWBYTES(png_ptr->row_info.pixel_depth, png_ptr->width));
png_combine_row(png_structp png_ptr, png_bytep row, int mask){   png_debug(1,"in png_combine_row\n");   if (mask == 0xff)   {      png_memcpy(row, png_ptr->row_buf + 1,         (png_size_t)((png_ptr->width *         png_ptr->row_info.pixel_depth + 7) >> 3));   }   else   {      switch (png_ptr->row_info.pixel_depth)      {         case 1:         {            png_bytep sp = png_ptr->row_buf + 1;            png_bytep dp = row;            int s_inc, s_start, s_end;            int m = 0x80;            int shift;            png_uint_32 i;            png_uint_32 row_width = png_ptr->width;#if defined(PNG_READ_PACKSWAP_SUPPORTED)            if (png_ptr->transformations & PNG_PACKSWAP)            {                s_start = 0;                s_end = 7;                s_inc = 1;            }            else#endif            {                s_start = 7;                s_end = 0;                s_inc = -1;            }            shift = s_start;            for (i = 0; i < row_width; i++)            {               if (m & mask)               {                  int value;                  value = (*sp >> shift) & 0x01;                  *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);                  *dp |= (png_byte)(value << shift);               }               if (shift == s_end)               {                  shift = s_start;                  sp++;                  dp++;               }               else                  shift += s_inc;               if (m == 1)                  m = 0x80;               else                  m >>= 1;            }            break;         }         case 2:         {            png_bytep sp = png_ptr->row_buf + 1;            png_bytep dp = row;            int s_start, s_end, s_inc;            int m = 0x80;            int shift;            png_uint_32 i;            png_uint_32 row_width = png_ptr->width;            int value;#if defined(PNG_READ_PACKSWAP_SUPPORTED)            if (png_ptr->transformations & PNG_PACKSWAP)            {               s_start = 0;               s_end = 6;               s_inc = 2;            }            else#endif            {               s_start = 6;               s_end = 0;               s_inc = -2;            }            shift = s_start;            for (i = 0; i < row_width; i++)            {               if (m & mask)               {                  value = (*sp >> shift) & 0x03;                  *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);                  *dp |= (png_byte)(value << shift);               }               if (shift == s_end)               {                  shift = s_start;                  sp++;                  dp++;               }               else                  shift += s_inc;               if (m == 1)                  m = 0x80;               else                  m >>= 1;            }            break;         }         case 4:         {            png_bytep sp = png_ptr->row_buf + 1;            png_bytep dp = row;            int s_start, s_end, s_inc;            int m = 0x80;            int shift;            png_uint_32 i;            png_uint_32 row_width = png_ptr->width;            int value;#if defined(PNG_READ_PACKSWAP_SUPPORTED)            if (png_ptr->transformations & PNG_PACKSWAP)            {               s_start = 0;               s_end = 4;               s_inc = 4;            }            else#endif            {               s_start = 4;               s_end = 0;               s_inc = -4;            }            shift = s_start;            for (i = 0; i < row_width; i++)            {               if (m & mask)               {                  value = (*sp >> shift) & 0xf;                  *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);                  *dp |= (png_byte)(value << shift);               }               if (shift == s_end)               {                  shift = s_start;                  sp++;                  dp++;               }               else                  shift += s_inc;               if (m == 1)                  m = 0x80;               else                  m >>= 1;            }            break;         }         default:         {            png_bytep sp = png_ptr->row_buf + 1;            png_bytep dp = row;            png_size_t pixel_bytes = (png_ptr->row_info.pixel_depth >> 3);            png_uint_32 i;            png_uint_32 row_width = png_ptr->width;            png_byte m = 0x80;            for (i = 0; i < row_width; i++)            {               if (m & mask)               {                  png_memcpy(dp, sp, pixel_bytes);               }               sp += pixel_bytes;               dp += pixel_bytes;               if (m == 1)                  m = 0x80;               else                  m >>= 1;            }            break;         }      }   }}