mirror of
https://gitlab.freedesktop.org/wayland/weston
synced 2024-10-15 21:43:44 +00:00
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>
This commit is contained in:
parent
5ddbdb7a4f
commit
80d97db856
|
@ -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);
|
||||
|
|
|
@ -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", ==)
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue