[gnome-photos/wip/rishi/hefe: 4/5] Add Hefe
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos/wip/rishi/hefe: 4/5] Add Hefe
- Date: Fri, 22 Jan 2016 20:00:31 +0000 (UTC)
commit d30c3efe9f1201f4ab425f01cd73b870ff477dbb
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 79276af..23c287a 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]