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
| 3768 | end at a full byte |
| 3769 | */ |
| 3770 | static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8], |
| 3771 | size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp) |
| 3772 | { |
| 3773 | /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/ |
| 3774 | unsigned i; |
| 3775 | |
| 3776 | /*calculate width and height in pixels of each pass*/ |
| 3777 | for(i = 0; i < 7; i++) |
| 3778 | { |
| 3779 | passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i]; |
| 3780 | passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i]; |
| 3781 | if(passw[i] == 0) passh[i] = 0; |
| 3782 | if(passh[i] == 0) passw[i] = 0; |
| 3783 | } |
| 3784 | |
| 3785 | filter_passstart[0] = padded_passstart[0] = passstart[0] = 0; |
| 3786 | for(i = 0; i < 7; i++) |
| 3787 | { |
| 3788 | /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/ |
| 3789 | filter_passstart[i + 1] = filter_passstart[i] |
| 3790 | + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0); |
| 3791 | /*bits padded if needed to fill full byte at end of each scanline*/ |
| 3792 | padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8); |
| 3793 | /*only padded at end of reduced image*/ |
| 3794 | passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8; |
| 3795 | } |
| 3796 | } |
| 3797 | |
| 3798 | #ifdef LODEPNG_COMPILE_DECODER |
| 3799 |
no outgoing calls
no test coverage detected