diff options
author | Mattias Andrée <maandree@operamail.com> | 2014-08-28 15:32:01 +0200 |
---|---|---|
committer | Mattias Andrée <maandree@operamail.com> | 2014-08-28 15:32:01 +0200 |
commit | 5a9b82bc5b9c5973ac9bda6c0ec4701c7fb88271 (patch) | |
tree | 20524d8a1fd61ef466b792e335434727fa352016 /src | |
parent | info: ramps => ramps16 (diff) | |
download | libgamma-5a9b82bc5b9c5973ac9bda6c0ec4701c7fb88271.tar.gz libgamma-5a9b82bc5b9c5973ac9bda6c0ec4701c7fb88271.tar.bz2 libgamma-5a9b82bc5b9c5973ac9bda6c0ec4701c7fb88271.tar.xz |
add 8-bit ramps (good for software gamma)
Signed-off-by: Mattias Andrée <maandree@operamail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/gamma-dummy.c | 29 | ||||
-rw-r--r-- | src/lib/gamma-dummy.h | 23 | ||||
-rw-r--r-- | src/lib/gamma-helper.h | 5 | ||||
-rw-r--r-- | src/lib/libgamma-facade.c.gpp | 40 | ||||
-rw-r--r-- | src/lib/libgamma-facade.h | 48 | ||||
-rw-r--r-- | src/lib/libgamma-method.c | 49 | ||||
-rw-r--r-- | src/lib/libgamma-method.h | 74 |
7 files changed, 265 insertions, 3 deletions
diff --git a/src/lib/gamma-dummy.c b/src/lib/gamma-dummy.c index ccde8cc..84e6df0 100644 --- a/src/lib/gamma-dummy.c +++ b/src/lib/gamma-dummy.c @@ -722,6 +722,35 @@ int libgamma_dummy_get_crtc_information(libgamma_crtc_information_t* restrict th /** + * Get current the gamma ramps for a CRTC, 8-bit gamma-depth version. + * + * @param this The CRTC state. + * @param ramps The gamma ramps to fill with the current values. + * @return Zero on success, otherwise (negative) the value of an + * error identifier provided by this library. + */ +int libgamma_dummy_crtc_get_gamma_ramps8(libgamma_crtc_state_t* restrict this, + libgamma_gamma_ramps8_t* restrict ramps) +{ +} + + +/** + * Set the gamma ramps for a CRTC, 8-bit gamma-depth version. + * + * @param this The CRTC state. + * @param ramps The gamma ramps to apply. + * @return Zero on success, otherwise (negative) the value of an + * error identifier provided by this library. + */ +int libgamma_dummy_crtc_set_gamma_ramps8(libgamma_crtc_state_t* restrict this, + libgamma_gamma_ramps8_t ramps) +{ +} + + + +/** * Get current the gamma ramps for a CRTC, 16-bit gamma-depth version. * * @param this The CRTC state. diff --git a/src/lib/gamma-dummy.h b/src/lib/gamma-dummy.h index e64dc02..931e0ff 100644 --- a/src/lib/gamma-dummy.h +++ b/src/lib/gamma-dummy.h @@ -136,6 +136,29 @@ int libgamma_dummy_get_crtc_information(libgamma_crtc_information_t* restrict th libgamma_crtc_state_t* restrict crtc, int32_t fields); /** + * Get current the gamma ramps for a CRTC, 8-bit gamma-depth version. + * + * @param this The CRTC state. + * @param ramps The gamma ramps to fill with the current values. + * @return Zero on success, otherwise (negative) the value of an + * error identifier provided by this library. + */ +int libgamma_dummy_crtc_get_gamma_ramps8(libgamma_crtc_state_t* restrict this, + libgamma_gamma_ramps8_t* restrict ramps); + +/** + * Set the gamma ramps for a CRTC, 8-bit gamma-depth version. + * + * @param this The CRTC state. + * @param ramps The gamma ramps to apply. + * @return Zero on success, otherwise (negative) the value of an + * error identifier provided by this library. + */ +int libgamma_dummy_crtc_set_gamma_ramps8(libgamma_crtc_state_t* restrict this, + libgamma_gamma_ramps8_t ramps); + + +/** * Get current the gamma ramps for a CRTC, 16-bit gamma-depth version. * * @param this The CRTC state. diff --git a/src/lib/gamma-helper.h b/src/lib/gamma-helper.h index 48f4de5..6bc8fd2 100644 --- a/src/lib/gamma-helper.h +++ b/src/lib/gamma-helper.h @@ -28,6 +28,11 @@ typedef union libgamma_gamma_ramps_any { /** + * 8-bit gamma ramps. + */ + libgamma_gamma_ramps8_t bits8; + + /** * 16-bit gamma ramps. */ libgamma_gamma_ramps16_t bits16; diff --git a/src/lib/libgamma-facade.c.gpp b/src/lib/libgamma-facade.c.gpp index 8527b3b..a1e8538 100644 --- a/src/lib/libgamma-facade.c.gpp +++ b/src/lib/libgamma-facade.c.gpp @@ -762,7 +762,7 @@ $>done * * @param 1 Either `get` or `set`, for the action that the name of value implies. * @param 2 The `ramp*` pattern for the ramp structure and function to call. - * @param 3 Either of `bit16`, `bit32`, `bit64`, `float_single`, `float_double`; + * @param 3 Either of `bit8`, `bit16`, `bit32`, `bit64`, `float_single`, `float_double`; * rather self-explanatory. * @param 4 The number of bits in the gamma depth, -1 for single precision float, * (`float`) and -2 for double percition float (`double`). @@ -820,6 +820,29 @@ $>} /** + * Get current the gamma ramps for a CRTC, 8-bit gamma-depth version. + * + * @param this The CRTC state. + * @param ramps The gamma ramps to fill with the current values. + * @return Zero on success, otherwise (negative) the value of an + * error identifier provided by this library. + */ +$>crtc_set_get_gamma_ramps get ramps8 bits8 8 + + +/** + * Set the gamma ramps for a CRTC, 32-bit gamma-depth version. + * + * @param this The CRTC state. + * @param ramps The gamma ramps to apply. + * @return Zero on success, otherwise (negative) the value of an + * error identifier provided by this library. + */ +$>crtc_set_get_gamma_ramps set ramps8 bits8 8 + + + +/** * Get current the gamma ramps for a CRTC, 32-bit gamma-depth version. * * @param this The CRTC state. @@ -977,6 +1000,21 @@ $>} /** + * Set the gamma ramps for a CRTC, 8-bit gamma-depth function version. + * + * Note that this will probably involve the library allocating temporary data. + * + * @param this The CRTC state. + * @param red_function The function that generates the the gamma ramp for the red channel. + * @param green_function The function that generates the the gamma ramp for the green channel. + * @param blue_function The function that generates the the gamma ramp for the blue channel. + * @return Zero on success, otherwise (negative) the value of an + * error identifier provided by this library. + */ +$>crtc_set_gamma_ramps_f uint8_t ramps8 + + +/** * Set the gamma ramps for a CRTC, 16-bit gamma-depth function version. * * Note that this will probably involve the library allocating temporary data. diff --git a/src/lib/libgamma-facade.h b/src/lib/libgamma-facade.h index cfcf085..92a2b42 100644 --- a/src/lib/libgamma-facade.h +++ b/src/lib/libgamma-facade.h @@ -31,6 +31,14 @@ /** + * Mapping function from [0, 1] float encoding value to [0, 2⁸ − 1] integer output value. + * + * @param encoding [0, 1] float encoding value. + * @return [0, 2⁸ − 1] integer output value. + */ +typedef uint8_t libgamma_gamma_ramps8_fun(float encoding); + +/** * Mapping function from [0, 1] float encoding value to [0, 2¹⁶ − 1] integer output value. * * @param encoding [0, 1] float encoding value. @@ -316,6 +324,29 @@ unsigned char* libgamma_unhex_edid(const char* restrict edid); /** + * Get current the gamma ramps for a CRTC, 8-bit gamma-depth version. + * + * @param this The CRTC state. + * @param ramps The gamma ramps to fill with the current values + * @return Zero on success, otherwise (negative) the value of an + * error identifier provided by this library. + */ +int libgamma_crtc_get_gamma_ramps8(libgamma_crtc_state_t* restrict this, + libgamma_gamma_ramps8_t* restrict ramps); + +/** + * Set the gamma ramps for a CRTC, 8-bit gamma-depth version. + * + * @param this The CRTC state. + * @param ramps The gamma ramps to apply. + * @return Zero on success, otherwise (negative) the value of an + * error identifier provided by this library. + */ +int libgamma_crtc_set_gamma_ramps8(libgamma_crtc_state_t* restrict this, + libgamma_gamma_ramps8_t ramps) __attribute__((hot)); + + +/** * Get current the gamma ramps for a CRTC, 16-bit gamma-depth version. * * @param this The CRTC state. @@ -431,6 +462,23 @@ int libgamma_crtc_set_gamma_rampsd(libgamma_crtc_state_t* restrict this, /** + * Set the gamma ramps for a CRTC, 8-bit gamma-depth function version. + * + * Note that this will probably involve the library allocating temporary data. + * + * @param this The CRTC state. + * @param red_function The function that generates the the gamma ramp for the red channel. + * @param green_function The function that generates the the gamma ramp for the green channel. + * @param blue_function The function that generates the the gamma ramp for the blue channel. + * @return Zero on success, otherwise (negative) the value of an + * error identifier provided by this library. + */ +int libgamma_crtc_set_gamma_ramps8_f(libgamma_crtc_state_t* restrict this, + libgamma_gamma_ramps8_fun* red_function, + libgamma_gamma_ramps8_fun* green_function, + libgamma_gamma_ramps8_fun* blue_function) __attribute__((cold)); + +/** * Set the gamma ramps for a CRTC, 16-bit gamma-depth function version. * * Note that this will probably involve the library allocating temporary data. diff --git a/src/lib/libgamma-method.c b/src/lib/libgamma-method.c index 7311de4..0fa76c3 100644 --- a/src/lib/libgamma-method.c +++ b/src/lib/libgamma-method.c @@ -34,6 +34,55 @@ * @param this The gamma ramps. * @return Zero on success, -1 on allocation error, `errno` will be set accordingly. */ +int libgamma_gamma_ramps8_initialise(libgamma_gamma_ramps8_t* restrict this) +{ + size_t n = this->red_size + this->green_size + this->blue_size; + this->red = malloc(n * sizeof(uint8_t)); + this->green = this-> red + this-> red_size; + this->blue = this->green + this->green_size; + return this->red == NULL ? -1 : 0; +} + + +/** + * Release resources that are held by a gamma ramp strcuture that + * has been allocated by `libgamma_gamma_ramps8_initialise` or otherwise + * initialises in the proper manner. + * + * @param this The gamma ramps. + */ +void libgamma_gamma_ramps8_destroy(libgamma_gamma_ramps8_t* restrict this) +{ + free(this->red); +} + + +/** + * Release resources that are held by a gamma ramp strcuture that + * has been allocated by `libgamma_gamma_ramps8_initialise` or otherwise + * initialises in the proper manner, as well as release the pointer + * to the structure. + * + * @param this The gamma ramps. + */ +void libgamma_gamma_ramps8_free(libgamma_gamma_ramps8_t* restrict this) +{ + free(this->red); + free(this); +} + + + +/** + * Initialise a gamma ramp in the proper way that allows all adjustment + * methods to read from and write to it without causing segmentation violation. + * + * The input must have `red_size`, `green_size` and `blue_size` set to the + * sizes of the gamma ramps that should be allocated. + * + * @param this The gamma ramps. + * @return Zero on success, -1 on allocation error, `errno` will be set accordingly. + */ int libgamma_gamma_ramps16_initialise(libgamma_gamma_ramps16_t* restrict this) { size_t n = this->red_size + this->green_size + this->blue_size; diff --git a/src/lib/libgamma-method.h b/src/lib/libgamma-method.h index b549a5d..c342b43 100644 --- a/src/lib/libgamma-method.h +++ b/src/lib/libgamma-method.h @@ -862,6 +862,44 @@ typedef struct libgamma_crtc_information /** + * Gamma ramp structure for 8-bit gamma ramps. + */ +typedef struct libgamma_gamma_ramps8 +{ + /** + * The size of `red`. + */ + size_t red_size; + + /** + * The size of `green`. + */ + size_t green_size; + + /** + * The size of `blue`. + */ + size_t blue_size; + + /** + * The gamma ramp for the red channel. + */ + uint8_t* red; + + /** + * The gamma ramp for the green channel. + */ + uint8_t* green; + + /** + * The gamma ramp for the blue channel. + */ + uint8_t* blue; + +} libgamma_gamma_ramps8_t; + + +/** * Gamma ramp structure for 16-bit gamma ramps. */ typedef struct libgamma_gamma_ramps16 @@ -1062,11 +1100,43 @@ typedef struct libgamma_gamma_rampsd * @param this The gamma ramps. * @return Zero on success, -1 on allocation error, `errno` will be set accordingly. */ +int libgamma_gamma_ramps8_initialise(libgamma_gamma_ramps8_t* restrict this); + +/** + * Release resources that are held by a gamma ramp strcuture that + * has been allocated by `libgamma_gamma_ramps8_initialise` or otherwise + * initialises in the proper manner. + * + * @param this The gamma ramps. + */ +void libgamma_gamma_ramps8_destroy(libgamma_gamma_ramps8_t* restrict this); + +/** + * Release resources that are held by a gamma ramp strcuture that + * has been allocated by `libgamma_gamma_ramps8_initialise` or otherwise + * initialises in the proper manner, as well as release the pointer + * to the structure. + * + * @param this The gamma ramps. + */ +void libgamma_gamma_ramps8_free(libgamma_gamma_ramps8_t* restrict this); + + +/** + * Initialise a gamma ramp in the proper way that allows all adjustment + * methods to read from and write to it without causing segmentation violation. + * + * The input must have `red_size`, `green_size` and `blue_size` set to the + * sizes of the gamma ramps that should be allocated. + * + * @param this The gamma ramps. + * @return Zero on success, -1 on allocation error, `errno` will be set accordingly. + */ int libgamma_gamma_ramps16_initialise(libgamma_gamma_ramps16_t* restrict this); /** * Release resources that are held by a gamma ramp strcuture that - * has been allocated by `libgamma_gamma_ramps_initialise` or otherwise + * has been allocated by `libgamma_gamma_ramps16_initialise` or otherwise * initialises in the proper manner. * * @param this The gamma ramps. @@ -1075,7 +1145,7 @@ void libgamma_gamma_ramps16_destroy(libgamma_gamma_ramps16_t* restrict this); /** * Release resources that are held by a gamma ramp strcuture that - * has been allocated by `libgamma_gamma_ramps_initialise` or otherwise + * has been allocated by `libgamma_gamma_ramps16_initialise` or otherwise * initialises in the proper manner, as well as release the pointer * to the structure. * |