gint/src/image/fixed.h

30 lines
543 B
C

//---
// gint:image:fixed - Minimal fixed-point interface for linear transformations
//---
#ifndef GINT_IMAGE_FIXED
#define GINT_IMAGE_FIXED
/* Constants */
#define fconst(x) ((x) * 65536)
/* Multiplication */
static inline int fmul(int x, int y)
{
return ((int64_t)x * (int64_t)y) >> 32;
}
/* Multiplication with a scalar */
static inline int fmuls(int x, int s)
{
return ((int64_t)x * (int64_t)s) >> 16;
}
/* Division */
static inline int fdiv(int x, int y)
{
return ((int64_t)x << 16) / y;
}
#endif /* GINT_IMAGE_FIXED */