From 7d8e4020750683412c9f56edf847fd830402aa0f Mon Sep 17 00:00:00 2001
From: Merov Linden <merov@lindenlab.com>
Date: Thu, 9 Jan 2014 17:25:01 -0800
Subject: [PATCH] ACME-1244 : WIP : Move files around and introduced an
 llimagefiltersmanager to get the filters

---
 indra/newview/CMakeLists.txt                  |  2 +
 .../filters/{Hefe.xml => Grayscale.xml}       | 12 ++-
 .../filters/{Lomofi.xml => GreenGray.xml}     | 17 ++--
 .../filters/{Gotham.xml => HLines.xml}        | 19 ++---
 .../newview/app_settings/filters/Inkwell.xml  | 14 ----
 .../app_settings/filters/Newspaper.xml        |  4 +-
 .../filters/{Poprocket.xml => RedV.xml}       | 13 ++-
 .../app_settings/filters/Saturate30.xml       |  8 ++
 .../filters/{Toaster.xml => SepiaV.xml}       | 13 +--
 indra/newview/app_settings/filters/Sutro.xml  | 19 -----
 indra/newview/app_settings/filters/VividV.xml | 45 ++++++++++
 .../app_settings/filters/VividYellowV.xml     | 39 +++++++++
 .../newview/app_settings/filters/YellowV.xml  | 41 +++++++++
 indra/newview/llimagefiltersmanager.cpp       | 84 +++++++++++++++++++
 indra/newview/llimagefiltersmanager.h         | 74 ++++++++++++++++
 indra/newview/viewer_manifest.py              |  3 +
 16 files changed, 337 insertions(+), 70 deletions(-)
 rename indra/newview/app_settings/filters/{Hefe.xml => Grayscale.xml} (72%)
 rename indra/newview/app_settings/filters/{Lomofi.xml => GreenGray.xml} (66%)
 rename indra/newview/app_settings/filters/{Gotham.xml => HLines.xml} (58%)
 delete mode 100755 indra/newview/app_settings/filters/Inkwell.xml
 rename indra/newview/app_settings/filters/{Poprocket.xml => RedV.xml} (65%)
 create mode 100755 indra/newview/app_settings/filters/Saturate30.xml
 rename indra/newview/app_settings/filters/{Toaster.xml => SepiaV.xml} (77%)
 delete mode 100755 indra/newview/app_settings/filters/Sutro.xml
 create mode 100755 indra/newview/app_settings/filters/VividV.xml
 create mode 100755 indra/newview/app_settings/filters/VividYellowV.xml
 create mode 100755 indra/newview/app_settings/filters/YellowV.xml
 create mode 100755 indra/newview/llimagefiltersmanager.cpp
 create mode 100755 indra/newview/llimagefiltersmanager.h

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 828849a3271..e458193142d 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -328,6 +328,7 @@ set(viewer_SOURCE_FILES
     llfloaterimsessiontab.cpp
     llfloaterimsession.cpp
     llfloaterimcontainer.cpp
+    llimagefiltersmanager.cpp
     llimhandler.cpp
     llimview.cpp
     llinspect.cpp
@@ -919,6 +920,7 @@ set(viewer_HEADER_FILES
     llfloaterimsessiontab.h
     llfloaterimsession.h
     llfloaterimcontainer.h
+    llimagefiltersmanager.h
     llimview.h
     llinspect.h
     llinspectavatar.h
diff --git a/indra/newview/app_settings/filters/Hefe.xml b/indra/newview/app_settings/filters/Grayscale.xml
similarity index 72%
rename from indra/newview/app_settings/filters/Hefe.xml
rename to indra/newview/app_settings/filters/Grayscale.xml
index 527aaee847f..101ed8233ab 100755
--- a/indra/newview/app_settings/filters/Hefe.xml
+++ b/indra/newview/app_settings/filters/Grayscale.xml
@@ -2,22 +2,20 @@
     <array>
         <array>
             <string>linearize</string>
-            <real>0.0</real>
+            <real>0.01</real>
             <real>1.0</real>
             <real>1.0</real>
             <real>1.0</real>
         </array>
-        <array>
-            <string>blend</string>
-            <real>4.0</real>
-            <real>0.5</real>
-        </array>
         <array>
             <string>contrast</string>
-            <real>2.0</real>
+            <real>0.8</real>
             <real>1.0</real>
             <real>1.0</real>
             <real>1.0</real>
         </array>
+        <array>
+            <string>grayscale</string>
+        </array>
     </array>
 </llsd>
diff --git a/indra/newview/app_settings/filters/Lomofi.xml b/indra/newview/app_settings/filters/GreenGray.xml
similarity index 66%
rename from indra/newview/app_settings/filters/Lomofi.xml
rename to indra/newview/app_settings/filters/GreenGray.xml
index f5ec911e593..dce5ab3e9e8 100755
--- a/indra/newview/app_settings/filters/Lomofi.xml
+++ b/indra/newview/app_settings/filters/GreenGray.xml
@@ -1,23 +1,24 @@
 <llsd>
     <array>
-        <array>
-            <string>blend</string>
-            <real>4.0</real>
-            <real>0.0</real>
-        </array>
         <array>
             <string>linearize</string>
-            <real>0.2</real>
+            <real>0.1</real>
             <real>1.0</real>
             <real>1.0</real>
             <real>1.0</real>
         </array>
         <array>
-            <string>brighten</string>
-            <real>20.0</real>
+            <string>colorize</string>
             <real>1.0</real>
             <real>1.0</real>
             <real>1.0</real>
+            <real>0.0</real>
+            <real>0.3</real>
+            <real>0.0</real>
+        </array>
+        <array>
+            <string>saturate</string>
+            <real>0.35</real>
         </array>
     </array>
 </llsd>
diff --git a/indra/newview/app_settings/filters/Gotham.xml b/indra/newview/app_settings/filters/HLines.xml
similarity index 58%
rename from indra/newview/app_settings/filters/Gotham.xml
rename to indra/newview/app_settings/filters/HLines.xml
index eb0725e6bf2..ddff4d19771 100755
--- a/indra/newview/app_settings/filters/Gotham.xml
+++ b/indra/newview/app_settings/filters/HLines.xml
@@ -2,29 +2,24 @@
     <array>
         <array>
             <string>linearize</string>
-            <real>0.0</real>
+            <real>0.1</real>
             <real>1.0</real>
             <real>1.0</real>
             <real>1.0</real>
         </array>
         <array>
-            <string>gamma</string>
-            <real>1.5</real>
-            <real>1.0</real>
-            <real>1.0</real>
-            <real>1.0</real>
+            <string>grayscale</string>
         </array>
         <array>
-            <string>colorize</string>
-            <real>0.0</real>
+            <string>blend</string>
             <real>0.0</real>
             <real>0.0</real>
-            <real>0.0</real>
-            <real>0.0</real>
-            <real>1.0</real>
         </array>
         <array>
-            <string>grayscale</string>
+            <string>screen</string>
+            <string>line</string>
+            <real>5.0</real>
+            <real>0.0</real>
         </array>
     </array>
 </llsd>
diff --git a/indra/newview/app_settings/filters/Inkwell.xml b/indra/newview/app_settings/filters/Inkwell.xml
deleted file mode 100755
index 77c88b5fbb3..00000000000
--- a/indra/newview/app_settings/filters/Inkwell.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<llsd>
-    <array>
-        <array>
-            <string>linearize</string>
-            <real>0.05</real>
-            <real>1.0</real>
-            <real>1.0</real>
-            <real>1.0</real>
-        </array>
-        <array>
-            <string>grayscale</string>
-        </array>
-    </array>
-</llsd>
diff --git a/indra/newview/app_settings/filters/Newspaper.xml b/indra/newview/app_settings/filters/Newspaper.xml
index 74803255421..8247c34500a 100755
--- a/indra/newview/app_settings/filters/Newspaper.xml
+++ b/indra/newview/app_settings/filters/Newspaper.xml
@@ -2,7 +2,7 @@
     <array>
         <array>
             <string>linearize</string>
-            <real>0.2</real>
+            <real>0.1</real>
             <real>1.0</real>
             <real>1.0</real>
             <real>1.0</real>
@@ -18,7 +18,7 @@
         <array>
             <string>screen</string>
             <string>2Dsine</string>
-            <real>15.0</real>
+            <real>5.0</real>
             <real>0.0</real>
         </array>
     </array>
diff --git a/indra/newview/app_settings/filters/Poprocket.xml b/indra/newview/app_settings/filters/RedV.xml
similarity index 65%
rename from indra/newview/app_settings/filters/Poprocket.xml
rename to indra/newview/app_settings/filters/RedV.xml
index 7e64003908f..5c47ca0f849 100755
--- a/indra/newview/app_settings/filters/Poprocket.xml
+++ b/indra/newview/app_settings/filters/RedV.xml
@@ -2,7 +2,14 @@
     <array>
         <array>
             <string>linearize</string>
-            <real>0.0</real>
+            <real>0.1</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+        </array>
+        <array>
+            <string>contrast</string>
+            <real>0.8</real>
             <real>1.0</real>
             <real>1.0</real>
             <real>1.0</real>
@@ -16,10 +23,10 @@
             <string>colorize</string>
             <real>1.0</real>
             <real>0.0</real>
-            <real>0.0</real>
+            <real>1.0</real>
             <real>0.4</real>
             <real>0.0</real>
-            <real>0.0</real>
+            <real>0.2</real>
         </array>
     </array>
 </llsd>
diff --git a/indra/newview/app_settings/filters/Saturate30.xml b/indra/newview/app_settings/filters/Saturate30.xml
new file mode 100755
index 00000000000..b77f07a0374
--- /dev/null
+++ b/indra/newview/app_settings/filters/Saturate30.xml
@@ -0,0 +1,8 @@
+<llsd>
+    <array>
+        <array>
+            <string>saturate</string>
+            <real>3.0</real>
+        </array>
+    </array>
+</llsd>
diff --git a/indra/newview/app_settings/filters/Toaster.xml b/indra/newview/app_settings/filters/SepiaV.xml
similarity index 77%
rename from indra/newview/app_settings/filters/Toaster.xml
rename to indra/newview/app_settings/filters/SepiaV.xml
index 170a1183ed0..d26df608b9e 100755
--- a/indra/newview/app_settings/filters/Toaster.xml
+++ b/indra/newview/app_settings/filters/SepiaV.xml
@@ -1,5 +1,12 @@
 <llsd>
     <array>
+        <array>
+            <string>linearize</string>
+            <real>0.01</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+        </array>
         <array>
             <string>contrast</string>
             <real>0.8</real>
@@ -13,11 +20,7 @@
             <real>0.5</real>
         </array>
         <array>
-            <string>brighten</string>
-            <real>10.0</real>
-            <real>1.0</real>
-            <real>1.0</real>
-            <real>1.0</real>
+            <string>sepia</string>
         </array>
     </array>
 </llsd>
diff --git a/indra/newview/app_settings/filters/Sutro.xml b/indra/newview/app_settings/filters/Sutro.xml
deleted file mode 100755
index 3b0a58f01e5..00000000000
--- a/indra/newview/app_settings/filters/Sutro.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<llsd>
-    <array>
-        <array>
-            <string>linearize</string>
-            <real>0.05</real>
-            <real>1.0</real>
-            <real>1.0</real>
-            <real>1.0</real>
-        </array>
-        <array>
-            <string>fade</string>
-            <real>4.0</real>
-            <real>0.5</real>
-        </array>
-        <array>
-            <string>sepia</string>
-        </array>
-    </array>
-</llsd>
diff --git a/indra/newview/app_settings/filters/VividV.xml b/indra/newview/app_settings/filters/VividV.xml
new file mode 100755
index 00000000000..203130bdeed
--- /dev/null
+++ b/indra/newview/app_settings/filters/VividV.xml
@@ -0,0 +1,45 @@
+<llsd>
+    <array>
+        <array>
+            <string>linearize</string>
+            <real>0.1</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+        </array>
+        <array>
+            <string>contrast</string>
+            <real>0.8</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+        </array>
+        <array>
+            <string>saturate</string>
+            <real>1.5</real>
+        </array>
+        <array>
+            <string>fade</string>
+            <real>1.0</real>
+            <real>0.25</real>
+        </array>
+        <array>
+            <string>saturate</string>
+            <real>0.8</real>
+        </array>
+        <array>
+            <string>contrast</string>
+            <real>1.1</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+        </array>
+        <array>
+            <string>brighten</string>
+            <real>30</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+        </array>
+    </array>
+</llsd>
diff --git a/indra/newview/app_settings/filters/VividYellowV.xml b/indra/newview/app_settings/filters/VividYellowV.xml
new file mode 100755
index 00000000000..2da27e53c14
--- /dev/null
+++ b/indra/newview/app_settings/filters/VividYellowV.xml
@@ -0,0 +1,39 @@
+<llsd>
+    <array>
+        <array>
+            <string>linearize</string>
+            <real>0.1</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+        </array>
+        <array>
+            <string>contrast</string>
+            <real>1.1</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+        </array>
+        <array>
+            <string>fade</string>
+            <real>1.0</real>
+            <real>0.25</real>
+        </array>
+        <array>
+            <string>colorize</string>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>0.3</real>
+            <real>0.2</real>
+            <real>0.0</real>
+        </array>
+        <array>
+            <string>contrast</string>
+            <real>1.1</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+        </array>
+    </array>
+</llsd>
diff --git a/indra/newview/app_settings/filters/YellowV.xml b/indra/newview/app_settings/filters/YellowV.xml
new file mode 100755
index 00000000000..0dab2489a05
--- /dev/null
+++ b/indra/newview/app_settings/filters/YellowV.xml
@@ -0,0 +1,41 @@
+<llsd>
+    <array>
+        <array>
+            <string>linearize</string>
+            <real>0.1</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+        </array>
+        <array>
+            <string>contrast</string>
+            <real>0.8</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+        </array>
+        <array>
+            <string>colorize</string>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>0.5</real>
+            <real>0.0</real>
+            <real>0.0</real>
+        </array>
+        <array>
+            <string>blend</string>
+            <real>10.0</real>
+            <real>0.0</real>
+        </array>
+        <array>
+            <string>colorize</string>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>1.0</real>
+            <real>0.1</real>
+            <real>0.1</real>
+            <real>0.0</real>
+        </array>
+    </array>
+</llsd>
diff --git a/indra/newview/llimagefiltersmanager.cpp b/indra/newview/llimagefiltersmanager.cpp
new file mode 100755
index 00000000000..efc4f56ad3f
--- /dev/null
+++ b/indra/newview/llimagefiltersmanager.cpp
@@ -0,0 +1,84 @@
+/** 
+ * @file llimagefilters.cpp
+ * @brief Load and execute image filters. Mostly used for Flickr at the moment.
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2014, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llimagefilters.h"
+
+#include "lldiriterator.h"
+
+
+//---------------------------------------------------------------------------
+// LLImageFilters
+//---------------------------------------------------------------------------
+
+LLImageFilters::LLImageFilters()
+{
+}
+
+LLImageFilters::~LLImageFilters()
+{
+}
+
+// virtual static
+void LLImageFilters::initSingleton()
+{
+	loadAllFilters();
+}
+
+// static
+std::string LLImageFilters::getSysDir()
+{
+	return gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "filters", "");
+}
+
+void LLImageFilters::loadAllFilters()
+{
+	// Load system (coming out of the box) filters
+	loadFiltersFromDir(getSysDir());
+}
+
+void LLImageFilters::loadFiltersFromDir(const std::string& dir)
+{
+	LLDirIterator dir_iter(dir, "*.xml");
+	while (1)
+	{
+		std::string file;
+		if (!dir_iter.next(file))
+		{
+			break; // no more files
+		}
+        
+		std::string path = gDirUtilp->add(dir, file);
+
+        // For the moment, just output the file found to the log
+        llinfos << "Merov : loadFiltersFromDir, filter = " << path << llendl;
+	}
+}
+
+
+
+//============================================================================
diff --git a/indra/newview/llimagefiltersmanager.h b/indra/newview/llimagefiltersmanager.h
new file mode 100755
index 00000000000..52b4a56b9b0
--- /dev/null
+++ b/indra/newview/llimagefiltersmanager.h
@@ -0,0 +1,74 @@
+/** 
+ * @file llimagefilters.h
+ * @brief Load and execute image filters. Mostly used for Flickr at the moment.
+ *
+ * $LicenseInfo:firstyear=2000&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2014, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLIMAGEFILTERS_H
+#define LL_LLIMAGEFILTERS_H
+
+#include "llsingleton.h"
+#include "llimage.h"
+/*
+typedef enum e_vignette_mode
+{
+	VIGNETTE_MODE_NONE  = 0,
+	VIGNETTE_MODE_BLEND = 1,
+	VIGNETTE_MODE_FADE  = 2
+} EVignetteMode;
+
+typedef enum e_screen_mode
+{
+	SCREEN_MODE_2DSINE   = 0,
+	SCREEN_MODE_LINE     = 1
+} EScreenMode;
+*/
+//============================================================================
+// library initialization class
+
+class LLImageFilters : public LLSingleton<LLImageFilters>
+{
+	LOG_CLASS(LLImageFilters);
+public:
+    // getFilters(); get a vector of std::string containing the filter names
+    //LLSD loadFilter(const std::string& filter_name);
+    //void executeFilter(const LLSD& filter_data, LLPointer<LLImageRaw> raw_image);
+   
+protected:
+private:
+	void loadAllFilters();
+	void loadFiltersFromDir(const std::string& dir);
+	LLSD loadFilter(const std::string& path);
+    
+	static std::string getSysDir();
+    
+    friend class LLSingleton<LLImageFilters>;
+	/*virtual*/ void initSingleton();
+	LLImageFilters();
+	~LLImageFilters();
+    
+    // Needed here:
+    // - a map of filter files with name and path
+};
+
+#endif
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 9e8623c1f9c..3a76773dded 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -98,6 +98,9 @@ def construct(self):
                 # ... and the entire windlight directory
                 self.path("windlight")
 
+                # ... and the entire image filters directory
+                self.path("filters")
+            
                 # ... and the included spell checking dictionaries
                 pkgdir = os.path.join(self.args['build'], os.pardir, 'packages')
                 if self.prefix(src=pkgdir,dst=""):
-- 
GitLab