From 7372afaae4aa7097ffad1e9c070b8b9d9a611f62 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 20 Dec 2013 13:49:20 -0800 Subject: ACME-1236 : WIP : Implement colorTransform filter, grayscale and sepia using it, add parameter to llimage_libtest to use filters --- .../llimage_libtest/llimage_libtest.cpp | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 034c816742..e485136f58 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -83,6 +83,9 @@ static const char USAGE[] = "\n" " -rev, --reversible\n" " Set the compression to be lossless (reversible in j2c parlance).\n" " Only valid for output j2c images.\n" +" -f, --filter \n" +" Apply the filter to the input images.\n" +" Note: so far, only grayscale and sepia are supported.\n" " -log, --logmetrics \n" " Log performance data for . Results in .slp\n" " Note: so far, only ImageCompressionTester has been tested.\n" @@ -350,6 +353,7 @@ int main(int argc, char** argv) int blocks_size = -1; int levels = 0; bool reversible = false; + std::string filter_name = ""; // Init whatever is necessary ll_init_apr(); @@ -523,6 +527,26 @@ int main(int argc, char** argv) break; } } + else if (!strcmp(argv[arg], "--filter") || !strcmp(argv[arg], "-f")) + { + // '--filter' needs to be specified with a named filter argument + // Note: for the moment, only sepia and grayscale are supported + if ((arg + 1) < argc) + { + filter_name = argv[arg+1]; + } + if (((arg + 1) >= argc) || (filter_name[0] == '-')) + { + // We don't have an argument left in the arg list or the next argument is another option + std::cout << "No --filter argument given, no filter will be applied" << std::endl; + } + else + { + arg += 1; // Skip that arg now we know it's a valid test name + if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list + break; + } + } else if (!strcmp(argv[arg], "--analyzeperformance") || !strcmp(argv[arg], "-a")) { analyze_performance = true; @@ -568,6 +592,16 @@ int main(int argc, char** argv) std::cout << "Error: Image " << *in_file << " could not be loaded" << std::endl; continue; } + + // Apply filter if any + if (filter_name == "sepia") + { + raw_image->filterSepia(); + } + else if (filter_name == "grayscale") + { + raw_image->filterGrayScale(); + } // Save file if (out_file != out_end) -- cgit v1.2.3 From 08a798bb1d88708765041adf21a784911842f101 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Mon, 30 Dec 2013 20:33:33 -0800 Subject: ACME-1236 : WIP : Implement saturation/desaturation transform filter, add it to llimage_libtest for testing --- indra/integration_tests/llimage_libtest/llimage_libtest.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index e485136f58..cbd6ccebbf 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -602,6 +602,10 @@ int main(int argc, char** argv) { raw_image->filterGrayScale(); } + else if (filter_name == "saturate") + { + raw_image->filterSaturate(2.0f); + } // Save file if (out_file != out_end) -- cgit v1.2.3 From 218d305c443d4e5ddba03c6f4a988924939d805d Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Wed, 1 Jan 2014 17:13:06 -0800 Subject: ACME-1236 : WIP : add an optional filter parameter to llimage_libtest --- .../llimage_libtest/llimage_libtest.cpp | 23 ++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index cbd6ccebbf..d1535bf3cf 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -83,9 +83,10 @@ static const char USAGE[] = "\n" " -rev, --reversible\n" " Set the compression to be lossless (reversible in j2c parlance).\n" " Only valid for output j2c images.\n" -" -f, --filter \n" -" Apply the filter to the input images.\n" -" Note: so far, only grayscale and sepia are supported.\n" +" -f, --filter []\n" +" Apply the filter to the input images using the optional param (float) value.\n" +" Notes: - 'grayscale' and 'sepia' are supported (no param).\n" +" - 'saturate' uses the param: param < 1.0 will desaturate the colors, param > 1.0 will saturate them.\n" " -log, --logmetrics \n" " Log performance data for . Results in .slp\n" " Note: so far, only ImageCompressionTester has been tested.\n" @@ -354,6 +355,7 @@ int main(int argc, char** argv) int levels = 0; bool reversible = false; std::string filter_name = ""; + double filter_param = 0.0; // Init whatever is necessary ll_init_apr(); @@ -530,7 +532,6 @@ int main(int argc, char** argv) else if (!strcmp(argv[arg], "--filter") || !strcmp(argv[arg], "-f")) { // '--filter' needs to be specified with a named filter argument - // Note: for the moment, only sepia and grayscale are supported if ((arg + 1) < argc) { filter_name = argv[arg+1]; @@ -545,7 +546,17 @@ int main(int argc, char** argv) arg += 1; // Skip that arg now we know it's a valid test name if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list break; - } + // --filter can also have an optional parameter + std::string value_str; + value_str = argv[arg+1]; // Check the next arg + if (value_str[0] != '-') // If it's not another argument, it's a filter parameter value + { + filter_param = atof(value_str.c_str()); + arg += 1; // Skip that arg now we used it as a valid filter param + if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list + break; + } + } } else if (!strcmp(argv[arg], "--analyzeperformance") || !strcmp(argv[arg], "-a")) { @@ -604,7 +615,7 @@ int main(int argc, char** argv) } else if (filter_name == "saturate") { - raw_image->filterSaturate(2.0f); + raw_image->filterSaturate((float)(filter_param)); } // Save file -- cgit v1.2.3 From 9dca514c0b416c1b15e9a63e6f5af1b52df70b7e Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Wed, 1 Jan 2014 17:58:52 -0800 Subject: ACME-1236 : WIP : add filterRotate to rotate hue, add rotate as a valid argument to --filter in llimage_libtest --- indra/integration_tests/llimage_libtest/llimage_libtest.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index d1535bf3cf..1f9a5f0e18 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -84,9 +84,10 @@ static const char USAGE[] = "\n" " Set the compression to be lossless (reversible in j2c parlance).\n" " Only valid for output j2c images.\n" " -f, --filter []\n" -" Apply the filter to the input images using the optional param (float) value.\n" -" Notes: - 'grayscale' and 'sepia' are supported (no param).\n" -" - 'saturate' uses the param: param < 1.0 will desaturate the colors, param > 1.0 will saturate them.\n" +" Apply the filter to the input images using the optional param (float) value:\n" +" - 'grayscale' and 'sepia' just do that (no param).\n" +" - 'saturate' changes color saturation according to param: param < 1.0 will desaturate, param > 1.0 will saturate.\n" +" - 'rotate' rotates the color hue according to param (in degree, positive value only).\n" " -log, --logmetrics \n" " Log performance data for . Results in .slp\n" " Note: so far, only ImageCompressionTester has been tested.\n" @@ -617,6 +618,10 @@ int main(int argc, char** argv) { raw_image->filterSaturate((float)(filter_param)); } + else if (filter_name == "rotate") + { + raw_image->filterRotate((float)(filter_param)); + } // Save file if (out_file != out_end) -- cgit v1.2.3 From 205a4e3dc63c338c05e27a4806cdfd6f50bac2b6 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Wed, 1 Jan 2014 19:42:10 -0800 Subject: ACME-1236 : WIP : add filterGamma, computeHistograms, colorCorrect, implemented filter gamma to llimage_libtest for testing --- indra/integration_tests/llimage_libtest/llimage_libtest.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 1f9a5f0e18..afd5e2ce98 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -622,6 +622,10 @@ int main(int argc, char** argv) { raw_image->filterRotate((float)(filter_param)); } + else if (filter_name == "gamma") + { + raw_image->filterGamma((float)(filter_param)); + } // Save file if (out_file != out_end) -- cgit v1.2.3 From d28b92744ee0d4a19a5587585998e5c351f6d300 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Thu, 2 Jan 2014 16:14:38 -0800 Subject: ACME-1236 : WIP : added all the color correction filters: colorize, linarize, equalize, contrast, brightness --- .../llimage_libtest/llimage_libtest.cpp | 44 ++++++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index afd5e2ce98..4d32282a0d 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -39,6 +39,7 @@ #include "llimagej2c.h" #include "lldir.h" #include "lldiriterator.h" +#include "v4coloru.h" // system libraries #include @@ -84,10 +85,18 @@ static const char USAGE[] = "\n" " Set the compression to be lossless (reversible in j2c parlance).\n" " Only valid for output j2c images.\n" " -f, --filter []\n" -" Apply the filter to the input images using the optional param (float) value:\n" -" - 'grayscale' and 'sepia' just do that (no param).\n" -" - 'saturate' changes color saturation according to param: param < 1.0 will desaturate, param > 1.0 will saturate.\n" -" - 'rotate' rotates the color hue according to param (in degree, positive value only).\n" +" Apply the filter to the input images using the optional value. Admissible names:\n" +" - 'grayscale' converts to grayscale (no param).\n" +" - 'sepia' converts to sepia (no param).\n" +" - 'saturate' changes color saturation according to : < 1.0 will desaturate, > 1.0 will saturate.\n" +" - 'rotate' rotates the color hue according to (in degree, positive value only).\n" +" - 'gamma' applies gamma curve to all channels: > 1.0 will darken, < 1.0 will lighten.\n" +" - 'colorize' applies a red tint to the image using as an alpha (transparency between 0.0 and 1.0) value.\n" +" - 'contrast' modifies the contrast according to : > 1.0 will enhance the contrast, <1.0 will flatten it.\n" +" - 'brighten' adds light to the image ( between 0 and 255).\n" +" - 'darken' substracts light to the image ( between 0 and 255).\n" +" - 'linearize' optimizes the contrast using the brightness histogram. is the fraction (between 0.0 and 1.0) of discarded tail of the histogram.\n" +" - 'posterize' redistributes the colors between classes per channel ( between 2 and 255).\n" " -log, --logmetrics \n" " Log performance data for . Results in .slp\n" " Note: so far, only ImageCompressionTester has been tested.\n" @@ -626,6 +635,33 @@ int main(int argc, char** argv) { raw_image->filterGamma((float)(filter_param)); } + else if (filter_name == "colorize") + { + // For testing, we just colorize in red, modulate by the alpha passed as a parameter + LLColor4U color = LLColor4U::red; + color.setAlpha((U8)(filter_param * 255.0)); + raw_image->filterColorize(color); + } + else if (filter_name == "contrast") + { + raw_image->filterContrast((float)(filter_param)); + } + else if (filter_name == "brighten") + { + raw_image->filterBrightness((S32)(filter_param)); + } + else if (filter_name == "darken") + { + raw_image->filterBrightness((S32)(-filter_param)); + } + else if (filter_name == "linearize") + { + raw_image->filterLinearize((float)(filter_param)); + } + else if (filter_name == "posterize") + { + raw_image->filterEqualize((S32)(filter_param)); + } // Save file if (out_file != out_end) -- cgit v1.2.3 From 1b5fb662927ac84606cf767c8c9ec350e82b656f Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 3 Jan 2014 14:19:29 -0800 Subject: ACME-1236 : WIP : Added the vignette mode. Can be applied to colorCorrect and color Transform. Added new -v argument to llimage_libtest --- .../llimage_libtest/llimage_libtest.cpp | 47 +++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 4d32282a0d..45e60f64e6 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -97,6 +97,10 @@ static const char USAGE[] = "\n" " - 'darken' substracts light to the image ( between 0 and 255).\n" " - 'linearize' optimizes the contrast using the brightness histogram. is the fraction (between 0.0 and 1.0) of discarded tail of the histogram.\n" " - 'posterize' redistributes the colors between classes per channel ( between 2 and 255).\n" +" -v, --vignette []\n" +" Apply a circular central vignette to the filter using the optional value. Admissible names:\n" +" - 'blend' : the filter is applied with full intensity in the center and blends with the image to the periphery.\n" +" - 'fade' : the filter is applied with full intensity in the center and fades to black to the periphery.\n" " -log, --logmetrics \n" " Log performance data for . Results in .slp\n" " Note: so far, only ImageCompressionTester has been tested.\n" @@ -366,6 +370,8 @@ int main(int argc, char** argv) bool reversible = false; std::string filter_name = ""; double filter_param = 0.0; + std::string vignette_name = ""; + double vignette_param = 1.0; // Init whatever is necessary ll_init_apr(); @@ -568,7 +574,36 @@ int main(int argc, char** argv) } } } - else if (!strcmp(argv[arg], "--analyzeperformance") || !strcmp(argv[arg], "-a")) + else if (!strcmp(argv[arg], "--vignette") || !strcmp(argv[arg], "-v")) + { + // '--vignette' needs to be specified with a named vignette argument + if ((arg + 1) < argc) + { + vignette_name = argv[arg+1]; + } + if (((arg + 1) >= argc) || (vignette_name[0] == '-')) + { + // We don't have an argument left in the arg list or the next argument is another option + std::cout << "No --vignette argument given, no vignette will be applied to filters" << std::endl; + } + else + { + arg += 1; // Skip that arg now we know it's a valid vignette name + if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list + break; + // --vignette can also have an optional parameter + std::string value_str; + value_str = argv[arg+1]; // Check the next arg + if (value_str[0] != '-') // If it's not another argument, it's a vignette parameter value + { + vignette_param = atof(value_str.c_str()); + arg += 1; // Skip that arg now we used it as a valid vignette param + if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list + break; + } + } + } + else if (!strcmp(argv[arg], "--analyzeperformance") || !strcmp(argv[arg], "-a")) { analyze_performance = true; } @@ -614,6 +649,16 @@ int main(int argc, char** argv) continue; } + // Set the vignette if any + if (vignette_name == "blend") + { + raw_image->setVignette(VIGNETTE_MODE_BLEND,(float)(vignette_param)); + } + else if (vignette_name == "fade") + { + raw_image->setVignette(VIGNETTE_MODE_FADE,(float)(vignette_param)); + } + // Apply filter if any if (filter_name == "sepia") { -- cgit v1.2.3 From 35e30759c82e0fa425e2ee5ba235868a25b44169 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 3 Jan 2014 15:44:29 -0800 Subject: ACME-1236 : WIP : Added a min value to vignette --- .../llimage_libtest/llimage_libtest.cpp | 23 +++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 45e60f64e6..6c23a6a866 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -97,8 +97,8 @@ static const char USAGE[] = "\n" " - 'darken' substracts light to the image ( between 0 and 255).\n" " - 'linearize' optimizes the contrast using the brightness histogram. is the fraction (between 0.0 and 1.0) of discarded tail of the histogram.\n" " - 'posterize' redistributes the colors between classes per channel ( between 2 and 255).\n" -" -v, --vignette []\n" -" Apply a circular central vignette to the filter using the optional value. Admissible names:\n" +" -v, --vignette [ ]\n" +" Apply a circular central vignette to the filter using the optional and values. Admissible names:\n" " - 'blend' : the filter is applied with full intensity in the center and blends with the image to the periphery.\n" " - 'fade' : the filter is applied with full intensity in the center and fades to black to the periphery.\n" " -log, --logmetrics \n" @@ -371,7 +371,8 @@ int main(int argc, char** argv) std::string filter_name = ""; double filter_param = 0.0; std::string vignette_name = ""; - double vignette_param = 1.0; + double vignette_param_1 = 1.0; + double vignette_param_2 = 0.0; // Init whatever is necessary ll_init_apr(); @@ -591,15 +592,23 @@ int main(int argc, char** argv) arg += 1; // Skip that arg now we know it's a valid vignette name if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list break; - // --vignette can also have an optional parameter + // --vignette can also have optional parameters std::string value_str; value_str = argv[arg+1]; // Check the next arg if (value_str[0] != '-') // If it's not another argument, it's a vignette parameter value { - vignette_param = atof(value_str.c_str()); + vignette_param_1 = atof(value_str.c_str()); arg += 1; // Skip that arg now we used it as a valid vignette param if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list break; + value_str = argv[arg+1]; // Check the next arg + if (value_str[0] != '-') // If it's not another argument, it's a vignette parameter value + { + vignette_param_2 = atof(value_str.c_str()); + arg += 1; // Skip that arg now we used it as a valid vignette param + if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list + break; + } } } } @@ -652,11 +661,11 @@ int main(int argc, char** argv) // Set the vignette if any if (vignette_name == "blend") { - raw_image->setVignette(VIGNETTE_MODE_BLEND,(float)(vignette_param)); + raw_image->setVignette(VIGNETTE_MODE_BLEND,(float)(vignette_param_1),(float)(vignette_param_2)); } else if (vignette_name == "fade") { - raw_image->setVignette(VIGNETTE_MODE_FADE,(float)(vignette_param)); + raw_image->setVignette(VIGNETTE_MODE_FADE,(float)(vignette_param_1),(float)(vignette_param_2)); } // Apply filter if any -- cgit v1.2.3 From 90cbda6db0d075dccc2369a68b02919b40f53cca Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 3 Jan 2014 17:31:04 -0800 Subject: ACME-1236 : WIP : Add 2 new color correction filters. Add a la Instagram composite filters for testing in llimage_libtest --- .../llimage_libtest/llimage_libtest.cpp | 40 +++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 6c23a6a866..58d7f53dd1 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -716,7 +716,45 @@ int main(int argc, char** argv) { raw_image->filterEqualize((S32)(filter_param)); } - + // Test for some "a la Instagram" filters + else if (filter_name == "Lomofi") + { + raw_image->setVignette(VIGNETTE_MODE_BLEND,4.0,0.0); + raw_image->filterLinearize(0.2); + } + else if (filter_name == "Sutro") + { + raw_image->filterLinearize(0.2); + raw_image->setVignette(VIGNETTE_MODE_FADE,4.0,0.5); + raw_image->filterSepia(); + } + else if (filter_name == "Inkwell") + { + raw_image->filterLinearize(0.0); + raw_image->filterGrayScale(); + } + else if (filter_name == "Poprocket") + { + LLColor4U color = LLColor4U::red; + color.setAlpha((U8)(0.2 * 255.0)); + raw_image->filterLinearize(0.0); + raw_image->setVignette(VIGNETTE_MODE_FADE,4.0,0.5); + raw_image->filterColorize(color); + } + else if (filter_name == "Gotham") + { + raw_image->filterLinearize(0.0); + raw_image->filterColorBalance(1.0,1.0,20.0); + raw_image->filterGrayScale(); + } + else if (filter_name == "Toaster") + { + raw_image->filterContrast(0.8); + raw_image->setVignette(VIGNETTE_MODE_FADE,4.0,0.5); + raw_image->filterBrightness(10); + raw_image->filterColorBalance(0.5,1.0,1.0); + } + // Save file if (out_file != out_end) { -- cgit v1.2.3 From 3cbd0dfd849a94a789ae70f4bdc176f85cf2ba34 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Mon, 6 Jan 2014 14:46:52 -0800 Subject: ACME-1236 : WIP : Make each color correct filter use a per channel alpha argument, tweak Instagram-like test filters for discussion --- .../llimage_libtest/llimage_libtest.cpp | 66 +++++++++++++--------- 1 file changed, 39 insertions(+), 27 deletions(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 58d7f53dd1..6045ed321d 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -687,73 +687,85 @@ int main(int argc, char** argv) } else if (filter_name == "gamma") { - raw_image->filterGamma((float)(filter_param)); + raw_image->filterGamma((float)(filter_param),LLColor3::white); } else if (filter_name == "colorize") { - // For testing, we just colorize in red, modulate by the alpha passed as a parameter - LLColor4U color = LLColor4U::red; - color.setAlpha((U8)(filter_param * 255.0)); - raw_image->filterColorize(color); + // For testing, we just colorize in the red channel, modulate by the alpha passed as a parameter + LLColor3 color(1.0,0.0,0.0); + LLColor3 alpha((F32)(filter_param),0.0,0.0); + raw_image->filterColorize(color,alpha); } else if (filter_name == "contrast") { - raw_image->filterContrast((float)(filter_param)); + raw_image->filterContrast((float)(filter_param),LLColor3::white); } else if (filter_name == "brighten") { - raw_image->filterBrightness((S32)(filter_param)); + raw_image->filterBrightness((S32)(filter_param),LLColor3::white); } else if (filter_name == "darken") { - raw_image->filterBrightness((S32)(-filter_param)); + raw_image->filterBrightness((S32)(-filter_param),LLColor3::white); } else if (filter_name == "linearize") { - raw_image->filterLinearize((float)(filter_param)); + raw_image->filterLinearize((float)(filter_param),LLColor3::white); } else if (filter_name == "posterize") { - raw_image->filterEqualize((S32)(filter_param)); + raw_image->filterEqualize((S32)(filter_param),LLColor3::white); } // Test for some "a la Instagram" filters else if (filter_name == "Lomofi") { raw_image->setVignette(VIGNETTE_MODE_BLEND,4.0,0.0); - raw_image->filterLinearize(0.2); + raw_image->filterLinearize(0.2,LLColor3::white); + raw_image->filterBrightness(20,LLColor3::white); + } + else if (filter_name == "Poprocket") + { + LLColor3 color(1.0,0.0,0.0); + LLColor3 alpha(0.5,0.0,0.0); + raw_image->filterLinearize(0.0,LLColor3::white); + raw_image->filterContrast(0.5,LLColor3::white); + raw_image->setVignette(VIGNETTE_MODE_FADE,4.0,0.5); + raw_image->filterColorize(color,alpha); } else if (filter_name == "Sutro") { - raw_image->filterLinearize(0.2); + raw_image->filterLinearize(0.2,LLColor3::white); raw_image->setVignette(VIGNETTE_MODE_FADE,4.0,0.5); raw_image->filterSepia(); } + else if (filter_name == "Toaster") + { + raw_image->filterContrast(0.8,LLColor3::white); + raw_image->setVignette(VIGNETTE_MODE_FADE,4.0,0.5); + raw_image->filterBrightness(10,LLColor3::white); + //raw_image->filterColorBalance(0.5,1.0,1.0); + } else if (filter_name == "Inkwell") { - raw_image->filterLinearize(0.0); + raw_image->filterLinearize(0.0,LLColor3::white); raw_image->filterGrayScale(); } - else if (filter_name == "Poprocket") + else if (filter_name == "Hefe") { - LLColor4U color = LLColor4U::red; - color.setAlpha((U8)(0.2 * 255.0)); - raw_image->filterLinearize(0.0); + raw_image->filterLinearize(0.0,LLColor3::white); raw_image->setVignette(VIGNETTE_MODE_FADE,4.0,0.5); - raw_image->filterColorize(color); + raw_image->filterContrast(1.5,LLColor3::white); } else if (filter_name == "Gotham") { - raw_image->filterLinearize(0.0); - raw_image->filterColorBalance(1.0,1.0,20.0); + raw_image->filterLinearize(0.0,LLColor3::white); + // Blow out the Blue + LLColor3 color(0.0,0.0,0.0); + LLColor3 alpha(0.0,0.0,1.0); + raw_image->filterColorize(color,alpha); + // Convert to Grayscale raw_image->filterGrayScale(); } - else if (filter_name == "Toaster") - { - raw_image->filterContrast(0.8); - raw_image->setVignette(VIGNETTE_MODE_FADE,4.0,0.5); - raw_image->filterBrightness(10); - raw_image->filterColorBalance(0.5,1.0,1.0); - } // Save file if (out_file != out_end) -- cgit v1.2.3 From 5187e709c923429554ab89600a0b27cb9cedd567 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Tue, 7 Jan 2014 16:17:25 -0800 Subject: ACME-1236 : WIP : Add filter file loading and execution to llimage_libtest, suppress the a la Instagram tests as a result --- .../llimage_libtest/llimage_libtest.cpp | 156 ++++++++++++++------- 1 file changed, 107 insertions(+), 49 deletions(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 6045ed321d..009be0941e 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -40,6 +40,7 @@ #include "lldir.h" #include "lldiriterator.h" #include "v4coloru.h" +#include "llsdserialize.h" // system libraries #include @@ -97,6 +98,7 @@ static const char USAGE[] = "\n" " - 'darken' substracts light to the image ( between 0 and 255).\n" " - 'linearize' optimizes the contrast using the brightness histogram. is the fraction (between 0.0 and 1.0) of discarded tail of the histogram.\n" " - 'posterize' redistributes the colors between classes per channel ( between 2 and 255).\n" +" - Any other value will be interpreted as a file name describing a sequence of filters and parameters to be applied to the input images\n" " -v, --vignette [ ]\n" " Apply a circular central vignette to the filter using the optional and values. Admissible names:\n" " - 'blend' : the filter is applied with full intensity in the center and blends with the image to the periphery.\n" @@ -114,10 +116,110 @@ static const char USAGE[] = "\n" // true when all image loading is done. Used by metric logging thread to know when to stop the thread. static bool sAllDone = false; +// Load filter from file +LLSD load_filter_from_file(const std::string& file_path) +{ + std::cout << "Loading filter settings from : " << file_path << std::endl; + + llifstream filter_xml(file_path); + if (filter_xml.is_open()) + { + // load and parse it + LLSD filter_data(LLSD::emptyArray()); + LLPointer parser = new LLSDXMLParser(); + parser->parse(filter_xml, filter_data, LLSDSerialize::SIZE_UNLIMITED); + filter_xml.close(); + return filter_data; + } + else + { + return LLSD(); + } +} + +// Apply the filter data to the image passed as parameter +void execute_filter(const LLSD& filter_data, LLPointer raw_image) +{ + //std::cout << "Filter : size = " << filter_data.size() << std::endl; + for (S32 i = 0; i < filter_data.size(); ++i) + { + std::string filter_name = filter_data[i][0].asString(); + // Dump out the filter values (for debug) + //std::cout << "Filter : name = " << filter_data[i][0].asString() << ", params = "; + //for (S32 j = 1; j < filter_data[i].size(); ++j) + //{ + // std::cout << filter_data[i][j].asString() << ", "; + //} + //std::cout << std::endl; + + // Execute the filter described on this line + if (filter_name == "blend") + { + raw_image->setVignette(VIGNETTE_MODE_BLEND,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); + } + else if (filter_name == "fade") + { + raw_image->setVignette(VIGNETTE_MODE_FADE,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); + } + else if (filter_name == "sepia") + { + raw_image->filterSepia(); + } + else if (filter_name == "grayscale") + { + raw_image->filterGrayScale(); + } + else if (filter_name == "saturate") + { + raw_image->filterSaturate((float)(filter_data[i][1].asReal())); + } + else if (filter_name == "rotate") + { + raw_image->filterRotate((float)(filter_data[i][1].asReal())); + } + else if (filter_name == "gamma") + { + LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); + raw_image->filterGamma((float)(filter_data[i][1].asReal()),color); + } + else if (filter_name == "colorize") + { + LLColor3 color((float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal())); + LLColor3 alpha((F32)(filter_data[i][4].asReal()),(float)(filter_data[i][5].asReal()),(float)(filter_data[i][6].asReal())); + raw_image->filterColorize(color,alpha); + } + else if (filter_name == "contrast") + { + LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); + raw_image->filterContrast((float)(filter_data[i][1].asReal()),color); + } + else if (filter_name == "brighten") + { + LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); + raw_image->filterBrightness((S32)(filter_data[i][1].asReal()),color); + } + else if (filter_name == "darken") + { + LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); + raw_image->filterBrightness((S32)(-filter_data[i][1].asReal()),color); + } + else if (filter_name == "linearize") + { + LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); + raw_image->filterLinearize((float)(filter_data[i][1].asReal()),color); + } + else if (filter_name == "posterize") + { + LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); + raw_image->filterEqualize((S32)(filter_data[i][1].asReal()),color); + } + } +} + // Create an empty formatted image instance of the correct type from the filename LLPointer create_image(const std::string &filename) { - std::string exten = gDirUtilp->getExtension(filename); + std::string exten = gDirUtilp->getExtension(filename); LLPointer image = LLImageFormatted::createFromExtension(exten); return image; } @@ -716,55 +818,11 @@ int main(int argc, char** argv) { raw_image->filterEqualize((S32)(filter_param),LLColor3::white); } - // Test for some "a la Instagram" filters - else if (filter_name == "Lomofi") + else if (filter_name != "") { - raw_image->setVignette(VIGNETTE_MODE_BLEND,4.0,0.0); - raw_image->filterLinearize(0.2,LLColor3::white); - raw_image->filterBrightness(20,LLColor3::white); - } - else if (filter_name == "Poprocket") - { - LLColor3 color(1.0,0.0,0.0); - LLColor3 alpha(0.5,0.0,0.0); - raw_image->filterLinearize(0.0,LLColor3::white); - raw_image->filterContrast(0.5,LLColor3::white); - raw_image->setVignette(VIGNETTE_MODE_FADE,4.0,0.5); - raw_image->filterColorize(color,alpha); - } - else if (filter_name == "Sutro") - { - raw_image->filterLinearize(0.2,LLColor3::white); - raw_image->setVignette(VIGNETTE_MODE_FADE,4.0,0.5); - raw_image->filterSepia(); - } - else if (filter_name == "Toaster") - { - raw_image->filterContrast(0.8,LLColor3::white); - raw_image->setVignette(VIGNETTE_MODE_FADE,4.0,0.5); - raw_image->filterBrightness(10,LLColor3::white); - //raw_image->filterColorBalance(0.5,1.0,1.0); - } - else if (filter_name == "Inkwell") - { - raw_image->filterLinearize(0.0,LLColor3::white); - raw_image->filterGrayScale(); - } - else if (filter_name == "Hefe") - { - raw_image->filterLinearize(0.0,LLColor3::white); - raw_image->setVignette(VIGNETTE_MODE_FADE,4.0,0.5); - raw_image->filterContrast(1.5,LLColor3::white); - } - else if (filter_name == "Gotham") - { - raw_image->filterLinearize(0.0,LLColor3::white); - // Blow out the Blue - LLColor3 color(0.0,0.0,0.0); - LLColor3 alpha(0.0,0.0,1.0); - raw_image->filterColorize(color,alpha); - // Convert to Grayscale - raw_image->filterGrayScale(); + // We're interpreting the filter as a filter file name + LLSD filter_data = load_filter_from_file(filter_name); + execute_filter(filter_data,raw_image); } // Save file -- cgit v1.2.3 From c2a974f1556906f6ca69afb5942378c8dbf85169 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Tue, 7 Jan 2014 22:10:23 -0800 Subject: ACME-1236 : WIP : Introduced screenFilter, simple creative screening filter --- indra/integration_tests/llimage_libtest/llimage_libtest.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 009be0941e..69cea33911 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -119,8 +119,7 @@ static bool sAllDone = false; // Load filter from file LLSD load_filter_from_file(const std::string& file_path) { - std::cout << "Loading filter settings from : " << file_path << std::endl; - + //std::cout << "Loading filter settings from : " << file_path << std::endl; llifstream filter_xml(file_path); if (filter_xml.is_open()) { @@ -213,6 +212,10 @@ void execute_filter(const LLSD& filter_data, LLPointer raw_image) LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); raw_image->filterEqualize((S32)(filter_data[i][1].asReal()),color); } + else if (filter_name == "screen") + { + raw_image->screenFilter((S32)(filter_data[i][1].asReal())); + } } } @@ -818,6 +821,10 @@ int main(int argc, char** argv) { raw_image->filterEqualize((S32)(filter_param),LLColor3::white); } + else if (filter_name == "screen") + { + raw_image->screenFilter((S32)(filter_param)); + } else if (filter_name != "") { // We're interpreting the filter as a filter file name -- cgit v1.2.3 From 3161d822ab1336a347f1bb34574b5c4b8e747799 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Wed, 8 Jan 2014 15:41:42 -0800 Subject: ACME-1236 : WIP : Added mode and angle parameter to filterScreen (renamed for consistency) --- .../llimage_libtest/llimage_libtest.cpp | 34 +++++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 69cea33911..90a7c09442 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -98,7 +98,11 @@ static const char USAGE[] = "\n" " - 'darken' substracts light to the image ( between 0 and 255).\n" " - 'linearize' optimizes the contrast using the brightness histogram. is the fraction (between 0.0 and 1.0) of discarded tail of the histogram.\n" " - 'posterize' redistributes the colors between classes per channel ( between 2 and 255).\n" -" - Any other value will be interpreted as a file name describing a sequence of filters and parameters to be applied to the input images\n" +" - 'newsscreen' applies a 2D sine screening to the red channel and output to black and white.\n" +" - 'horizontalscreen' applies a horizontal screening to the red channel and output to black and white.\n" +" - 'verticalscreen' applies a vertical screening to the red channel and output to black and white.\n" +" - 'slantedscreen' applies a 45 degrees slanted screening to the red channel and output to black and white.\n" +" - Any other value will be interpreted as a file name describing a sequence of filters and parameters to be applied to the input images.\n" " -v, --vignette [ ]\n" " Apply a circular central vignette to the filter using the optional and values. Admissible names:\n" " - 'blend' : the filter is applied with full intensity in the center and blends with the image to the periphery.\n" @@ -214,7 +218,17 @@ void execute_filter(const LLSD& filter_data, LLPointer raw_image) } else if (filter_name == "screen") { - raw_image->screenFilter((S32)(filter_data[i][1].asReal())); + std::string screen_name = filter_data[i][1].asString(); + EScreenMode mode = SCREEN_MODE_2DSINE; + if (screen_name == "2Dsine") + { + mode = SCREEN_MODE_2DSINE; + } + else if (screen_name == "line") + { + mode = SCREEN_MODE_LINE; + } + raw_image->filterScreen(mode,(S32)(filter_data[i][2].asReal()),(F32)(filter_data[i][3].asReal())); } } } @@ -821,9 +835,21 @@ int main(int argc, char** argv) { raw_image->filterEqualize((S32)(filter_param),LLColor3::white); } - else if (filter_name == "screen") + else if (filter_name == "newsscreen") + { + raw_image->filterScreen(SCREEN_MODE_2DSINE,(S32)(filter_param),0.0); + } + else if (filter_name == "horizontalscreen") + { + raw_image->filterScreen(SCREEN_MODE_LINE,(S32)(filter_param),0.0); + } + else if (filter_name == "verticalscreen") + { + raw_image->filterScreen(SCREEN_MODE_LINE,(S32)(filter_param),90.0); + } + else if (filter_name == "slantedscreen") { - raw_image->screenFilter((S32)(filter_param)); + raw_image->filterScreen(SCREEN_MODE_LINE,(S32)(filter_param),45.0); } else if (filter_name != "") { -- cgit v1.2.3 From 0c7cab771cb7972ed44eedf0c16133ef082eb9e1 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Thu, 9 Jan 2014 21:58:30 -0800 Subject: ACME-1236 : Add lines as a new type of vignette and Brightscan as an example --- indra/integration_tests/llimage_libtest/llimage_libtest.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 90a7c09442..2447e00028 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -158,11 +158,15 @@ void execute_filter(const LLSD& filter_data, LLPointer raw_image) // Execute the filter described on this line if (filter_name == "blend") { - raw_image->setVignette(VIGNETTE_MODE_BLEND,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); + raw_image->setVignette(VIGNETTE_MODE_BLEND,VIGNETTE_TYPE_CENTER,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); } else if (filter_name == "fade") { - raw_image->setVignette(VIGNETTE_MODE_FADE,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); + raw_image->setVignette(VIGNETTE_MODE_FADE,VIGNETTE_TYPE_CENTER,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); + } + else if (filter_name == "lines") + { + raw_image->setVignette(VIGNETTE_MODE_BLEND,VIGNETTE_TYPE_LINES,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); } else if (filter_name == "sepia") { @@ -780,11 +784,11 @@ int main(int argc, char** argv) // Set the vignette if any if (vignette_name == "blend") { - raw_image->setVignette(VIGNETTE_MODE_BLEND,(float)(vignette_param_1),(float)(vignette_param_2)); + raw_image->setVignette(VIGNETTE_MODE_BLEND,VIGNETTE_TYPE_CENTER,(float)(vignette_param_1),(float)(vignette_param_2)); } else if (vignette_name == "fade") { - raw_image->setVignette(VIGNETTE_MODE_FADE,(float)(vignette_param_1),(float)(vignette_param_2)); + raw_image->setVignette(VIGNETTE_MODE_FADE,VIGNETTE_TYPE_CENTER,(float)(vignette_param_1),(float)(vignette_param_2)); } // Apply filter if any -- cgit v1.2.3 From 54ad7de61b5be2014c2e061a4964b7d6620a5dd4 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Mon, 13 Jan 2014 17:01:44 -0800 Subject: ACME-1244 : Introduced llimage/llimagefilter, refactored the filter execution code, simplified llimage_libtest filter testing --- .../llimage_libtest/llimage_libtest.cpp | 274 +-------------------- 1 file changed, 7 insertions(+), 267 deletions(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index 2447e00028..d3373a61f2 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -32,6 +32,7 @@ // Linden library includes #include "llimage.h" +#include "llimagefilter.h" #include "llimagejpeg.h" #include "llimagepng.h" #include "llimagebmp.h" @@ -85,28 +86,8 @@ static const char USAGE[] = "\n" " -rev, --reversible\n" " Set the compression to be lossless (reversible in j2c parlance).\n" " Only valid for output j2c images.\n" -" -f, --filter []\n" -" Apply the filter to the input images using the optional value. Admissible names:\n" -" - 'grayscale' converts to grayscale (no param).\n" -" - 'sepia' converts to sepia (no param).\n" -" - 'saturate' changes color saturation according to : < 1.0 will desaturate, > 1.0 will saturate.\n" -" - 'rotate' rotates the color hue according to (in degree, positive value only).\n" -" - 'gamma' applies gamma curve to all channels: > 1.0 will darken, < 1.0 will lighten.\n" -" - 'colorize' applies a red tint to the image using as an alpha (transparency between 0.0 and 1.0) value.\n" -" - 'contrast' modifies the contrast according to : > 1.0 will enhance the contrast, <1.0 will flatten it.\n" -" - 'brighten' adds light to the image ( between 0 and 255).\n" -" - 'darken' substracts light to the image ( between 0 and 255).\n" -" - 'linearize' optimizes the contrast using the brightness histogram. is the fraction (between 0.0 and 1.0) of discarded tail of the histogram.\n" -" - 'posterize' redistributes the colors between classes per channel ( between 2 and 255).\n" -" - 'newsscreen' applies a 2D sine screening to the red channel and output to black and white.\n" -" - 'horizontalscreen' applies a horizontal screening to the red channel and output to black and white.\n" -" - 'verticalscreen' applies a vertical screening to the red channel and output to black and white.\n" -" - 'slantedscreen' applies a 45 degrees slanted screening to the red channel and output to black and white.\n" -" - Any other value will be interpreted as a file name describing a sequence of filters and parameters to be applied to the input images.\n" -" -v, --vignette [ ]\n" -" Apply a circular central vignette to the filter using the optional and values. Admissible names:\n" -" - 'blend' : the filter is applied with full intensity in the center and blends with the image to the periphery.\n" -" - 'fade' : the filter is applied with full intensity in the center and fades to black to the periphery.\n" +" -f, --filter \n" +" Apply the filter to the input images.\n" " -log, --logmetrics \n" " Log performance data for . Results in .slp\n" " Note: so far, only ImageCompressionTester has been tested.\n" @@ -120,123 +101,6 @@ static const char USAGE[] = "\n" // true when all image loading is done. Used by metric logging thread to know when to stop the thread. static bool sAllDone = false; -// Load filter from file -LLSD load_filter_from_file(const std::string& file_path) -{ - //std::cout << "Loading filter settings from : " << file_path << std::endl; - llifstream filter_xml(file_path); - if (filter_xml.is_open()) - { - // load and parse it - LLSD filter_data(LLSD::emptyArray()); - LLPointer parser = new LLSDXMLParser(); - parser->parse(filter_xml, filter_data, LLSDSerialize::SIZE_UNLIMITED); - filter_xml.close(); - return filter_data; - } - else - { - return LLSD(); - } -} - -// Apply the filter data to the image passed as parameter -void execute_filter(const LLSD& filter_data, LLPointer raw_image) -{ - //std::cout << "Filter : size = " << filter_data.size() << std::endl; - for (S32 i = 0; i < filter_data.size(); ++i) - { - std::string filter_name = filter_data[i][0].asString(); - // Dump out the filter values (for debug) - //std::cout << "Filter : name = " << filter_data[i][0].asString() << ", params = "; - //for (S32 j = 1; j < filter_data[i].size(); ++j) - //{ - // std::cout << filter_data[i][j].asString() << ", "; - //} - //std::cout << std::endl; - - // Execute the filter described on this line - if (filter_name == "blend") - { - raw_image->setVignette(VIGNETTE_MODE_BLEND,VIGNETTE_TYPE_CENTER,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); - } - else if (filter_name == "fade") - { - raw_image->setVignette(VIGNETTE_MODE_FADE,VIGNETTE_TYPE_CENTER,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); - } - else if (filter_name == "lines") - { - raw_image->setVignette(VIGNETTE_MODE_BLEND,VIGNETTE_TYPE_LINES,(float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal())); - } - else if (filter_name == "sepia") - { - raw_image->filterSepia(); - } - else if (filter_name == "grayscale") - { - raw_image->filterGrayScale(); - } - else if (filter_name == "saturate") - { - raw_image->filterSaturate((float)(filter_data[i][1].asReal())); - } - else if (filter_name == "rotate") - { - raw_image->filterRotate((float)(filter_data[i][1].asReal())); - } - else if (filter_name == "gamma") - { - LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); - raw_image->filterGamma((float)(filter_data[i][1].asReal()),color); - } - else if (filter_name == "colorize") - { - LLColor3 color((float)(filter_data[i][1].asReal()),(float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal())); - LLColor3 alpha((F32)(filter_data[i][4].asReal()),(float)(filter_data[i][5].asReal()),(float)(filter_data[i][6].asReal())); - raw_image->filterColorize(color,alpha); - } - else if (filter_name == "contrast") - { - LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); - raw_image->filterContrast((float)(filter_data[i][1].asReal()),color); - } - else if (filter_name == "brighten") - { - LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); - raw_image->filterBrightness((S32)(filter_data[i][1].asReal()),color); - } - else if (filter_name == "darken") - { - LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); - raw_image->filterBrightness((S32)(-filter_data[i][1].asReal()),color); - } - else if (filter_name == "linearize") - { - LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); - raw_image->filterLinearize((float)(filter_data[i][1].asReal()),color); - } - else if (filter_name == "posterize") - { - LLColor3 color((float)(filter_data[i][2].asReal()),(float)(filter_data[i][3].asReal()),(float)(filter_data[i][4].asReal())); - raw_image->filterEqualize((S32)(filter_data[i][1].asReal()),color); - } - else if (filter_name == "screen") - { - std::string screen_name = filter_data[i][1].asString(); - EScreenMode mode = SCREEN_MODE_2DSINE; - if (screen_name == "2Dsine") - { - mode = SCREEN_MODE_2DSINE; - } - else if (screen_name == "line") - { - mode = SCREEN_MODE_LINE; - } - raw_image->filterScreen(mode,(S32)(filter_data[i][2].asReal()),(F32)(filter_data[i][3].asReal())); - } - } -} - // Create an empty formatted image instance of the correct type from the filename LLPointer create_image(const std::string &filename) { @@ -492,10 +356,6 @@ int main(int argc, char** argv) int levels = 0; bool reversible = false; std::string filter_name = ""; - double filter_param = 0.0; - std::string vignette_name = ""; - double vignette_param_1 = 1.0; - double vignette_param_2 = 0.0; // Init whatever is necessary ll_init_apr(); @@ -686,53 +546,6 @@ int main(int argc, char** argv) arg += 1; // Skip that arg now we know it's a valid test name if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list break; - // --filter can also have an optional parameter - std::string value_str; - value_str = argv[arg+1]; // Check the next arg - if (value_str[0] != '-') // If it's not another argument, it's a filter parameter value - { - filter_param = atof(value_str.c_str()); - arg += 1; // Skip that arg now we used it as a valid filter param - if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list - break; - } - } - } - else if (!strcmp(argv[arg], "--vignette") || !strcmp(argv[arg], "-v")) - { - // '--vignette' needs to be specified with a named vignette argument - if ((arg + 1) < argc) - { - vignette_name = argv[arg+1]; - } - if (((arg + 1) >= argc) || (vignette_name[0] == '-')) - { - // We don't have an argument left in the arg list or the next argument is another option - std::cout << "No --vignette argument given, no vignette will be applied to filters" << std::endl; - } - else - { - arg += 1; // Skip that arg now we know it's a valid vignette name - if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list - break; - // --vignette can also have optional parameters - std::string value_str; - value_str = argv[arg+1]; // Check the next arg - if (value_str[0] != '-') // If it's not another argument, it's a vignette parameter value - { - vignette_param_1 = atof(value_str.c_str()); - arg += 1; // Skip that arg now we used it as a valid vignette param - if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list - break; - value_str = argv[arg+1]; // Check the next arg - if (value_str[0] != '-') // If it's not another argument, it's a vignette parameter value - { - vignette_param_2 = atof(value_str.c_str()); - arg += 1; // Skip that arg now we used it as a valid vignette param - if ((arg + 1) == argc) // Break out of the loop if we reach the end of the arg list - break; - } - } } } else if (!strcmp(argv[arg], "--analyzeperformance") || !strcmp(argv[arg], "-a")) @@ -781,85 +594,12 @@ int main(int argc, char** argv) continue; } - // Set the vignette if any - if (vignette_name == "blend") - { - raw_image->setVignette(VIGNETTE_MODE_BLEND,VIGNETTE_TYPE_CENTER,(float)(vignette_param_1),(float)(vignette_param_2)); - } - else if (vignette_name == "fade") - { - raw_image->setVignette(VIGNETTE_MODE_FADE,VIGNETTE_TYPE_CENTER,(float)(vignette_param_1),(float)(vignette_param_2)); - } - - // Apply filter if any - if (filter_name == "sepia") - { - raw_image->filterSepia(); - } - else if (filter_name == "grayscale") - { - raw_image->filterGrayScale(); - } - else if (filter_name == "saturate") - { - raw_image->filterSaturate((float)(filter_param)); - } - else if (filter_name == "rotate") - { - raw_image->filterRotate((float)(filter_param)); - } - else if (filter_name == "gamma") - { - raw_image->filterGamma((float)(filter_param),LLColor3::white); - } - else if (filter_name == "colorize") - { - // For testing, we just colorize in the red channel, modulate by the alpha passed as a parameter - LLColor3 color(1.0,0.0,0.0); - LLColor3 alpha((F32)(filter_param),0.0,0.0); - raw_image->filterColorize(color,alpha); - } - else if (filter_name == "contrast") - { - raw_image->filterContrast((float)(filter_param),LLColor3::white); - } - else if (filter_name == "brighten") - { - raw_image->filterBrightness((S32)(filter_param),LLColor3::white); - } - else if (filter_name == "darken") - { - raw_image->filterBrightness((S32)(-filter_param),LLColor3::white); - } - else if (filter_name == "linearize") - { - raw_image->filterLinearize((float)(filter_param),LLColor3::white); - } - else if (filter_name == "posterize") - { - raw_image->filterEqualize((S32)(filter_param),LLColor3::white); - } - else if (filter_name == "newsscreen") - { - raw_image->filterScreen(SCREEN_MODE_2DSINE,(S32)(filter_param),0.0); - } - else if (filter_name == "horizontalscreen") - { - raw_image->filterScreen(SCREEN_MODE_LINE,(S32)(filter_param),0.0); - } - else if (filter_name == "verticalscreen") - { - raw_image->filterScreen(SCREEN_MODE_LINE,(S32)(filter_param),90.0); - } - else if (filter_name == "slantedscreen") - { - raw_image->filterScreen(SCREEN_MODE_LINE,(S32)(filter_param),45.0); - } - else if (filter_name != "") + if (filter_name != "") { // We're interpreting the filter as a filter file name - LLSD filter_data = load_filter_from_file(filter_name); - execute_filter(filter_data,raw_image); + LLImageFilter filter; + filter.loadFromFile(filter_name); + filter.executeFilter(raw_image); } // Save file -- cgit v1.2.3 From fda7b94f490564568dee0ba6d6516943b0fd82a0 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Thu, 16 Jan 2014 18:34:51 -0800 Subject: ACME-1236 : Small LLImageFilter clean up --- .../integration_tests/llimage_libtest/llimage_libtest.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'indra/integration_tests/llimage_libtest/llimage_libtest.cpp') diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp index d3373a61f2..3d27b4a5b5 100755 --- a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp +++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp @@ -578,7 +578,10 @@ int main(int argc, char** argv) fast_timer_log_thread = new LogThread(LLFastTimer::sLogName); fast_timer_log_thread->start(); } - + + // Load the filter once and for all + LLImageFilter filter(filter_name); + // Perform action on each input file std::list::iterator in_file = input_filenames.begin(); std::list::iterator out_file = output_filenames.begin(); @@ -594,13 +597,8 @@ int main(int argc, char** argv) continue; } - if (filter_name != "") - { - // We're interpreting the filter as a filter file name - LLImageFilter filter; - filter.loadFromFile(filter_name); - filter.executeFilter(raw_image); - } + // Apply the filter + filter.executeFilter(raw_image); // Save file if (out_file != out_end) -- cgit v1.2.3