Outputs various dimensions and positions in the image related to the Adam7 reduced images. passw: output containing the width of the 7 passes passh: output containing the height of the 7 passes filter_passstart: output containing the index of the start and end of each reduced image with filter bytes padded_passstart output containing the index of the start and end of each reduced image when with
| 4003 | end at a full byte |
| 4004 | */ |
| 4005 | static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8], |
| 4006 | size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp) { |
| 4007 | /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/ |
| 4008 | unsigned i; |
| 4009 | |
| 4010 | /*calculate width and height in pixels of each pass*/ |
| 4011 | for(i = 0; i != 7; ++i) { |
| 4012 | passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i]; |
| 4013 | passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i]; |
| 4014 | if(passw[i] == 0) passh[i] = 0; |
| 4015 | if(passh[i] == 0) passw[i] = 0; |
| 4016 | } |
| 4017 | |
| 4018 | filter_passstart[0] = padded_passstart[0] = passstart[0] = 0; |
| 4019 | for(i = 0; i != 7; ++i) { |
| 4020 | /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/ |
| 4021 | filter_passstart[i + 1] = filter_passstart[i] |
| 4022 | + ((passw[i] && passh[i]) ? passh[i] * (1u + (passw[i] * bpp + 7u) / 8u) : 0); |
| 4023 | /*bits padded if needed to fill full byte at end of each scanline*/ |
| 4024 | padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7u) / 8u); |
| 4025 | /*only padded at end of reduced image*/ |
| 4026 | passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7u) / 8u; |
| 4027 | } |
| 4028 | } |
| 4029 | |
| 4030 | #ifdef LODEPNG_COMPILE_DECODER |
| 4031 |
no outgoing calls
no test coverage detected