Added definitions of the 1-D filters and routines using
for the image scaling.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2108 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/common/rfb/ScaleFilters.h b/common/rfb/ScaleFilters.h
new file mode 100644
index 0000000..950838a
--- /dev/null
+++ b/common/rfb/ScaleFilters.h
@@ -0,0 +1,79 @@
+/* Copyright (C) 2006 TightVNC Team.  All Rights Reserved.

+ *    

+ * This is free software; you can redistribute it and/or modify

+ * it under the terms of the GNU General Public License as published by

+ * the Free Software Foundation; either version 2 of the License, or

+ * (at your option) any later version.

+ * 

+ * This software 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 General Public License for more details.

+ * 

+ * You should have received a copy of the GNU General Public License

+ * along with this software; if not, write to the Free Software

+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,

+ * USA.

+ */

+

+// -=- ScaleFilters.h

+//

+// Definitions of the 1-D filters and routines using for the image scaling.

+//  

+// 

+

+#include <math.h>

+

+namespace rfb {

+

+  typedef double (*filter_func)(double x);

+

+  const double pi = 3.14159265358979;

+

+  const unsigned int scaleFilterNearestNeighbor = 0;

+  const unsigned int scaleFilterBilinear = 1;

+  const unsigned int scaleFilterBicubic = 2;

+  const unsigned int scaleFilterSinc = 3;

+

+  const unsigned int scaleFiltersMax = 10;

+

+  // Nearest neighbor filter function

+  double nearest_neighbor(double x) {

+    if (x < -0.5) return 0.0;

+    if (x < 0.5) return 1.0;

+    return 0.0;

+  }

+

+  // Linear filter function

+  double linear(double x) {

+    if (x < -1.0) return 0.0;

+    if (x < 0.0) return 1.0+x;

+    if (x < 1.0) return 1.0-x;

+    return 0.0;

+  }

+

+  // Cubic filter functions

+  double cubic(double x) {

+    double t;

+    if (x < -2.0) return 0.0;

+    if (x < -1.0) {t = 2.0+x; return t*t*t/6.0;}

+    if (x < 0.0) return (4.0+x*x*(-6.0+x*-3.0))/6.0;

+    if (x < 1.0) return (4.0+x*x*(-6.0+x*3.0))/6.0;

+    if (x < 2.0) {t = 2.0-x; return t*t*t/6.0;}

+    return 0.0;

+  }

+

+  // Sinc filter function

+  double sinc(double x) {

+    if (x == 0.0) return 1.0;

+    else return sin(pi*x)/(pi*x);

+  }

+

+  class ScaleFilter {

+  public:

+    char name[30];

+    int radius;

+    filter_func func;

+  };

+

+};

diff --git a/common/rfb/rfb.dsp b/common/rfb/rfb.dsp
index f24563e..b8f6e47 100644
--- a/common/rfb/rfb.dsp
+++ b/common/rfb/rfb.dsp
@@ -629,6 +629,10 @@
 # End Source File

 # Begin Source File

 

+SOURCE=.\ScaleFilters.h

+# End Source File

+# Begin Source File

+

 SOURCE=.\SConnection.h

 # End Source File

 # Begin Source File