MCPcopy Create free account
hub / github.com/ValveSoftware/openvr / filterScanline

Function filterScanline

samples/shared/lodepng.cpp:5007–5069  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5005#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/
5006
5007static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline,
5008 size_t length, size_t bytewidth, unsigned char filterType)
5009{
5010 size_t i;
5011 switch(filterType)
5012 {
5013 case 0: /*None*/
5014 for(i = 0; i < length; i++) out[i] = scanline[i];
5015 break;
5016 case 1: /*Sub*/
5017 if(prevline)
5018 {
5019 for(i = 0; i < bytewidth; i++) out[i] = scanline[i];
5020 for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth];
5021 }
5022 else
5023 {
5024 for(i = 0; i < bytewidth; i++) out[i] = scanline[i];
5025 for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth];
5026 }
5027 break;
5028 case 2: /*Up*/
5029 if(prevline)
5030 {
5031 for(i = 0; i < length; i++) out[i] = scanline[i] - prevline[i];
5032 }
5033 else
5034 {
5035 for(i = 0; i < length; i++) out[i] = scanline[i];
5036 }
5037 break;
5038 case 3: /*Average*/
5039 if(prevline)
5040 {
5041 for(i = 0; i < bytewidth; i++) out[i] = scanline[i] - prevline[i] / 2;
5042 for(i = bytewidth; i < length; i++) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) / 2);
5043 }
5044 else
5045 {
5046 for(i = 0; i < bytewidth; i++) out[i] = scanline[i];
5047 for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth] / 2;
5048 }
5049 break;
5050 case 4: /*Paeth*/
5051 if(prevline)
5052 {
5053 /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/
5054 for(i = 0; i < bytewidth; i++) out[i] = (scanline[i] - prevline[i]);
5055 for(i = bytewidth; i < length; i++)
5056 {
5057 out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth]));
5058 }
5059 }
5060 else
5061 {
5062 for(i = 0; i < bytewidth; i++) out[i] = scanline[i];
5063 /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/
5064 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