summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeandro Ribeiro <leandro.ribeiro@collabora.com>2024-03-07 17:32:19 -0300
committerPekka Paalanen <pq@iki.fi>2024-03-26 11:23:26 +0000
commitaff6029da25d592bed927e70ab0096004675555f (patch)
treebe059b0e19cd798922022a09fcd4d1c4bf99db9a
parent80d97db856cb2426366d9988d6e681833f592367 (diff)
color-lcms: add translate_curve_element_LUT()
Currently in translate_curve_element() we always translate the curve into a LUT. But in the future we'll be able to translate the curves to parametric ones. So move the current code to a new function translate_curve_element_LUT(), so that in translate_curve_element() we are able to call one of the two functions (_LUT() or _parametric()). No behavior changes, just preparation for the upcoming patches. Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
-rw-r--r--libweston/color-lcms/color-transform.c31
-rw-r--r--shared/weston-assert.h3
2 files changed, 24 insertions, 10 deletions
diff --git a/libweston/color-lcms/color-transform.c b/libweston/color-lcms/color-transform.c
index d5af355f..318cd31e 100644
--- a/libweston/color-lcms/color-transform.c
+++ b/libweston/color-lcms/color-transform.c
@@ -470,22 +470,15 @@ enum color_transform_step {
};
static bool
-translate_curve_element(struct cmlcms_color_transform *xform,
- cmsStage *elem, enum color_transform_step step)
+translate_curve_element_LUT(struct cmlcms_color_transform *xform,
+ _cmsStageToneCurvesData *trc_data,
+ 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;
- 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;
@@ -505,6 +498,7 @@ translate_curve_element(struct cmlcms_color_transform *xform,
curve->type = WESTON_COLOR_CURVE_TYPE_LUT_3x1D;
curve->u.lut_3x1d.optimal_len = cmlcms_reasonable_1D_points();
+ weston_assert_uint32_eq(compositor, trc_data->nCurves, 3);
for (i = 0; i < 3; i++) {
stash[i] = cmsDupToneCurve(trc_data->TheCurves[i]);
abort_oom_if_null(stash[i]);
@@ -514,6 +508,23 @@ translate_curve_element(struct cmlcms_color_transform *xform,
}
static bool
+translate_curve_element(struct cmlcms_color_transform *xform,
+ cmsStage *elem, enum color_transform_step step)
+{
+ struct weston_compositor *compositor = xform->base.cm->compositor;
+ _cmsStageToneCurvesData *trc_data;
+
+ weston_assert_uint64_eq(compositor, cmsStageType(elem),
+ cmsSigCurveSetElemType);
+
+ trc_data = cmsStageData(elem);
+ if (trc_data->nCurves != 3)
+ return false;
+
+ return translate_curve_element_LUT(xform, trc_data, step);
+}
+
+static bool
translate_matrix_element(struct weston_color_mapping *map, cmsStage *elem)
{
_cmsStageMatrixData *data = cmsStageData(elem);
diff --git a/shared/weston-assert.h b/shared/weston-assert.h
index 909c9997..52434fd0 100644
--- a/shared/weston-assert.h
+++ b/shared/weston-assert.h
@@ -97,6 +97,9 @@ do { \
#define weston_assert_double_eq(compositor, a, b) \
weston_assert_(compositor, a, b, double, "%.10g", ==)
+#define weston_assert_uint32_eq(compositor, a, b) \
+ weston_assert_(compositor, a, b, uint32_t, "%u", ==)
+
#define weston_assert_uint32_neq(compositor, a, b) \
weston_assert_(compositor, a, b, uint32_t, "%u", !=)