From: Grazvydas Ignotas Date: Tue, 9 Oct 2012 22:49:51 +0000 (+0300) Subject: op_gammatable: black level support X-Git-Tag: sz_152^0 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c1506509e34b1b8c7c4b646195fc9827c01c5797;p=pandora-misc.git op_gammatable: black level support --- diff --git a/op_gammatable.c b/op_gammatable.c index dd321ed..690a689 100644 --- a/op_gammatable.c +++ b/op_gammatable.c @@ -34,7 +34,8 @@ static void usage(const char *argv0) { fprintf(stderr, "usage:\n"); - fprintf(stderr, "%s [-n] { | }\n", + fprintf(stderr, "%s [-n] [-b ] " + "{ | }\n", argv0); exit(1); } @@ -43,6 +44,7 @@ int main(int argc, char *argv[]) { unsigned int v, r, g, b; float gamma[3] = { 0.f, }; + float base = 0.f, scale; int negative = 0, ptod = 0, half = 0; int i, arg = 1; @@ -53,6 +55,11 @@ int main(int argc, char *argv[]) usage(argv[0]); else if (strcmp(argv[arg], "-n") == 0) negative = 1; + else if (strcmp(argv[arg], "-b") == 0) { + arg++; + if (arg < argc) + base = atof(argv[arg]); + } else if (strcmp(argv[arg], "-ptod") == 0) ptod = 1; else if (strcmp(argv[arg], "-half") == 0) @@ -79,11 +86,18 @@ int main(int argc, char *argv[]) usage(argv[0]); } + if (base < 0.f || base > 255.f) { + fprintf(stderr, "invalid black level: %.3f\n", base); + usage(argv[0]); + } + scale = 255.f - base; + base += 0.5f; // rounding + for (i = 0; i < 256; i++) { // based on http://www.teamten.com/lawrence/graphics/gamma/ - r = (unsigned int) (255.f * powf((float)i / 255.f, 1.f / gamma[0]) + 0.5f); - g = (unsigned int) (255.f * powf((float)i / 255.f, 1.f / gamma[1]) + 0.5f); - b = (unsigned int) (255.f * powf((float)i / 255.f, 1.f / gamma[2]) + 0.5f); + r = (unsigned int) (base + scale * powf((float)i / 255.f, 1.f / gamma[0])); + g = (unsigned int) (base + scale * powf((float)i / 255.f, 1.f / gamma[1])); + b = (unsigned int) (base + scale * powf((float)i / 255.f, 1.f / gamma[2])); v = (r << 16) | (g << 8) | b; if (negative)