diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-05-26 15:01:01 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-05-26 15:01:01 +0400 |
commit | 63788b47d6e805a97aac1501d3e64e1ada7e40b3 (patch) | |
tree | 4a0f33da8af8081ec87cc9846dc83cc39f8b2289 /release/plugins | |
parent | e727056c2e34857dd5556e66c9858506eb63e987 (diff) |
add vector versions of hsv_to_rgb, rgb_to_hsv & rgb_to_hsv_compat
Diffstat (limited to 'release/plugins')
-rw-r--r-- | release/plugins/sequence/color-correction-hsv.c | 166 |
1 files changed, 86 insertions, 80 deletions
diff --git a/release/plugins/sequence/color-correction-hsv.c b/release/plugins/sequence/color-correction-hsv.c index b9ffd88b26c..f77acd2ce93 100644 --- a/release/plugins/sequence/color-correction-hsv.c +++ b/release/plugins/sequence/color-correction-hsv.c @@ -19,24 +19,24 @@ #include "plugin.h" #include <stdio.h> -char name[]= "Color Correction"; +char name[] = "Color Correction"; -VarStruct varstr[]= { - { NUMSLI|FLO, "St Y:", 0.0, -1.0, 1.0, "Setup Y"}, - { NUMSLI|FLO, "Gn Y:", 1.0, 0.0, 10.0,"Gain Y"}, - { NUMSLI|FLO, "Ga Y:", 1.0, 0.0, 10.0, "Gamma Y"}, +VarStruct varstr[] = { + { NUMSLI | FLO, "St Y:", 0.0, -1.0, 1.0, "Setup Y"}, + { NUMSLI | FLO, "Gn Y:", 1.0, 0.0, 10.0, "Gain Y"}, + { NUMSLI | FLO, "Ga Y:", 1.0, 0.0, 10.0, "Gamma Y"}, - { NUMSLI|FLO, "Lo S:", 1.0, 0.0, 10.0,"Saturation Shadows"}, - { NUMSLI|FLO, "Md S:", 1.0, 0.0, 10.0,"Saturation Midtones"}, - { NUMSLI|FLO, "Hi S:", 1.0, 0.0, 10.0,"Saturation Highlights"}, + { NUMSLI | FLO, "Lo S:", 1.0, 0.0, 10.0, "Saturation Shadows"}, + { NUMSLI | FLO, "Md S:", 1.0, 0.0, 10.0, "Saturation Midtones"}, + { NUMSLI | FLO, "Hi S:", 1.0, 0.0, 10.0, "Saturation Highlights"}, - { NUMSLI|FLO, "MA S:", 1.0, 0.0, 10.0,"Master Saturation"}, + { NUMSLI | FLO, "MA S:", 1.0, 0.0, 10.0, "Master Saturation"}, - { NUMSLI|FLO, "Lo T:", 0.25, 0.0, 1.0, + { NUMSLI | FLO, "Lo T:", 0.25, 0.0, 1.0, "Saturation Shadow Thres"}, - { NUMSLI|FLO, "Hi T:", 0.75, 0.0, 1.0, + { NUMSLI | FLO, "Hi T:", 0.75, 0.0, 1.0, "Saturation Highlights Thres"}, - { TOG|INT, "Debug", 0.0, 0.0, 1.0, + { TOG | INT, "Debug", 0.0, 0.0, 1.0, "Show curves as overlay"}, }; @@ -58,25 +58,28 @@ float cfra; void plugin_seq_doit(Cast *, float, float, int, int, ImBuf *, ImBuf *, ImBuf *, ImBuf *); -int plugin_seq_getversion(void) { return B_PLUGIN_VERSION;} +int plugin_seq_getversion(void) +{ + return B_PLUGIN_VERSION; +} void plugin_but_changed(int but) {} void plugin_init() {} void plugin_getinfo(PluginInfo *info) { - info->name= name; - info->nvars= sizeof(varstr)/sizeof(VarStruct); - info->cfra= &cfra; + info->name = name; + info->nvars = sizeof(varstr) / sizeof(VarStruct); + info->cfra = &cfra; - info->varstr= varstr; + info->varstr = varstr; - info->init= plugin_init; - info->seq_doit= (SeqDoit) plugin_seq_doit; - info->callback= plugin_but_changed; + info->init = plugin_init; + info->seq_doit = (SeqDoit) plugin_seq_doit; + info->callback = plugin_but_changed; } -static void hsv_to_rgb (double h, double s, double v, - double *r, double *g, double *b) +static void hsv_to_rgb(double h, double s, double v, + double *r, double *g, double *b) { int i; double f, w, q, t; @@ -90,8 +93,7 @@ static void hsv_to_rgb (double h, double s, double v, *g = v; *b = v; } - else - { + else { if (h == 360.0) h = 0.0; h = h / 60.0; @@ -103,42 +105,42 @@ static void hsv_to_rgb (double h, double s, double v, switch (i) { - case 0: - *r = v; - *g = t; - *b = w; - break; - case 1: - *r = q; - *g = v; - *b = w; - break; - case 2: - *r = w; - *g = v; - *b = t; - break; - case 3: - *r = w; - *g = q; - *b = v; - break; - case 4: - *r = t; - *g = w; - *b = v; - break; - case 5: - *r = v; - *g = w; - *b = q; - break; + case 0: + *r = v; + *g = t; + *b = w; + break; + case 1: + *r = q; + *g = v; + *b = w; + break; + case 2: + *r = w; + *g = v; + *b = t; + break; + case 3: + *r = w; + *g = q; + *b = v; + break; + case 4: + *r = t; + *g = w; + *b = v; + break; + case 5: + *r = v; + *g = w; + *b = q; + break; } } } -static void rgb_to_hsv (double r, double g, double b, - double *h, double *s, double *v) +static void rgb_to_hsv(double r, double g, double b, + double *h, double *s, double *v) { double max, min, delta; @@ -163,8 +165,7 @@ static void rgb_to_hsv (double r, double g, double b, if (*s == 0.0) *h = -1.0; - else - { + else { delta = max - min; if (r == max) @@ -182,7 +183,8 @@ static void rgb_to_hsv (double r, double g, double b, } void plugin_seq_doit(Cast *cast, float facf0, float facf1, int width, - int height, ImBuf *ibuf1, ImBuf *ibuf2, ImBuf *out, ImBuf *use) { + int height, ImBuf *ibuf1, ImBuf *ibuf2, ImBuf *out, ImBuf *use) +{ char *dest, *src1; int x, y, c; double gamma_table[256]; @@ -192,18 +194,19 @@ void plugin_seq_doit(Cast *cast, float facf0, float facf1, int width, if (!ibuf1) return; - dest= (char *) out->rect; - src1= (char *) ibuf1->rect; - src1f= ibuf1->rect_float; + dest = (char *) out->rect; + src1 = (char *) ibuf1->rect; + src1f = ibuf1->rect_float; for (y = 0; y < 256; y++) { float v = 1.0 * y / 255; v += cast->setup_y; v *= cast->gain_y; v = pow(v, cast->gamma_y); - if ( v > 1.0) { + if (v > 1.0) { v = 1.0; - } else if (v < 0.0) { + } + else if (v < 0.0) { v = 0.0; } gamma_table[y] = v * 255; @@ -214,9 +217,11 @@ void plugin_seq_doit(Cast *cast, float facf0, float facf1, int width, v *= cast->master_sat; if (y < cast->lo_thres * 255) { v *= cast->sat_shadows; - } else if (y > cast->hi_thres * 255) { + } + else if (y > cast->hi_thres * 255) { v *= cast->sat_highlights; - } else { + } + else { v *= cast->sat_midtones; } uv_table[y] = v; @@ -225,15 +230,15 @@ void plugin_seq_doit(Cast *cast, float facf0, float facf1, int width, for (y = 0; y < height; y++) { for (x = 0; x < width; x++) { - double h,s,v,r,g,b; + double h, s, v, r, g, b; double fac; if (ibuf1->rect_float) rgb_to_hsv(src1f[0], src1f[1], - src1f[2],&h,&s,&v); - else rgb_to_hsv((double) src1[0]/255.0, - (double) src1[1]/255.0, - (double) src1[2]/255.0, - &h, &s, &v); + src1f[2], &h, &s, &v); + else rgb_to_hsv((double) src1[0] / 255.0, + (double) src1[1] / 255.0, + (double) src1[2] / 255.0, + &h, &s, &v); v = gamma_table[(int) (v * 255.0)] / 255.0; fac = uv_table[(int) (255.0 * v)]; @@ -242,18 +247,19 @@ void plugin_seq_doit(Cast *cast, float facf0, float facf1, int width, if (s >= 1.0) { s = 1.0; } - hsv_to_rgb(h,s,v, &r, &g, &b); + hsv_to_rgb(h, s, v, &r, &g, &b); if (out->rect_float) { destf[0] = r; destf[1] = g; destf[2] = b; destf = destf + 4; - src1f +=4; - } else { - dest[0] = r*255.0; - dest[1] = g*255.0; - dest[2] = b*255.0; + src1f += 4; + } + else { + dest[0] = r * 255.0; + dest[1] = g * 255.0; + dest[2] = b * 255.0; dest += 4; } @@ -262,7 +268,7 @@ void plugin_seq_doit(Cast *cast, float facf0, float facf1, int width, } if (cast->debug) { - dest= (char *) out->rect; + dest = (char *) out->rect; for (c = 0; c < 10; c++) { x = 0; for (y = 0; y < 256; y++) { @@ -279,7 +285,7 @@ void plugin_seq_doit(Cast *cast, float facf0, float facf1, int width, for (c = 0; c < 10; c++) { x = 0; for (y = 0; y < 256; y++) { - char val = uv_table[y] * 255.0/10.0; + char val = uv_table[y] * 255.0 / 10.0; while (x < y * width / 255) { *dest++ = val; *dest++ = val; |