Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 378467
Collapse All | Expand All

(-)metapixel-1.0.2.orig/rwimg/rwpng.c (-28 / +34 lines)
Lines 57-75 Link Here
57
    data->end_info = png_create_info_struct(data->png_ptr);
57
    data->end_info = png_create_info_struct(data->png_ptr);
58
    assert(data->end_info != 0);
58
    assert(data->end_info != 0);
59
59
60
    if (setjmp(data->png_ptr->jmpbuf))
60
    if (setjmp(data->png_jmpbuf(png_ptr)))
61
	assert(0);
61
	assert(0);
62
62
63
    png_init_io(data->png_ptr, data->file);
63
    png_init_io(data->png_ptr, data->file);
64
64
65
    png_read_info(data->png_ptr, data->info_ptr);
65
    png_read_info(data->png_ptr, data->info_ptr);
66
66
67
    *width = data->info_ptr->width;
67
    *width = data->png_get_image_width(png_ptr, info_ptr);
68
    *height = data->info_ptr->height;
68
    *height = data->png_get_image_height(png_ptr, info_ptr);
69
69
70
    assert(data->info_ptr->bit_depth == 8 || data->info_ptr->bit_depth == 16);
70
    assert(data->png_get_bit_depth(png_ptr, info_ptr) == 8 || data->png_get_bit_depth(png_ptr, info_ptr) == 16);
71
    assert(data->info_ptr->color_type == PNG_COLOR_TYPE_RGB || data->info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA);
71
    assert(data->png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB || data->png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB_ALPHA);
72
    assert(data->info_ptr->interlace_type == PNG_INTERLACE_NONE);
72
    assert(data->png_get_interlace_type(png_ptr, info_ptr) == PNG_INTERLACE_NONE);
73
73
74
    data->have_read = 0;
74
    data->have_read = 0;
75
75
Lines 84-112 Link Here
84
    int bps, spp;
84
    int bps, spp;
85
    unsigned char *row;
85
    unsigned char *row;
86
86
87
    if (setjmp(data->png_ptr->jmpbuf))
87
    if (setjmp(data->png_jmpbuf(png_ptr)))
88
	assert(0);
88
	assert(0);
89
89
90
    if (data->info_ptr->color_type == PNG_COLOR_TYPE_RGB)
90
    if (data->png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB)
91
	spp = 3;
91
	spp = 3;
92
    else
92
    else
93
	spp = 4;
93
	spp = 4;
94
94
95
    if (data->info_ptr->bit_depth == 16)
95
    if (data->png_get_bit_depth(png_ptr, info_ptr) == 16)
96
	bps = 2;
96
	bps = 2;
97
    else
97
    else
98
	bps = 1;
98
	bps = 1;
99
99
100
    row = (unsigned char*)malloc(data->info_ptr->width * spp * bps);
100
    row = (unsigned char*)malloc(data->png_get_image_width(png_ptr, info_ptr) * spp * bps);
101
101
102
    for (i = 0; i < num_lines; ++i)
102
    for (i = 0; i < num_lines; ++i)
103
    {
103
    {
104
	int j, channel;
104
	int j, channel;
105
105
106
	png_read_row(data->png_ptr, (png_bytep)row, 0);
106
	png_read_row(data->png_ptr, (png_bytep)row, 0);
107
	for (j = 0; j < data->info_ptr->width; ++j)
107
	for (j = 0; j < data->png_get_image_width(png_ptr, info_ptr); ++j)
108
	    for (channel = 0; channel < 3; ++channel)
108
	    for (channel = 0; channel < 3; ++channel)
109
		lines[i * data->info_ptr->width * 3 + j * 3 + channel] = row[j * spp * bps + channel * bps];
109
		lines[i * data->png_get_image_width(png_ptr, info_ptr) * 3 + j * 3 + channel] = row[j * spp * bps + channel * bps];
110
    }
110
    }
111
111
112
    free(row);
112
    free(row);
Lines 119-125 Link Here
119
{
119
{
120
    png_data_t *data = (png_data_t*)_data;
120
    png_data_t *data = (png_data_t*)_data;
121
121
122
    if (setjmp(data->png_ptr->jmpbuf))
122
    if (setjmp(data->png_jmpbuf(png_ptr)))
123
	assert(0);
123
	assert(0);
124
124
125
    if (data->have_read)
125
    if (data->have_read)
Lines 148-154 Link Here
148
    data->info_ptr = png_create_info_struct(data->png_ptr);
148
    data->info_ptr = png_create_info_struct(data->png_ptr);
149
    assert(data->info_ptr != 0);
149
    assert(data->info_ptr != 0);
150
150
151
    if (setjmp(data->png_ptr->jmpbuf))
151
    if (setjmp(data->png_jmpbuf(png_ptr)))
152
	assert(0);
152
	assert(0);
153
153
154
    if (pixel_stride == 4)
154
    if (pixel_stride == 4)
Lines 156-173 Link Here
156
156
157
    png_init_io(data->png_ptr, data->file);
157
    png_init_io(data->png_ptr, data->file);
158
158
159
    data->info_ptr->width = width;
159
    png_colorp palette;
160
    data->info_ptr->height = height;
160
    int num_palette;
161
    data->info_ptr->valid = 0;
161
    int num_trans;
162
    data->info_ptr->rowbytes = width * 3;
162
    int compression_type;
163
    data->info_ptr->palette = 0;
163
    int filter_type;
164
    data->info_ptr->num_palette = 0;
164
165
    data->info_ptr->num_trans = 0;
165
    data->png_get_image_width(png_ptr, info_ptr) = width;
166
    data->info_ptr->bit_depth = 8;
166
    data->png_get_image_height(png_ptr, info_ptr) = height;
167
    data->info_ptr->color_type = PNG_COLOR_TYPE_RGB;
167
    data->png_get_valid(png_ptr, info_ptr) = 0;
168
    data->info_ptr->compression_type = PNG_COMPRESSION_TYPE_DEFAULT;
168
    data->png_get_rowbytes(png_ptr, info_ptr) = width * 3;
169
    data->info_ptr->filter_type = PNG_FILTER_TYPE_DEFAULT;
169
    data->palette = 0;
170
    data->info_ptr->interlace_type = PNG_INTERLACE_NONE;
170
    data->num_palette = 0;
171
    data->num_trans = 0;
172
    data->png_get_bit_depth(png_ptr, info_ptr) = 8;
173
    data->png_get_color_type(png_ptr, info_ptr) = PNG_COLOR_TYPE_RGB;
174
    data->compression_type = PNG_COMPRESSION_TYPE_DEFAULT;
175
    data->filter_type = PNG_FILTER_TYPE_DEFAULT;
176
    data->png_get_interlace_type(png_ptr, info_ptr) = PNG_INTERLACE_NONE;
171
177
172
    png_write_info(data->png_ptr, data->info_ptr);
178
    png_write_info(data->png_ptr, data->info_ptr);
173
179
Lines 182-188 Link Here
182
    png_data_t *data = (png_data_t*)_data;
188
    png_data_t *data = (png_data_t*)_data;
183
    int i;
189
    int i;
184
190
185
    if (setjmp(data->png_ptr->jmpbuf))
191
    if (setjmp(data->png_jmpbuf(png_ptr)))
186
	assert(0);
192
	assert(0);
187
193
188
    for (i = 0; i < num_lines; ++i)
194
    for (i = 0; i < num_lines; ++i)
Lines 194-200 Link Here
194
{
200
{
195
    png_data_t *data = (png_data_t*)_data;
201
    png_data_t *data = (png_data_t*)_data;
196
202
197
    if (setjmp(data->png_ptr->jmpbuf))
203
    if (setjmp(data->png_jmpbuf(png_ptr)))
198
	assert(0);
204
	assert(0);
199
205
200
    png_write_end(data->png_ptr, data->info_ptr);
206
    png_write_end(data->png_ptr, data->info_ptr);

Return to bug 378467