in libvmaf/src/read_json_model.c [186:274]
static int parse_score_transform(json_stream *s, VmafModel *model)
{
model->score_transform.enabled = false;
while (json_peek(s) != JSON_OBJECT_END && !json_get_error(s)) {
if (json_next(s) != JSON_STRING)
return -EINVAL;
const char *key = json_get_string(s, NULL);
if (!strcmp(key, "enabled")) {
if (json_peek(s) != JSON_TRUE && json_peek(s) != JSON_FALSE)
return -EINVAL;
model->score_transform.enabled = (json_next(s) == JSON_TRUE);
continue;
}
if (!strcmp(key, "p0")) {
if (json_peek(s) == JSON_NULL) {
model->score_transform.p0.enabled = false;
} else if (json_next(s) == JSON_NUMBER) {
model->score_transform.p0.enabled = true;
model->score_transform.p0.value = json_get_number(s);
} else {
return -EINVAL;
}
continue;
}
if (!strcmp(key, "p1")) {
if (json_peek(s) == JSON_NULL) {
model->score_transform.p1.enabled = false;
} else if (json_next(s) == JSON_NUMBER) {
model->score_transform.p1.enabled = true;
model->score_transform.p1.value = json_get_number(s);
} else {
return -EINVAL;
}
continue;
}
if (!strcmp(key, "p2")) {
if (json_peek(s) == JSON_NULL) {
model->score_transform.p2.enabled = false;
} else if (json_next(s) == JSON_NUMBER) {
model->score_transform.p2.enabled = true;
model->score_transform.p2.value = json_get_number(s);
} else {
return -EINVAL;
}
continue;
}
if (!strcmp(key, "knots")) {
if (json_peek(s) == JSON_NULL) {
model->score_transform.knots.enabled = false;
model->score_transform.knots.n_knots = 0;
} else if (json_next(s) == JSON_ARRAY) {
int err = parse_knots(s, model);
if (err) return err;
json_skip_until(s, JSON_ARRAY_END);
} else {
return -EINVAL;
}
continue;
}
if (!strcmp(key, "out_lte_in")) {
if (json_next(s) != JSON_STRING)
return -EINVAL;
const char *out_lte_in = json_get_string(s, NULL);
if (!strcmp(out_lte_in, "true"))
model->score_transform.out_lte_in = true;
continue;
}
if (!strcmp(key, "out_gte_in")) {
if (json_next(s) != JSON_STRING)
return -EINVAL;
const char *out_gte_in = json_get_string(s, NULL);
if (!strcmp(out_gte_in, "true"))
model->score_transform.out_gte_in = true;
continue;
}
json_skip(s);
}
return 0;
}