1 Index: gpac/src/media_tools/img.c
2 ===================================================================
3 --- gpac.orig/src/media_tools/img.c
4 +++ gpac/src/media_tools/img.c
5 @@ -388,7 +388,7 @@ typedef struct
7 static void user_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
9 - GFpng *ctx = (GFpng*)png_ptr->io_ptr;
10 + GFpng *ctx = (GFpng*)png_get_io_ptr(png_ptr);
12 if (ctx->pos + length > ctx->size) {
13 png_error(png_ptr, "Read Error");
14 @@ -399,7 +399,7 @@ static void user_read_data(png_structp p
16 static void user_error_fn(png_structp png_ptr,png_const_charp error_msg)
18 - longjmp(png_ptr->jmpbuf, 1);
19 + longjmp(png_jmpbuf(png_ptr), 1);
23 @@ -409,7 +409,11 @@ GF_Err gf_img_png_dec(char *png, u32 png
30 + png_bytep trans_alpha;
31 + png_color_16p trans_color;
32 + int bit_depth, color_type;
34 if ((png_size<8) || png_sig_cmp(png, 0, 8) ) return GF_NON_COMPLIANT_BITSTREAM;
36 @@ -424,7 +428,7 @@ GF_Err gf_img_png_dec(char *png, u32 png
37 png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
40 - if (setjmp(png_ptr->jmpbuf)) {
41 + if (setjmp(png_jmpbuf(png_ptr))) {
42 png_destroy_info_struct(png_ptr,(png_infopp) & info_ptr);
43 png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
45 @@ -434,31 +438,31 @@ GF_Err gf_img_png_dec(char *png, u32 png
47 png_read_info(png_ptr, info_ptr);
49 + png_get_IHDR(png_ptr,info_ptr,width,height,&bit_depth,&color_type,NULL,NULL,NULL);
51 - if (info_ptr->color_type==PNG_COLOR_TYPE_PALETTE) {
52 + if (color_type==PNG_COLOR_TYPE_PALETTE) {
53 png_set_expand(png_ptr);
54 png_read_update_info(png_ptr, info_ptr);
56 - if (info_ptr->num_trans) {
57 + png_get_tRNS(png_ptr,info_ptr,&trans_alpha,&num_trans,&trans_color);
59 png_set_tRNS_to_alpha(png_ptr);
60 png_read_update_info(png_ptr, info_ptr);
63 - bpp = info_ptr->pixel_depth / 8;
64 - *width = info_ptr->width;
65 - *height = info_ptr->height;
66 + png_get_IHDR(png_ptr,info_ptr,width,height,&bit_depth,&color_type,NULL,NULL,NULL);
68 - switch (info_ptr->pixel_depth) {
70 + switch (color_type) {
71 + case PNG_COLOR_TYPE_GRAY:
72 *pixel_format = GF_PIXEL_GREYSCALE;
75 + case PNG_COLOR_TYPE_GRAY_ALPHA:
76 *pixel_format = GF_PIXEL_ALPHAGREY;
79 + case PNG_COLOR_TYPE_RGB:
80 *pixel_format = GF_PIXEL_RGB_24;
83 + case PNG_COLOR_TYPE_RGB_ALPHA:
84 *pixel_format = GF_PIXEL_RGBA;
87 @@ -469,18 +473,17 @@ GF_Err gf_img_png_dec(char *png, u32 png
91 - if (*dst_size != info_ptr->width * info_ptr->height * bpp) {
92 - *dst_size = info_ptr->width * info_ptr->height * bpp;
93 + if (*dst_size != png_get_rowbytes(png_ptr, info_ptr) * png_get_image_height(png_ptr,info_ptr)) {
94 + *dst_size = png_get_rowbytes(png_ptr, info_ptr) * png_get_image_height(png_ptr,info_ptr);
95 png_destroy_info_struct(png_ptr,(png_infopp) & info_ptr);
96 png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
97 return GF_BUFFER_TOO_SMALL;
99 - *dst_size = info_ptr->width * info_ptr->height * bpp;
102 stride = png_get_rowbytes(png_ptr, info_ptr);
103 - rows = (png_bytepp) malloc(sizeof(png_bytep) * info_ptr->height);
104 - for (i=0; i<info_ptr->height; i++) {
105 + rows = (png_bytepp) malloc(sizeof(png_bytep) * png_get_image_height(png_ptr,info_ptr));
106 + for (i=0; i<png_get_image_height(png_ptr,info_ptr); i++) {
107 rows[i] = dst + i*stride;
109 png_read_image(png_ptr, rows);
110 @@ -495,7 +498,7 @@ GF_Err gf_img_png_dec(char *png, u32 png
112 void my_png_write(png_structp png, png_bytep data, png_size_t size)
114 - GFpng *p = (GFpng *)png->io_ptr;
115 + GFpng *p = (GFpng *)png_get_io_ptr(png);
116 memcpy(p->buffer+p->pos, data, sizeof(char)*size);