2 png_push_process_row(png_structp png_ptr)
4 png_ptr->row_info.color_type = png_ptr->color_type;
5 png_ptr->row_info.width = png_ptr->iwidth;
6 png_ptr->row_info.channels = png_ptr->channels;
7 png_ptr->row_info.bit_depth = png_ptr->bit_depth;
8 png_ptr->row_info.pixel_depth = png_ptr->pixel_depth;
10 png_ptr->row_info.rowbytes = PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
11 png_ptr->row_info.width);
13 png_read_filter_row(png_ptr, &(png_ptr->row_info),
14 png_ptr->row_buf + 1, png_ptr->prev_row + 1,
15 (int)(png_ptr->row_buf[0]));
17 png_memcpy(png_ptr->prev_row, png_ptr->row_buf, png_ptr->rowbytes + 1);
19 if (png_ptr->transformations || (png_ptr->flags&PNG_FLAG_STRIP_ALPHA))
20 png_do_read_transformations(png_ptr);
22 #ifdef PNG_READ_INTERLACING_SUPPORTED
23 /* Blow up interlaced rows to full size */
24 if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
26 if (png_ptr->pass < 6)
27 /* old interface (pre-1.0.9):
28 png_do_read_interlace(&(png_ptr->row_info),
29 png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations);
31 png_do_read_interlace(png_ptr);
33 switch (png_ptr->pass)
38 for (i = 0; i < 8 && png_ptr->pass == 0; i++)
40 png_push_have_row(png_ptr, png_ptr->row_buf + 1);
41 png_read_push_finish_row(png_ptr); /* Updates png_ptr->pass */
44 if (png_ptr->pass == 2) /* Pass 1 might be empty */
46 for (i = 0; i < 4 && png_ptr->pass == 2; i++)
48 png_push_have_row(png_ptr, NULL);
49 png_read_push_finish_row(png_ptr);
53 if (png_ptr->pass == 4 && png_ptr->height <= 4)
55 for (i = 0; i < 2 && png_ptr->pass == 4; i++)
57 png_push_have_row(png_ptr, NULL);
58 png_read_push_finish_row(png_ptr);
62 if (png_ptr->pass == 6 && png_ptr->height <= 4)
64 png_push_have_row(png_ptr, NULL);
65 png_read_push_finish_row(png_ptr);
74 for (i = 0; i < 8 && png_ptr->pass == 1; i++)
76 png_push_have_row(png_ptr, png_ptr->row_buf + 1);
77 png_read_push_finish_row(png_ptr);
80 if (png_ptr->pass == 2) /* Skip top 4 generated rows */
82 for (i = 0; i < 4 && png_ptr->pass == 2; i++)
84 png_push_have_row(png_ptr, NULL);
85 png_read_push_finish_row(png_ptr);
96 for (i = 0; i < 4 && png_ptr->pass == 2; i++)
98 png_push_have_row(png_ptr, png_ptr->row_buf + 1);
99 png_read_push_finish_row(png_ptr);
102 for (i = 0; i < 4 && png_ptr->pass == 2; i++)
104 png_push_have_row(png_ptr, NULL);
105 png_read_push_finish_row(png_ptr);
108 if (png_ptr->pass == 4) /* Pass 3 might be empty */
110 for (i = 0; i < 2 && png_ptr->pass == 4; i++)
112 png_push_have_row(png_ptr, NULL);
113 png_read_push_finish_row(png_ptr);
124 for (i = 0; i < 4 && png_ptr->pass == 3; i++)
126 png_push_have_row(png_ptr, png_ptr->row_buf + 1);
127 png_read_push_finish_row(png_ptr);
130 if (png_ptr->pass == 4) /* Skip top two generated rows */
132 for (i = 0; i < 2 && png_ptr->pass == 4; i++)
134 png_push_have_row(png_ptr, NULL);
135 png_read_push_finish_row(png_ptr);
146 for (i = 0; i < 2 && png_ptr->pass == 4; i++)
148 png_push_have_row(png_ptr, png_ptr->row_buf + 1);
149 png_read_push_finish_row(png_ptr);
152 for (i = 0; i < 2 && png_ptr->pass == 4; i++)
154 png_push_have_row(png_ptr, NULL);
155 png_read_push_finish_row(png_ptr);
158 if (png_ptr->pass == 6) /* Pass 5 might be empty */
160 png_push_have_row(png_ptr, NULL);
161 png_read_push_finish_row(png_ptr);
171 for (i = 0; i < 2 && png_ptr->pass == 5; i++)
173 png_push_have_row(png_ptr, png_ptr->row_buf + 1);
174 png_read_push_finish_row(png_ptr);
177 if (png_ptr->pass == 6) /* Skip top generated row */
179 png_push_have_row(png_ptr, NULL);
180 png_read_push_finish_row(png_ptr);
187 png_push_have_row(png_ptr, png_ptr->row_buf + 1);
188 png_read_push_finish_row(png_ptr);
190 if (png_ptr->pass != 6)
193 png_push_have_row(png_ptr, NULL);
194 png_read_push_finish_row(png_ptr);
201 png_push_have_row(png_ptr, png_ptr->row_buf + 1);
202 png_read_push_finish_row(png_ptr);