[babl] babl: add separate functions for 1.8 and 2.2 gamma



commit b0d95e2da85fb0373079ad32feefe12c07ddd430
Author: Øyvind Kolås <pippin gimp org>
Date:   Thu Aug 31 05:32:42 2017 +0200

    babl: add separate functions for 1.8 and 2.2 gamma

 babl/babl-trc.c |   17 +++++++++++++++--
 babl/babl-trc.h |   25 ++++++++++++++++++++++++-
 2 files changed, 39 insertions(+), 3 deletions(-)
---
diff --git a/babl/babl-trc.c b/babl/babl-trc.c
index 8992200..3b32f74 100644
--- a/babl/babl-trc.c
+++ b/babl/babl-trc.c
@@ -112,6 +112,14 @@ babl_trc_new (const char *name,
       trc_db[i].fun_to_linear = _babl_trc_gamma_to_linear;
       trc_db[i].fun_from_linear = _babl_trc_gamma_from_linear;
       break;
+    case BABL_TRC_GAMMA_2_2:
+      trc_db[i].fun_to_linear = _babl_trc_gamma_2_2_to_linear;
+      trc_db[i].fun_from_linear = _babl_trc_gamma_2_2_from_linear;
+      break;
+    case BABL_TRC_GAMMA_1_8:
+      trc_db[i].fun_to_linear = _babl_trc_gamma_1_8_to_linear;
+      trc_db[i].fun_from_linear = _babl_trc_gamma_1_8_from_linear;
+      break;
     case BABL_TRC_SRGB:
       trc_db[i].fun_to_linear = _babl_trc_srgb_to_linear;
       trc_db[i].fun_from_linear = _babl_trc_srgb_from_linear;
@@ -144,14 +152,19 @@ babl_trc_gamma (double gamma)
 {
   char name[32];
   int i;
-  if (fabs (gamma - 1.0) < 0.0001)
+  if (fabs (gamma - 1.0) < 0.01)
      return babl_trc_new ("linear", BABL_TRC_LINEAR, 1.0, 0, NULL);
+  if (fabs (gamma - 1.8) < 0.01)
+     return babl_trc_new ("1.8", BABL_TRC_GAMMA_1_8, 1.8, 0, NULL);
+  if (fabs (gamma - 2.2) < 0.01)
+     return babl_trc_new ("2.2", BABL_TRC_GAMMA_2_2, 2.2, 0, NULL);
+
   sprintf (name, "%.6f", gamma);
   for (i = 0; name[i]; i++)
     if (name[i] == ',') name[i] = '.';
   while (name[strlen(name)-1]=='0')
     name[strlen(name)-1]='\0';
-  return babl_trc_new (name,   BABL_TRC_GAMMA, gamma, 0, NULL);
+  return babl_trc_new (name, BABL_TRC_GAMMA, gamma, 0, NULL);
 }
 
 void
diff --git a/babl/babl-trc.h b/babl/babl-trc.h
index caec30c..dbdf2fe 100644
--- a/babl/babl-trc.h
+++ b/babl/babl-trc.h
@@ -27,8 +27,11 @@ BABL_CLASS_DECLARE (trc);
 
 typedef enum {BABL_TRC_LINEAR,
               BABL_TRC_GAMMA,
+              BABL_TRC_GAMMA_1_8,
+              BABL_TRC_GAMMA_2_2,
               BABL_TRC_SRGB,
-              BABL_TRC_LUT} BablTRCType;
+              BABL_TRC_LUT}
+BablTRCType;
 
 typedef struct
 {
@@ -374,6 +377,26 @@ static inline float _babl_trc_gamma_from_linear (const Babl *trc_, float value)
   return babl_powf (value, trc->rgamma);
 }
 
+static inline float _babl_trc_gamma_2_2_to_linear (const Babl *trc_, float value)
+{
+  return babl_powf (value, 2.2);
+}
+
+static inline float _babl_trc_gamma_2_2_from_linear (const Babl *trc_, float value)
+{
+  return babl_powf (value, 1.0/2.2);
+}
+
+static inline float _babl_trc_gamma_1_8_to_linear (const Babl *trc_, float value)
+{
+  return babl_powf (value, 1.8);
+}
+
+static inline float _babl_trc_gamma_1_8_from_linear (const Babl *trc_, float value)
+{
+  return babl_powf (value, 1.0/1.8);
+}
+
 static inline float _babl_trc_srgb_to_linear (const Babl *trc_, float value)
 {
   return babl_gamma_2_2_to_linear (value);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]