summaryrefslogtreecommitdiff
path: root/gpr/source/lib/dng_sdk/dng_1d_function.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gpr/source/lib/dng_sdk/dng_1d_function.cpp')
-rw-r--r--gpr/source/lib/dng_sdk/dng_1d_function.cpp195
1 files changed, 195 insertions, 0 deletions
diff --git a/gpr/source/lib/dng_sdk/dng_1d_function.cpp b/gpr/source/lib/dng_sdk/dng_1d_function.cpp
new file mode 100644
index 0000000..3ff79f4
--- /dev/null
+++ b/gpr/source/lib/dng_sdk/dng_1d_function.cpp
@@ -0,0 +1,195 @@
+/*****************************************************************************/
+// Copyright 2006 Adobe Systems Incorporated
+// All Rights Reserved.
+//
+// NOTICE: Adobe permits you to use, modify, and distribute this file in
+// accordance with the terms of the Adobe license agreement accompanying it.
+/*****************************************************************************/
+
+/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_1d_function.cpp#1 $ */
+/* $DateTime: 2012/05/30 13:28:51 $ */
+/* $Change: 832332 $ */
+/* $Author: tknoll $ */
+
+/*****************************************************************************/
+
+#include "dng_1d_function.h"
+
+#include "dng_utils.h"
+
+/*****************************************************************************/
+
+dng_1d_function::~dng_1d_function ()
+ {
+
+ }
+
+/*****************************************************************************/
+
+bool dng_1d_function::IsIdentity () const
+ {
+
+ return false;
+
+ }
+
+/*****************************************************************************/
+
+real64 dng_1d_function::EvaluateInverse (real64 y) const
+ {
+
+ const uint32 kMaxIterations = 30;
+ const real64 kNearZero = 1.0e-10;
+
+ real64 x0 = 0.0;
+ real64 y0 = Evaluate (x0);
+
+ real64 x1 = 1.0;
+ real64 y1 = Evaluate (x1);
+
+ for (uint32 iteration = 0; iteration < kMaxIterations; iteration++)
+ {
+
+ if (Abs_real64 (y1 - y0) < kNearZero)
+ {
+ break;
+ }
+
+ real64 x2 = Pin_real64 (0.0,
+ x1 + (y - y1) * (x1 - x0) / (y1 - y0),
+ 1.0);
+
+ real64 y2 = Evaluate (x2);
+
+ x0 = x1;
+ y0 = y1;
+
+ x1 = x2;
+ y1 = y2;
+
+ }
+
+ return x1;
+
+ }
+
+/*****************************************************************************/
+
+bool dng_1d_identity::IsIdentity () const
+ {
+
+ return true;
+
+ }
+
+/*****************************************************************************/
+
+real64 dng_1d_identity::Evaluate (real64 x) const
+ {
+
+ return x;
+
+ }
+
+/*****************************************************************************/
+
+real64 dng_1d_identity::EvaluateInverse (real64 x) const
+ {
+
+ return x;
+
+ }
+
+/*****************************************************************************/
+
+const dng_1d_function & dng_1d_identity::Get ()
+ {
+
+ static dng_1d_identity static_function;
+
+ return static_function;
+
+ }
+
+/*****************************************************************************/
+
+dng_1d_concatenate::dng_1d_concatenate (const dng_1d_function &function1,
+ const dng_1d_function &function2)
+
+ : fFunction1 (function1)
+ , fFunction2 (function2)
+
+ {
+
+ }
+
+/*****************************************************************************/
+
+bool dng_1d_concatenate::IsIdentity () const
+ {
+
+ return fFunction1.IsIdentity () &&
+ fFunction2.IsIdentity ();
+
+ }
+
+/*****************************************************************************/
+
+real64 dng_1d_concatenate::Evaluate (real64 x) const
+ {
+
+ real64 y = Pin_real64 (0.0, fFunction1.Evaluate (x), 1.0);
+
+ return fFunction2.Evaluate (y);
+
+ }
+
+/*****************************************************************************/
+
+real64 dng_1d_concatenate::EvaluateInverse (real64 x) const
+ {
+
+ real64 y = fFunction2.EvaluateInverse (x);
+
+ return fFunction1.EvaluateInverse (y);
+
+ }
+
+/*****************************************************************************/
+
+dng_1d_inverse::dng_1d_inverse (const dng_1d_function &f)
+
+ : fFunction (f)
+
+ {
+
+ }
+
+/*****************************************************************************/
+
+bool dng_1d_inverse::IsIdentity () const
+ {
+
+ return fFunction.IsIdentity ();
+
+ }
+
+/*****************************************************************************/
+
+real64 dng_1d_inverse::Evaluate (real64 x) const
+ {
+
+ return fFunction.EvaluateInverse (x);
+
+ }
+
+/*****************************************************************************/
+
+real64 dng_1d_inverse::EvaluateInverse (real64 y) const
+ {
+
+ return fFunction.Evaluate (y);
+
+ }
+
+/*****************************************************************************/