MCPcopy Create free account
hub / github.com/OpenXcom/OpenXcom / filterScanline

Function filterScanline

src/lodepng.cpp:5158–5220  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5156#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
5157
5158static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline,
5159 size_t length, size_t bytewidth, unsigned char filterType)
5160{
5161 size_t i;
5162 switch(filterType)
5163 {
5164 case 0: /*None*/
5165 for(i = 0; i < length; i++) out[i] = scanline[i];
5166 break;
5167 case 1: /*Sub*/
5168 if(prevline)
5169 {
5170 for(i = 0; i < bytewidth; i++) out[i] = scanline[i];
5171 for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth];
5172 }
5173 else
5174 {
5175 for(i = 0; i < bytewidth; i++) out[i] = scanline[i];
5176 for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth];
5177 }
5178 break;
5179 case 2: /*Up*/
5180 if(prevline)
5181 {
5182 for(i = 0; i < length; i++) out[i] = scanline[i] - prevline[i];
5183 }
5184 else
5185 {
5186 for(i = 0; i < length; i++) out[i] = scanline[i];
5187 }
5188 break;
5189 case 3: /*Average*/
5190 if(prevline)
5191 {
5192 for(i = 0; i < bytewidth; i++) out[i] = scanline[i] - prevline[i] / 2;
5193 for(i = bytewidth; i < length; i++) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) / 2);
5194 }
5195 else
5196 {
5197 for(i = 0; i < bytewidth; i++) out[i] = scanline[i];
5198 for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth] / 2;
5199 }
5200 break;
5201 case 4: /*Paeth*/
5202 if(prevline)
5203 {
5204 /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/
5205 for(i = 0; i < bytewidth; i++) out[i] = (scanline[i] - prevline[i]);
5206 for(i = bytewidth; i < length; i++)
5207 {
5208 out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth]));
5209 }
5210 }
5211 else
5212 {
5213 for(i = 0; i < bytewidth; i++) out[i] = scanline[i];
5214 /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/
5215 for(i = bytewidth; i < length; i++) out[i] = (scanline[i] - scanline[i - bytewidth]);

Callers 1

filterFunction · 0.85

Calls 1

paethPredictorFunction · 0.85

Tested by

no test coverage detected