fix issue #302 rdpng.c contains mixed declaration, which MSVC can't accept.

This commit is contained in:
Gary Zhang
2018-08-24 09:27:37 +08:00
parent 86a9bd1b08
commit 9454cd365a

37
rdpng.c
View File

@@ -68,6 +68,19 @@ METHODDEF(void)
start_input_png (j_compress_ptr cinfo, cjpeg_source_ptr sinfo) start_input_png (j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
{ {
png_source_struct *source = (png_source_struct *)sinfo; png_source_struct *source = (png_source_struct *)sinfo;
png_uint_32 width, height;
int bit_depth, color_type;
int has_srgb_chunk;
double gamma;
png_bytep profile;
png_charp unused1;
int unused2;
png_uint_32 proflen;
int has_profile;
size_t datalen;
JOCTET *dataptr;
struct jpeg_marker_struct *marker;
png_size_t rowbytes;
source->png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, cinfo, error_input_png, NULL); source->png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, cinfo, error_input_png, NULL);
source->info_ptr = png_create_info_struct(source->png_ptr); source->info_ptr = png_create_info_struct(source->png_ptr);
@@ -85,8 +98,6 @@ start_input_png (j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
png_init_io(source->png_ptr, source->pub.input_file); png_init_io(source->png_ptr, source->pub.input_file);
png_read_info(source->png_ptr, source->info_ptr); png_read_info(source->png_ptr, source->info_ptr);
png_uint_32 width, height;
int bit_depth, color_type;
png_get_IHDR(source->png_ptr, source->info_ptr, &width, &height, png_get_IHDR(source->png_ptr, source->info_ptr, &width, &height,
&bit_depth, &color_type, NULL, NULL, NULL); &bit_depth, &color_type, NULL, NULL, NULL);
@@ -111,9 +122,9 @@ start_input_png (j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
cinfo->image_width = width; cinfo->image_width = width;
cinfo->image_height = height; cinfo->image_height = height;
int has_srgb_chunk = png_get_valid(source->png_ptr, source->info_ptr, PNG_INFO_sRGB); has_srgb_chunk = png_get_valid(source->png_ptr, source->info_ptr, PNG_INFO_sRGB);
double gamma = 0.45455; gamma = 0.45455;
if (!has_srgb_chunk) { if (!has_srgb_chunk) {
png_get_gAMA(source->png_ptr, source->info_ptr, &gamma); png_get_gAMA(source->png_ptr, source->info_ptr, &gamma);
} }
@@ -121,11 +132,11 @@ start_input_png (j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
sinfo->get_pixel_rows = get_pixel_rows_png; sinfo->get_pixel_rows = get_pixel_rows_png;
source->pub.marker_list = NULL; source->pub.marker_list = NULL;
png_bytep profile = NULL; profile = NULL;
png_charp unused1 = NULL; unused1 = NULL;
int unused2 = 0; unused2 = 0;
png_uint_32 proflen = 0; proflen = 0;
int has_profile = 0; has_profile = 0;
if (has_srgb_chunk) { if (has_srgb_chunk) {
/* PNG can declare use of an sRGB profile without embedding an ICC file, but JPEG doesn't have such feature */ /* PNG can declare use of an sRGB profile without embedding an ICC file, but JPEG doesn't have such feature */
@@ -138,11 +149,11 @@ start_input_png (j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
if (has_profile && profile && proflen) { if (has_profile && profile && proflen) {
if (proflen < 65535-14) { if (proflen < 65535-14) {
size_t datalen = proflen + 14; datalen = proflen + 14;
JOCTET *dataptr = (*cinfo->mem->alloc_small)((j_common_ptr)cinfo, JPOOL_IMAGE, datalen); dataptr = (*cinfo->mem->alloc_small)((j_common_ptr)cinfo, JPOOL_IMAGE, datalen);
memcpy(dataptr, "ICC_PROFILE\0\x01\x01", 14); memcpy(dataptr, "ICC_PROFILE\0\x01\x01", 14);
memcpy(dataptr + 14, profile, proflen); memcpy(dataptr + 14, profile, proflen);
struct jpeg_marker_struct *marker = (*cinfo->mem->alloc_small)((j_common_ptr)cinfo, JPOOL_IMAGE, sizeof(struct jpeg_marker_struct)); marker = (*cinfo->mem->alloc_small)((j_common_ptr)cinfo, JPOOL_IMAGE, sizeof(struct jpeg_marker_struct));
marker->next = NULL; marker->next = NULL;
marker->marker = JPEG_APP0+2; marker->marker = JPEG_APP0+2;
marker->original_length = 0; marker->original_length = 0;
@@ -156,7 +167,7 @@ start_input_png (j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
png_read_update_info(source->png_ptr, source->info_ptr); png_read_update_info(source->png_ptr, source->info_ptr);
png_size_t rowbytes = png_get_rowbytes(source->png_ptr, source->info_ptr); rowbytes = png_get_rowbytes(source->png_ptr, source->info_ptr);
source->pub.buffer = (*cinfo->mem->alloc_sarray)((j_common_ptr)cinfo, JPOOL_IMAGE, (JDIMENSION)rowbytes, 1); source->pub.buffer = (*cinfo->mem->alloc_sarray)((j_common_ptr)cinfo, JPOOL_IMAGE, (JDIMENSION)rowbytes, 1);
source->pub.buffer_height = 1; source->pub.buffer_height = 1;