[gnome-photos/wip/rishi/hefe: 3/3] Add Hefe



commit 6986ceaefad06a8487517dd127d5c0a2b045e3e8
Author: Debarshi Ray <debarshir gnome org>
Date:   Tue Jan 12 15:06:09 2016 +0100

    Add Hefe

 src/photos-operation-insta-common.h |    3 +-
 src/photos-operation-insta-curve.c  |  151 +++++++++++++++++++++++++++++++++++
 src/photos-operation-insta-filter.c |   13 +++
 3 files changed, 166 insertions(+), 1 deletions(-)
---
diff --git a/src/photos-operation-insta-common.h b/src/photos-operation-insta-common.h
index c9af905..93e1205 100644
--- a/src/photos-operation-insta-common.h
+++ b/src/photos-operation-insta-common.h
@@ -1,6 +1,6 @@
 /*
  * Photos - access, organize and share your photos on GNOME
- * Copyright © 2015 Red Hat, Inc.
+ * Copyright © 2015, 2016 Red Hat, Inc.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -30,6 +30,7 @@ typedef enum
   PHOTOS_OPERATION_INSTA_PRESET_BRANNAN,
   PHOTOS_OPERATION_INSTA_PRESET_GOTHAM,
   PHOTOS_OPERATION_INSTA_PRESET_GRAY,
+  PHOTOS_OPERATION_INSTA_PRESET_HEFE,
   PHOTOS_OPERATION_INSTA_PRESET_NASHVILLE
 } PhotosOperationInstaPreset;
 
diff --git a/src/photos-operation-insta-curve.c b/src/photos-operation-insta-curve.c
index e80ad23..3b8e73b 100644
--- a/src/photos-operation-insta-curve.c
+++ b/src/photos-operation-insta-curve.c
@@ -233,6 +233,66 @@ static const guint8 GOTHAM_B[] =
   232, 234, 235, 237, 239, 241, 243, 244, 246, 248, 250, 251, 253, 255, 255
 };
 
+static const guint8 HEFE_A[] =
+{
+  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 
29, 30,
+  31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 
57, 58,
+  59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 
85, 86,
+  87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 
111,
+  112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 
133, 134,
+  135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 
156, 157,
+  158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 
179, 180,
+  181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 
202, 203,
+  204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 
225, 226,
+  227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 
248, 249,
+  250, 251, 252, 253, 254, 255, 255
+};
+
+static const guint8 HEFE_R[] =
+{
+  32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 34, 35, 36, 38, 39, 41, 43, 45, 
48, 50,
+  52, 54, 56, 58, 60, 62, 64, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 96, 98, 100, 
102, 104,
+  106, 108, 110, 112, 114, 116, 117, 119, 121, 123, 125, 126, 128, 130, 132, 133, 135, 137, 139, 140, 142, 
144, 146,
+  147, 149, 151, 152, 154, 155, 157, 158, 160, 161, 163, 164, 166, 167, 168, 170, 171, 172, 173, 175, 176, 
177, 178,
+  179, 180, 181, 182, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 193, 194, 195, 196, 197, 197, 198, 
199, 200,
+  201, 201, 202, 203, 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, 209, 209, 210, 210, 211, 211, 212, 
212, 213,
+  213, 214, 214, 215, 215, 216, 216, 217, 217, 218, 218, 219, 219, 220, 220, 221, 221, 221, 222, 222, 223, 
223, 224,
+  224, 225, 225, 225, 226, 226, 227, 227, 228, 228, 228, 229, 229, 230, 230, 231, 231, 231, 232, 232, 233, 
233, 233,
+  234, 234, 235, 235, 235, 236, 236, 236, 237, 237, 238, 238, 238, 239, 239, 239, 240, 240, 240, 241, 241, 
242, 242,
+  242, 243, 243, 243, 244, 244, 245, 245, 245, 246, 246, 247, 248, 248, 249, 249, 250, 250, 251, 251, 252, 
252, 252,
+  252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252
+};
+
+static const guint8 HEFE_G[] =
+{
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 
16, 17,
+  19, 20, 21, 23, 24, 25, 27, 28, 30, 31, 33, 34, 36, 37, 39, 40, 42, 44, 45, 47, 49, 50, 52, 54, 56, 57, 
59, 61,
+  63, 65, 67, 69, 71, 73, 75, 78, 80, 82, 85, 87, 89, 92, 94, 97, 99, 102, 104, 106, 109, 111, 114, 116, 
118, 121,
+  123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 146, 148, 150, 152, 154, 156, 157, 159, 161, 
163, 164,
+  166, 168, 169, 171, 173, 174, 176, 178, 179, 181, 182, 184, 185, 187, 188, 190, 191, 192, 194, 195, 196, 
197, 198,
+  199, 200, 201, 202, 203, 204, 205, 205, 206, 207, 207, 208, 209, 209, 210, 210, 211, 211, 211, 212, 212, 
213, 213,
+  213, 214, 214, 215, 215, 216, 216, 216, 217, 217, 218, 218, 219, 219, 220, 220, 220, 221, 221, 222, 222, 
222, 223,
+  223, 224, 224, 225, 225, 225, 226, 226, 227, 227, 228, 228, 228, 229, 229, 230, 230, 231, 231, 232, 232, 
232, 233,
+  233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 239, 239, 239, 240, 240, 241, 241, 242, 242, 243, 
244, 244,
+  245, 246, 246, 247, 248, 249, 249, 250, 250, 251, 251, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 
252, 252,
+  252, 252, 252, 252, 252, 252, 252
+};
+
+static const guint8 HEFE_B[] =
+{
+  2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9, 10, 10, 11, 12, 
12, 13,
+  13, 14, 15, 15, 16, 17, 17, 18, 19, 19, 20, 21, 22, 23, 24, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 
36, 38,
+  39, 40, 42, 43, 45, 47, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 
87, 89,
+  91, 93, 95, 96, 98, 100, 101, 103, 105, 107, 108, 110, 112, 113, 115, 117, 118, 120, 122, 123, 125, 127, 
128, 130,
+  131, 133, 135, 136, 138, 140, 141, 143, 145, 146, 148, 149, 151, 153, 154, 156, 158, 159, 161, 163, 164, 
166, 167,
+  169, 170, 171, 173, 174, 175, 177, 178, 179, 180, 182, 183, 184, 185, 186, 187, 189, 190, 191, 192, 193, 
194, 195,
+  195, 196, 197, 198, 198, 199, 200, 200, 201, 201, 202, 202, 203, 203, 204, 204, 204, 205, 205, 205, 206, 
206, 206,
+  207, 207, 207, 207, 208, 208, 209, 209, 209, 210, 210, 211, 211, 211, 212, 212, 213, 213, 214, 214, 214, 
215, 215,
+  216, 216, 216, 217, 217, 218, 218, 218, 219, 219, 220, 220, 220, 221, 221, 222, 222, 222, 223, 223, 224, 
224, 225,
+  225, 226, 226, 227, 227, 227, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 
228, 228,
+  228, 228, 228
+};
+
 static const guint8 NASHVILLE_A[] =
 {
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 
29, 30,
@@ -514,6 +574,84 @@ photos_operation_insta_curve_gotham_process_u8 (GeglOperation *operation,
 
 
 static void
+photos_operation_insta_curve_hefe_process_float (GeglOperation *operation,
+                                                 void *in_buf,
+                                                 void *out_buf,
+                                                 glong n_pixels,
+                                                 const GeglRectangle *roi,
+                                                 gint level)
+{
+  gfloat *in = in_buf;
+  gfloat *out = out_buf;
+  glong i;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      const gfloat brightness = -0.13;
+      const gfloat contrast = 0.8;
+
+      out[0] = (in[0] - 0.5f) * contrast + brightness + 0.5;
+      out[1] = (in[1] - 0.5f) * contrast + brightness + 0.5;
+      out[2] = (in[2] - 0.5f) * contrast + brightness + 0.5;
+
+      out[0] = photos_operation_insta_curve_interpolate (out[0], HEFE_R, HEFE_A);
+      out[1] = photos_operation_insta_curve_interpolate (out[1], HEFE_G, HEFE_A);
+      out[2] = photos_operation_insta_curve_interpolate (out[2], HEFE_B, HEFE_A);
+
+      in += 3;
+      out += 3;
+    }
+}
+
+
+static void
+photos_operation_insta_curve_hefe_process_u8 (GeglOperation *operation,
+                                              void *in_buf,
+                                              void *out_buf,
+                                              glong n_pixels,
+                                              const GeglRectangle *roi,
+                                              gint level)
+{
+  guint8 *in = in_buf;
+  guint8 *out = out_buf;
+  glong i;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      const gfloat brightness = -0.13;
+      const gfloat contrast = 0.8;
+      gfloat channel;
+
+      channel = in[0] / 255.0;
+      channel = (channel - 0.5f) * contrast + brightness + 0.5;
+      channel = CLAMP (channel, 0.0, 1.0);
+      out[0] = (guint8) (channel * 255.0);
+
+      channel = in[1] / 255.0;
+      channel = (channel - 0.5f) * contrast + brightness + 0.5;
+      channel = CLAMP (channel, 0.0, 1.0);
+      out[1] = (guint8) (channel * 255.0);
+
+      channel = in[2] / 255.0;
+      channel = (channel - 0.5f) * contrast + brightness + 0.5;
+      channel = CLAMP (channel, 0.0, 1.0);
+      out[2] = (guint8) (channel * 255.0);
+
+      out[0] = HEFE_R[out[0]];
+      out[1] = HEFE_G[out[1]];
+      out[2] = HEFE_B[out[2]];
+
+      out[0] = HEFE_A[out[0]];
+      out[1] = HEFE_A[out[1]];
+      out[2] = HEFE_A[out[2]];
+
+      in += 3;
+      out += 3;
+    }
+}
+
+
+static void
 photos_operation_insta_curve_nashville_process_float (GeglOperation *operation,
                                                       void *in_buf,
                                                       void *out_buf,
@@ -653,6 +791,19 @@ photos_operation_insta_curve_prepare (GeglOperation *operation)
         }
       break;
 
+    case PHOTOS_OPERATION_INSTA_PRESET_HEFE:
+      if (type == type_u8)
+        {
+          format = format_u8;
+          self->process = photos_operation_insta_curve_hefe_process_u8;
+        }
+      else
+        {
+          format = format_float;
+          self->process = photos_operation_insta_curve_hefe_process_float;
+        }
+      break;
+
     case PHOTOS_OPERATION_INSTA_PRESET_NASHVILLE:
       if (type == type_u8)
         {
diff --git a/src/photos-operation-insta-filter.c b/src/photos-operation-insta-filter.c
index a6368fe..011d162 100644
--- a/src/photos-operation-insta-filter.c
+++ b/src/photos-operation-insta-filter.c
@@ -111,6 +111,19 @@ photos_operation_insta_filter_setup (PhotosOperationInstaFilter *self)
       self->nodes = g_list_prepend (self->nodes, node);
       break;
 
+    case PHOTOS_OPERATION_INSTA_PRESET_HEFE:
+      node = gegl_node_new_child (operation->node,
+                                  "operation", "photos:insta-vignette",
+                                  NULL);
+      self->nodes = g_list_prepend (self->nodes, node);
+
+      node = gegl_node_new_child (operation->node,
+                                  "operation", "photos:insta-curve",
+                                  "preset", self->preset,
+                                  NULL);
+      self->nodes = g_list_prepend (self->nodes, node);
+      break;
+
     case PHOTOS_OPERATION_INSTA_PRESET_NASHVILLE:
       node = gegl_node_new_child (operation->node,
                                   "operation", "photos:insta-curve",


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