summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeandro Ribeiro <leandro.ribeiro@collabora.com>2023-11-15 12:56:49 -0300
committerPekka Paalanen <pq@iki.fi>2024-03-26 11:23:26 +0000
commit80d97db856cb2426366d9988d6e681833f592367 (patch)
treebfadaa9d03e374906fc30a55cd8179fc029c09a1
parent5ddbdb7a4f82af58848056e6fe2b4b15e5d1d33d (diff)
color-lcms: changes to the parameters of translate_curve_element()
Not a behavior change, but this allow us to decide what function pointer to use within this function (instead of forcing callers to decide that). In the following commits this will be helpful. We'll add more curves besides 3x1D LUT's and, depending on the curve, the function pointer signature may differ. Also, we now pass the xform directly to the function, and it can select the curves depending if it is being called for a pre or a post curve. Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
-rw-r--r--libweston/color-lcms/color-transform.c43
-rw-r--r--shared/weston-assert.h3
-rw-r--r--tests/assert-test.c4
3 files changed, 37 insertions, 13 deletions
diff --git a/libweston/color-lcms/color-transform.c b/libweston/color-lcms/color-transform.c
index 3cd71eeb..d5af355f 100644
--- a/libweston/color-lcms/color-transform.c
+++ b/libweston/color-lcms/color-transform.c
@@ -464,24 +464,45 @@ merge_curvesets(cmsPipeline **lut, cmsContext context_id)
return modified;
}
+enum color_transform_step {
+ PRE_CURVE,
+ POST_CURVE,
+};
+
static bool
-translate_curve_element(struct weston_color_curve *curve,
- cmsToneCurve *stash[3],
- void (*func)(struct weston_color_transform *xform,
- float *values, unsigned len),
- cmsStage *elem)
+translate_curve_element(struct cmlcms_color_transform *xform,
+ cmsStage *elem, enum color_transform_step step)
{
+ struct weston_compositor *compositor = xform->base.cm->compositor;
+ struct weston_color_curve *curve;
+ cmsToneCurve **stash;
_cmsStageToneCurvesData *trc_data;
unsigned i;
- assert(cmsStageType(elem) == cmsSigCurveSetElemType);
+ weston_assert_uint64_eq(compositor, cmsStageType(elem),
+ cmsSigCurveSetElemType);
trc_data = cmsStageData(elem);
if (trc_data->nCurves != 3)
return false;
+ switch(step) {
+ case PRE_CURVE:
+ curve = &xform->base.pre_curve;
+ curve->u.lut_3x1d.fill_in = cmlcms_fill_in_pre_curve;
+ stash = xform->pre_curve;
+ break;
+ case POST_CURVE:
+ curve = &xform->base.post_curve;
+ curve->u.lut_3x1d.fill_in = cmlcms_fill_in_post_curve;
+ stash = xform->post_curve;
+ break;
+ default:
+ weston_assert_not_reached(compositor,
+ "curve should be a pre or post curve");
+ }
+
curve->type = WESTON_COLOR_CURVE_TYPE_LUT_3x1D;
- curve->u.lut_3x1d.fill_in = func;
curve->u.lut_3x1d.optimal_len = cmlcms_reasonable_1D_points();
for (i = 0; i < 3; i++) {
@@ -533,9 +554,7 @@ translate_pipeline(struct cmlcms_color_transform *xform, const cmsPipeline *lut)
return true;
if (cmsStageType(elem) == cmsSigCurveSetElemType) {
- if (!translate_curve_element(&xform->base.pre_curve,
- xform->pre_curve,
- cmlcms_fill_in_pre_curve, elem))
+ if (!translate_curve_element(xform, elem, PRE_CURVE))
return false;
elem = cmsStageNext(elem);
@@ -555,9 +574,7 @@ translate_pipeline(struct cmlcms_color_transform *xform, const cmsPipeline *lut)
return true;
if (cmsStageType(elem) == cmsSigCurveSetElemType) {
- if (!translate_curve_element(&xform->base.post_curve,
- xform->post_curve,
- cmlcms_fill_in_post_curve, elem))
+ if (!translate_curve_element(xform, elem, POST_CURVE))
return false;
elem = cmsStageNext(elem);
diff --git a/shared/weston-assert.h b/shared/weston-assert.h
index 6e313dc1..909c9997 100644
--- a/shared/weston-assert.h
+++ b/shared/weston-assert.h
@@ -109,6 +109,9 @@ do { \
#define weston_assert_uint32_lt(compositor, a, b) \
weston_assert_(compositor, a, b, uint32_t, "%u", <)
+#define weston_assert_uint64_eq(compositor, a, b) \
+ weston_assert_(compositor, a, b, uint64_t, "%" PRIx64, ==)
+
#define weston_assert_str_eq(compositor, a, b) \
weston_assert_fn_(compositor, strcmp, a, b, const char *, "%s", ==)
diff --git a/tests/assert-test.c b/tests/assert-test.c
index ab776758..acc134b7 100644
--- a/tests/assert-test.c
+++ b/tests/assert-test.c
@@ -132,4 +132,8 @@ TEST(asserts)
abort_if_not(ret);
ret = weston_assert_bit_is_set(compositor, bitfield, 57);
abort_if_not(ret == false);
+
+ uint64_t max_uint64 = UINT64_MAX;
+ ret = weston_assert_uint64_eq(compositor, max_uint64, 0);
+ abort_if_not(ret == false);
}