#ifndef COSMOPOLITAN_DSP_CORE_C161_H_ #define COSMOPOLITAN_DSP_CORE_C161_H_ #include "libc/macros.h" #if !(__ASSEMBLER__ + __LINKER__ + 0) #define EXTRA_SHARP 2 /** * Byte sized kernel for restoring sharpness of resampled memory. * * @define CLAMP[(-1*𝑎 + 6*𝑏 + -1*𝑐) / (-1 + 6 + -1)] * @limit [0..255] → [-510..1,532] → [-127..383] → [0..255] * @see C1331() */ forceinline pureconst artificial unsigned char C161(unsigned char al, unsigned char bl, unsigned char cl) { short ax, bx, cx; ax = al; bx = bl; cx = cl; ax *= -1; bx *= +6; cx *= -1; ax += bx; ax += cx; ax += 2; ax >>= 2; return MIN(255, MAX(0, ax)); } #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ #endif /* COSMOPOLITAN_DSP_CORE_C161_H_ */