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
| 3914 | end at a full byte |
| 3915 | */ |
| 3916 | static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8], |
| 3917 | size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp) |
| 3918 | { |
| 3919 | /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/ |
| 3920 | unsigned i; |
| 3921 | |
| 3922 | /*calculate width and height in pixels of each pass*/ |
| 3923 | for(i = 0; i < 7; i++) |
| 3924 | { |
| 3925 | passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i]; |
| 3926 | passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i]; |
| 3927 | if(passw[i] == 0) passh[i] = 0; |
| 3928 | if(passh[i] == 0) passw[i] = 0; |
| 3929 | } |
| 3930 | |
| 3931 | filter_passstart[0] = padded_passstart[0] = passstart[0] = 0; |
| 3932 | for(i = 0; i < 7; i++) |
| 3933 | { |
| 3934 | /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/ |
| 3935 | filter_passstart[i + 1] = filter_passstart[i] |
| 3936 | + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0); |
| 3937 | /*bits padded if needed to fill full byte at end of each scanline*/ |
| 3938 | padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8); |
| 3939 | /*only padded at end of reduced image*/ |
| 3940 | passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8; |
| 3941 | } |
| 3942 | } |
| 3943 | |
| 3944 | #ifdef LODEPNG_COMPILE_DECODER |
| 3945 |
no outgoing calls
no test coverage detected