#ifndef COLOURSPACE_H_INCLUDED #define COLOURSPACE_H_INCLUDED #ifdef __cplusplus extern "C" { #endif /** * Convert linear sRGB quantities to nonlinear sRGB R'G'B' in [0,1]. */ void linear_to_nonlinear_srgb( double r, double g, double b, double *rp, double *gp, double *bp ); /** * Convert nonlinear sRGB R'G'B' to linear sRGB in [0,1]. */ void nonlinear_to_linear_srgb( double rp, double gp, double bp, double *r, double *g, double *b ); /** * Convert ITU-R BT.709 quantities to nonlinear R'G'B' in [0,1]. */ void linear_to_nonlinear_rec709( double r, double g, double b, double *rp, double *gp, double *bp ); /** * Convert ITU-R BT.709 nonlinear R'G'B' to linear RGB in [0,1]. */ void nonlinear_to_linear_rec709( double rp, double gp, double bp, double *r, double *g, double *b ); /** * Convert linear ITU-R BT.709 RGB to CIE XYZ in [0,1]. */ void rgb_to_xyz_rec709( double r, double g, double b, double *x, double *y, double *z ); /** * Convert CIE XYZ to linear ITU-R BT.709 RGB in [0,1]. */ void xyz_to_rgb_rec709( double x, double y, double z, double *r, double *g, double *b ); /** * Convert linear sRGB to CIE XYZ in [0,1]. */ void srgb_to_xyz( double r, double g, double b, double *x, double *y, double *z ); /** * Convert CIE XYZ to linear ITU-R BT.709 RGB in [0,1]. */ void xyz_to_srgb( double x, double y, double z, double *r, double *g, double *b ); /** * Convert linear ITU-R BT.709 RGB to fake-L*a*b* for interpolations. */ void rgb_to_fakelab_rec709( double r, double g, double b, double *lstar, double *astar, double *bstar ); /** * Convert fake-L*a*b* back to linear ITU-R BT.709 RGB. */ void fakelab_to_rgb_rec709( double lstar, double astar, double bstar, double *r, double *g, double *b ); void xyz_to_fakelab( double x, double y, double z, double *lstar, double *astar, double *bstar ); void fakelab_to_xyz( double lstar, double astar, double bstar, double *x, double *y, double *z ); void xyz_to_luv( double x, double y, double z, double *lstar, double *ustar, double *vstar ); void luv_to_xyz( double lstar, double ustar, double vstar, double *x, double *y, double *z ); void xyz_to_lupvp( double x, double y, double z, double *lstar, double *uprime, double *vprime ); void lupvp_to_xyz( double lstar, double uprime, double vprime, double *x, double *y, double *z ); /** * Convert from xyY-space to XYZ coordinates. */ void xyy_to_xyz( double x, double y, double Y, double *rx, double *ry, double *rz ); void get_natural_Y( double x, double y, double Y, double *ry ); /** * Convert from u'v'Y-space to XYZ coordinates. */ void uvy_to_xyz( double up, double vp, double Y, double *rx, double *ry, double *rz ); /** * Gamut maps (using saturation) a negative-valued RGB triple, assuming * (1,1,1) as the white point. */ void closest_in_gamut_srgb( double r, double g, double b, double wr, double wg, double wb, double *ri, double *gi, double *bi ); typedef struct matrix_s matrix_t; matrix_t *build_rgb_xyz_matrix_from_chromaticities( double rx, double ry, double gx, double gy, double bx, double by, double wx, double wy ); void matrix_free( matrix_t *matrix ); void matrix_rgb_to_xyz( matrix_t *conversion, double r, double g, double b, double *x, double *y, double *z ); void mpeg2_rgb_to_ypbpr_rec709( double r, double g, double b, double *yp, double *pb, double *pr ); void mpeg2_ypbpr_to_rgb_rec709( double yp, double pb, double pr, double *r, double *g, double *b ); void mpeg2_rgb_to_ypbpr_fcc( double r, double g, double b, double *yp, double *pb, double *pr ); void mpeg2_ypbpr_to_rgb_fcc( double yp, double pb, double pr, double *r, double *g, double *b ); double bicubic( double x, double y, double *image, int width, int height, int linestride ); void resample_chroma_420_to_444( double *c420, double *c444, int width, int height ); #ifdef __cplusplus }; #endif #endif /* COLOURSPACE_H_INCLUDED */