diff options
-rw-r--r-- | third_party/skcms/skcms.h | 4 | ||||
-rw-r--r-- | third_party/skcms/src/TransferFunction.c | 44 | ||||
-rwxr-xr-x | third_party/skcms/version.sha1 | 2 |
3 files changed, 1 insertions, 49 deletions
diff --git a/third_party/skcms/skcms.h b/third_party/skcms/skcms.h index 32c30cbe7d..af0801afa4 100644 --- a/third_party/skcms/skcms.h +++ b/third_party/skcms/skcms.h @@ -130,10 +130,6 @@ void skcms_OptimizeForSpeed(skcms_ICCProfile*); bool skcms_ApproximateCurve(const skcms_Curve* curve, skcms_TransferFunction* approx, float* max_error); -// What is the best single transfer function to use for the given profile? Note that there is -// no real upper bound on the error of this transfer function. -skcms_TransferFunction skcms_BestSingleCurve(const skcms_ICCProfile*); - typedef struct skcms_ICCTag { uint32_t signature; uint32_t type; diff --git a/third_party/skcms/src/TransferFunction.c b/third_party/skcms/src/TransferFunction.c index 345b9aa3cb..c87e0695bd 100644 --- a/third_party/skcms/src/TransferFunction.c +++ b/third_party/skcms/src/TransferFunction.c @@ -321,47 +321,3 @@ bool skcms_ApproximateCurve(const skcms_Curve* curve, } return isfinitef_(*max_error); } - -static float max_error_over_curve(const skcms_TransferFunction* tf, const skcms_Curve* curve) { - int N = curve->table_entries ? (int)curve->table_entries : 256; - const float x_scale = 1.0f / (N - 1); - float err = 0; - for (int i = 0; i < N; i++) { - float x = i * x_scale; - err = fmaxf_(err, fabsf_(skcms_eval_curve(x, curve) - skcms_TransferFunction_eval(tf, x))); - } - return err; -} - -skcms_TransferFunction skcms_BestSingleCurve(const skcms_ICCProfile* profile) { - if (!profile || !profile->has_trc) { - return skcms_sRGB_profile.trc[0].parametric; - } - - skcms_TransferFunction tf[3]; - for (int i = 0; i < 3; ++i) { - if (profile->trc[i].table_entries) { - float max_error; - if (!skcms_ApproximateCurve(&profile->trc[i], &tf[i], &max_error)) { - return skcms_sRGB_profile.trc[0].parametric; - } - } else { - tf[i] = profile->trc[i].parametric; - } - } - - int best_tf = 0; - float min_max_error = INFINITY_; - for (int i = 0; i < 3; ++i) { - float err = 0; - for (int j = 0; j < 3; ++j) { - err = fmaxf_(err, max_error_over_curve(&tf[i], &profile->trc[j])); - } - if (min_max_error > err) { - min_max_error = err; - best_tf = i; - } - } - - return tf[best_tf]; -} diff --git a/third_party/skcms/version.sha1 b/third_party/skcms/version.sha1 index 399e159cda..b78dbac96f 100755 --- a/third_party/skcms/version.sha1 +++ b/third_party/skcms/version.sha1 @@ -1 +1 @@ -cca4d5d9654b31900fc2a612007a9069f83f6de2
\ No newline at end of file +e19e9b9418405e14169a6e4e500150432fcc57c4
\ No newline at end of file |