[babl] extensions/cairo: use RGB space trc functions
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [babl] extensions/cairo: use RGB space trc functions
- Date: Wed, 30 Aug 2017 01:54:34 +0000 (UTC)
commit f919fa5d86e1a2b50be829f551fd4cbdd3c758c7
Author: Øyvind Kolås <pippin gimp org>
Date: Tue Aug 29 19:15:16 2017 +0200
extensions/cairo: use RGB space trc functions
extensions/cairo.c | 24 +++++++++++++++---------
1 files changed, 15 insertions(+), 9 deletions(-)
---
diff --git a/extensions/cairo.c b/extensions/cairo.c
index bd640d9..99cca15 100644
--- a/extensions/cairo.c
+++ b/extensions/cairo.c
@@ -19,7 +19,8 @@
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
-#include "babl.h"
+#include "config.h"
+#include "babl-internal.h"
#include "base/util.h"
@@ -284,6 +285,9 @@ conv_rgbafloat_cairo32_le (const Babl *conversion,unsigned char *src,
unsigned char *dst,
long samples)
{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
+ const Babl **trc = (void*)space->space.trc;
+
float *fsrc = (float *) src;
unsigned char *cdst = (unsigned char *) dst;
int n = samples;
@@ -296,11 +300,11 @@ conv_rgbafloat_cairo32_le (const Babl *conversion,unsigned char *src,
float alpha = *fsrc++;
if (alpha >= 1.0)
{
- int val = babl_linear_to_gamma_2_2f (blue) * 0xff + 0.5f;
+ int val = _babl_trc_from_linearf (trc[2], blue) * 0xff + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
- val = babl_linear_to_gamma_2_2f (green) * 0xff + 0.5f;
+ val = _babl_trc_from_linearf (trc[1], green) * 0xff + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
- val = babl_linear_to_gamma_2_2f (red) * 0xff + 0.5f;
+ val = _babl_trc_from_linearf (trc[0], red) * 0xff + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
*cdst++ = 0xff;
}
@@ -312,11 +316,11 @@ conv_rgbafloat_cairo32_le (const Babl *conversion,unsigned char *src,
else
{
float balpha = alpha * 0xff;
- int val = babl_linear_to_gamma_2_2f (blue) * balpha + 0.5f;
+ int val = _babl_trc_from_linearf (trc[2], blue) * balpha + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
- val = babl_linear_to_gamma_2_2f (green) * balpha + 0.5f;
+ val = _babl_trc_from_linearf (trc[1], green) * balpha + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
- val = babl_linear_to_gamma_2_2f (red) * balpha + 0.5f;
+ val = _babl_trc_from_linearf (trc[0], red) * balpha + 0.5f;
*cdst++ = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
*cdst++ = balpha + 0.5f;
}
@@ -330,6 +334,8 @@ conv_yafloat_cairo32_le (const Babl *conversion,unsigned char *src,
unsigned char *dst,
long samples)
{
+ const Babl *space = babl_conversion_get_destination_space (conversion);
+ const Babl **trc = (void*)space->space.trc;
float *fsrc = (float *) src;
unsigned char *cdst = (unsigned char *) dst;
int n = samples;
@@ -340,7 +346,7 @@ conv_yafloat_cairo32_le (const Babl *conversion,unsigned char *src,
float alpha = *fsrc++;
if (alpha >= 1.0)
{
- int val = babl_linear_to_gamma_2_2f (gray) * 0xff + 0.5f;
+ int val = _babl_trc_from_linearf (trc[0], gray) * 0xff + 0.5f;
val = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
*cdst++ = val;
*cdst++ = val;
@@ -355,7 +361,7 @@ conv_yafloat_cairo32_le (const Babl *conversion,unsigned char *src,
else
{
float balpha = alpha * 0xff;
- int val = babl_linear_to_gamma_2_2f (gray) * balpha + 0.5f;
+ int val = _babl_trc_from_linearf (trc[0], gray) * balpha + 0.5f;
val = val >= 0xff ? 0xff : val <= 0 ? 0 : val;
*cdst++ = val;
*cdst++ = val;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]