]>
Commit | Line | Data |
---|---|---|
5240089a AM |
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 | |
6 | ||
7 | static void user_read_data(png_structp png_ptr, png_bytep data, png_size_t length) | |
8 | { | |
9 | - GFpng *ctx = (GFpng*)png_ptr->io_ptr; | |
10 | + GFpng *ctx = (GFpng*)png_get_io_ptr(png_ptr); | |
11 | ||
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 | |
15 | } | |
16 | static void user_error_fn(png_structp png_ptr,png_const_charp error_msg) | |
17 | { | |
18 | - longjmp(png_ptr->jmpbuf, 1); | |
19 | + longjmp(png_jmpbuf(png_ptr), 1); | |
20 | } | |
21 | ||
22 | GF_EXPORT | |
23 | @@ -409,7 +409,11 @@ GF_Err gf_img_png_dec(char *png, u32 png | |
24 | png_struct *png_ptr; | |
25 | png_info *info_ptr; | |
26 | png_byte **rows; | |
27 | - u32 i, stride, bpp; | |
28 | + u32 i, stride; | |
29 | + int num_trans; | |
30 | + png_bytep trans_alpha; | |
31 | + png_color_16p trans_color; | |
32 | + int bit_depth, color_type; | |
33 | ||
34 | if ((png_size<8) || png_sig_cmp(png, 0, 8) ) return GF_NON_COMPLIANT_BITSTREAM; | |
35 | ||
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); | |
38 | return GF_IO_ERR; | |
39 | } | |
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); | |
44 | return GF_IO_ERR; | |
45 | @@ -434,31 +438,31 @@ GF_Err gf_img_png_dec(char *png, u32 png | |
46 | ||
47 | png_read_info(png_ptr, info_ptr); | |
48 | ||
49 | + png_get_IHDR(png_ptr,info_ptr,width,height,&bit_depth,&color_type,NULL,NULL,NULL); | |
50 | /*unpaletize*/ | |
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); | |
55 | } | |
56 | - if (info_ptr->num_trans) { | |
57 | + png_get_tRNS(png_ptr,info_ptr,&trans_alpha,&num_trans,&trans_color); | |
58 | + if (num_trans) { | |
59 | png_set_tRNS_to_alpha(png_ptr); | |
60 | png_read_update_info(png_ptr, info_ptr); | |
61 | } | |
62 | ||
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); | |
67 | ||
68 | - switch (info_ptr->pixel_depth) { | |
69 | - case 8: | |
70 | + switch (color_type) { | |
71 | + case PNG_COLOR_TYPE_GRAY: | |
72 | *pixel_format = GF_PIXEL_GREYSCALE; | |
73 | break; | |
74 | - case 16: | |
75 | + case PNG_COLOR_TYPE_GRAY_ALPHA: | |
76 | *pixel_format = GF_PIXEL_ALPHAGREY; | |
77 | break; | |
78 | - case 24: | |
79 | + case PNG_COLOR_TYPE_RGB: | |
80 | *pixel_format = GF_PIXEL_RGB_24; | |
81 | break; | |
82 | - case 32: | |
83 | + case PNG_COLOR_TYPE_RGB_ALPHA: | |
84 | *pixel_format = GF_PIXEL_RGBA; | |
85 | break; | |
86 | default: | |
87 | @@ -469,18 +473,17 @@ GF_Err gf_img_png_dec(char *png, u32 png | |
88 | } | |
89 | ||
90 | /*new cfg, reset*/ | |
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; | |
98 | } | |
99 | - *dst_size = info_ptr->width * info_ptr->height * bpp; | |
100 | ||
101 | /*read*/ | |
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; | |
108 | } | |
109 | png_read_image(png_ptr, rows); | |
110 | @@ -495,7 +498,7 @@ GF_Err gf_img_png_dec(char *png, u32 png | |
111 | ||
112 | void my_png_write(png_structp png, png_bytep data, png_size_t size) | |
113 | { | |
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); | |
117 | p->pos += size; | |
118 | } |