Roll skia/third_party/skcms cca4d5d..e19e9b9 (1 commits)
https://skia.googlesource.com/skcms.git/+log/cca4d5d..e19e9b9 2018-04-24 brianosman@google.com Remove skcms_BestSingleCurve The AutoRoll server is located here: https://skcms-skia-roll.skia.org Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+/master/autoroll/README.md If the roll is causing failures, please contact the current sheriff, who should be CC'd on the roll, and stop the roller if necessary. TBR=stani@google.com Change-Id: I28c0be7b318c8475dd34b0d7f26b012c16dafe44 Reviewed-on: https://skia-review.googlesource.com/123530 Commit-Queue: skcms-skia-autoroll <skcms-skia-autoroll@skia-buildbots.google.com.iam.gserviceaccount.com> Reviewed-by: skcms-skia-autoroll <skcms-skia-autoroll@skia-buildbots.google.com.iam.gserviceaccount.com>
This commit is contained in:
parent
ff134f20ae
commit
058f2e6ed2
4
third_party/skcms/skcms.h
vendored
4
third_party/skcms/skcms.h
vendored
@ -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;
|
||||
|
44
third_party/skcms/src/TransferFunction.c
vendored
44
third_party/skcms/src/TransferFunction.c
vendored
@ -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];
|
||||
}
|
||||
|
2
third_party/skcms/version.sha1
vendored
2
third_party/skcms/version.sha1
vendored
@ -1 +1 @@
|
||||
cca4d5d9654b31900fc2a612007a9069f83f6de2
|
||||
e19e9b9418405e14169a6e4e500150432fcc57c4
|
Loading…
Reference in New Issue
Block a user