Merge "Forward compatibility fixes"
This commit is contained in:
@ -12,13 +12,15 @@
|
|||||||
#include <utils/ByteOrder.h>
|
#include <utils/ByteOrder.h>
|
||||||
|
|
||||||
#include <png.h>
|
#include <png.h>
|
||||||
|
#include <zlib.h>
|
||||||
|
|
||||||
#define NOISY(x) //x
|
#define NOISY(x) //x
|
||||||
|
|
||||||
static void
|
static void
|
||||||
png_write_aapt_file(png_structp png_ptr, png_bytep data, png_size_t length)
|
png_write_aapt_file(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
{
|
{
|
||||||
status_t err = ((AaptFile*)png_ptr->io_ptr)->writeData(data, length);
|
AaptFile* aaptfile = (AaptFile*) png_get_io_ptr(png_ptr);
|
||||||
|
status_t err = aaptfile->writeData(data, length);
|
||||||
if (err != NO_ERROR) {
|
if (err != NO_ERROR) {
|
||||||
png_error(png_ptr, "Write Error");
|
png_error(png_ptr, "Write Error");
|
||||||
}
|
}
|
||||||
@ -90,7 +92,7 @@ static void read_png(const char* imageName,
|
|||||||
png_set_palette_to_rgb(read_ptr);
|
png_set_palette_to_rgb(read_ptr);
|
||||||
|
|
||||||
if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)
|
if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)
|
||||||
png_set_gray_1_2_4_to_8(read_ptr);
|
png_set_expand_gray_1_2_4_to_8(read_ptr);
|
||||||
|
|
||||||
if (png_get_valid(read_ptr, read_info, PNG_INFO_tRNS)) {
|
if (png_get_valid(read_ptr, read_info, PNG_INFO_tRNS)) {
|
||||||
//printf("Has PNG_INFO_tRNS!\n");
|
//printf("Has PNG_INFO_tRNS!\n");
|
||||||
@ -109,7 +111,7 @@ static void read_png(const char* imageName,
|
|||||||
png_read_update_info(read_ptr, read_info);
|
png_read_update_info(read_ptr, read_info);
|
||||||
|
|
||||||
outImageInfo->rows = (png_bytepp)malloc(
|
outImageInfo->rows = (png_bytepp)malloc(
|
||||||
outImageInfo->height * png_sizeof(png_bytep));
|
outImageInfo->height * sizeof(png_bytep));
|
||||||
outImageInfo->allocHeight = outImageInfo->height;
|
outImageInfo->allocHeight = outImageInfo->height;
|
||||||
outImageInfo->allocRows = outImageInfo->rows;
|
outImageInfo->allocRows = outImageInfo->rows;
|
||||||
|
|
||||||
@ -573,7 +575,7 @@ static status_t do_9patch(const char* imageName, image_info* image)
|
|||||||
image->info9Patch.paddingTop, image->info9Patch.paddingBottom));
|
image->info9Patch.paddingTop, image->info9Patch.paddingBottom));
|
||||||
|
|
||||||
// Remove frame from image.
|
// Remove frame from image.
|
||||||
image->rows = (png_bytepp)malloc((H-2) * png_sizeof(png_bytep));
|
image->rows = (png_bytepp)malloc((H-2) * sizeof(png_bytep));
|
||||||
for (i=0; i<(H-2); i++) {
|
for (i=0; i<(H-2); i++) {
|
||||||
image->rows[i] = image->allocRows[i+1];
|
image->rows[i] = image->allocRows[i+1];
|
||||||
memmove(image->rows[i], image->rows[i]+4, (W-2)*4);
|
memmove(image->rows[i], image->rows[i]+4, (W-2)*4);
|
||||||
@ -984,7 +986,7 @@ static void write_png(const char* imageName,
|
|||||||
unknowns[0].data = NULL;
|
unknowns[0].data = NULL;
|
||||||
unknowns[1].data = NULL;
|
unknowns[1].data = NULL;
|
||||||
|
|
||||||
png_bytepp outRows = (png_bytepp) malloc((int) imageInfo.height * png_sizeof(png_bytep));
|
png_bytepp outRows = (png_bytepp) malloc((int) imageInfo.height * sizeof(png_bytep));
|
||||||
if (outRows == (png_bytepp) 0) {
|
if (outRows == (png_bytepp) 0) {
|
||||||
printf("Can't allocate output buffer!\n");
|
printf("Can't allocate output buffer!\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -1073,18 +1075,19 @@ static void write_png(const char* imageName,
|
|||||||
unknowns[b_index].size = chunk_size;
|
unknowns[b_index].size = chunk_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < chunk_count; i++) {
|
||||||
|
unknowns[i].location = PNG_HAVE_PLTE;
|
||||||
|
}
|
||||||
png_set_keep_unknown_chunks(write_ptr, PNG_HANDLE_CHUNK_ALWAYS,
|
png_set_keep_unknown_chunks(write_ptr, PNG_HANDLE_CHUNK_ALWAYS,
|
||||||
chunk_names, chunk_count);
|
chunk_names, chunk_count);
|
||||||
png_set_unknown_chunks(write_ptr, write_info, unknowns, chunk_count);
|
png_set_unknown_chunks(write_ptr, write_info, unknowns, chunk_count);
|
||||||
// XXX I can't get this to work without forcibly changing
|
#if PNG_LIBPNG_VER < 10600
|
||||||
// the location to what I want... which apparently is supposed
|
/* Deal with unknown chunk location bug in 1.5.x and earlier */
|
||||||
// to be a private API, but everything else I have tried results
|
|
||||||
// in the location being set to what I -last- wrote so I never
|
|
||||||
// get written. :p
|
|
||||||
png_set_unknown_chunk_location(write_ptr, write_info, 0, PNG_HAVE_PLTE);
|
png_set_unknown_chunk_location(write_ptr, write_info, 0, PNG_HAVE_PLTE);
|
||||||
if (imageInfo.haveLayoutBounds) {
|
if (imageInfo.haveLayoutBounds) {
|
||||||
png_set_unknown_chunk_location(write_ptr, write_info, 1, PNG_HAVE_PLTE);
|
png_set_unknown_chunk_location(write_ptr, write_info, 1, PNG_HAVE_PLTE);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1092,7 +1095,9 @@ static void write_png(const char* imageName,
|
|||||||
|
|
||||||
png_bytepp rows;
|
png_bytepp rows;
|
||||||
if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) {
|
if (color_type == PNG_COLOR_TYPE_RGB || color_type == PNG_COLOR_TYPE_RGB_ALPHA) {
|
||||||
png_set_filler(write_ptr, 0, PNG_FILLER_AFTER);
|
if (color_type == PNG_COLOR_TYPE_RGB) {
|
||||||
|
png_set_filler(write_ptr, 0, PNG_FILLER_AFTER);
|
||||||
|
}
|
||||||
rows = imageInfo.rows;
|
rows = imageInfo.rows;
|
||||||
} else {
|
} else {
|
||||||
rows = outRows;
|
rows = outRows;
|
||||||
|
Reference in New Issue
Block a user