fbd7dcfb9f8868d89ac6746bd7eafaedf950d748
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
);