mirror of
https://github.com/nothings/stb
synced 2024-12-14 12:07:13 +03:00
stb_image_write: optimize other PNG loops besides previous merge
This commit is contained in:
parent
d27796b585
commit
ddccc72c5b
@ -1049,16 +1049,14 @@ static void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int
|
|||||||
unsigned char *z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height-1-y : y);
|
unsigned char *z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height-1-y : y);
|
||||||
int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes;
|
int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes;
|
||||||
|
|
||||||
// sorry for not optimizing the other paths
|
if (type==0) {
|
||||||
if(type==0)
|
|
||||||
{
|
|
||||||
memcpy(line_buffer, z, width*n);
|
memcpy(line_buffer, z, width*n);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// first loop isn't optimized since it's just one pixel
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 0: line_buffer[i] = z[i]; break;
|
|
||||||
case 1: line_buffer[i] = z[i]; break;
|
case 1: line_buffer[i] = z[i]; break;
|
||||||
case 2: line_buffer[i] = z[i] - z[i-signed_stride]; break;
|
case 2: line_buffer[i] = z[i] - z[i-signed_stride]; break;
|
||||||
case 3: line_buffer[i] = z[i] - (z[i-signed_stride]>>1); break;
|
case 3: line_buffer[i] = z[i] - (z[i-signed_stride]>>1); break;
|
||||||
@ -1067,16 +1065,13 @@ static void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int
|
|||||||
case 6: line_buffer[i] = z[i]; break;
|
case 6: line_buffer[i] = z[i]; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (i=n; i < width*n; ++i) {
|
switch (type) {
|
||||||
switch (type) {
|
case 1: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-n]; break;
|
||||||
case 0: line_buffer[i] = z[i]; break;
|
case 2: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-signed_stride]; break;
|
||||||
case 1: line_buffer[i] = z[i] - z[i-n]; break;
|
case 3: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - ((z[i-n] + z[i-signed_stride])>>1); break;
|
||||||
case 2: line_buffer[i] = z[i] - z[i-signed_stride]; break;
|
case 4: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-signed_stride], z[i-signed_stride-n]); break;
|
||||||
case 3: line_buffer[i] = z[i] - ((z[i-n] + z[i-signed_stride])>>1); break;
|
case 5: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - (z[i-n]>>1); break;
|
||||||
case 4: line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-signed_stride], z[i-signed_stride-n]); break;
|
case 6: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break;
|
||||||
case 5: line_buffer[i] = z[i] - (z[i-n]>>1); break;
|
|
||||||
case 6: line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user