diff --git a/libweston/color-lcms/color-transform.c b/libweston/color-lcms/color-transform.c index 643186a97e8664fde3173f58b971ea6bbbe0fd3d..3da96958b30db8e857f94c7728d62ab9a0943371 100644 --- a/libweston/color-lcms/color-transform.c +++ b/libweston/color-lcms/color-transform.c @@ -192,7 +192,7 @@ matrix_inf_norm(const cmsMAT3 *mat) double sum = 0.0; for (col = 0; col < 3; col++) - sum += fabs(mat->v[col].n[row]); + sum += fabs(mat->v[row].n[col]); if (infnorm < sum) infnorm = sum; @@ -222,9 +222,9 @@ matrix_is_identity(const cmsMAT3 *mat, int bits_precision) } static const cmsMAT3 * -stage_matrix_transpose(const _cmsStageMatrixData *smd) +stage_matrix(const _cmsStageMatrixData *smd) { - /* smd is row-major, cmsMAT3 is column-major */ + /* Both are row-major. */ return (const cmsMAT3 *)smd->Double; } @@ -259,7 +259,7 @@ is_identity_matrix_stage(const cmsStage *stage) return false; data = cmsStageData(stage); - return matrix_is_identity(stage_matrix_transpose(data), + return matrix_is_identity(stage_matrix(data), MATRIX_PRECISION_BITS); } @@ -274,15 +274,7 @@ multiply_matrix_stages(cmsContext context_id, cmsStage *next, cmsStage *prev) prev_ = cmsStageData(prev); next_ = cmsStageData(next); - /* res = prev^T * next^T */ - _cmsMAT3per(&res, stage_matrix_transpose(next_), - stage_matrix_transpose(prev_)); - - /* - * res is column-major while Alloc function takes row-major; - * the cast effectively transposes the matrix. - * We return (prev^T * next^T)^T = next * prev. - */ + _cmsMAT3per(&res, stage_matrix(next_), stage_matrix(prev_)); ret = cmsStageAllocMatrix(context_id, 3, 3, (const cmsFloat64Number*)&res, NULL); abort_oom_if_null(ret); diff --git a/tests/color_util.h b/tests/color_util.h index 46817dfc136802752705c96748a4fdb045e1bc32..52a765c3fca0b0af283a2b46bb68b9cadd970b0a 100644 --- a/tests/color_util.h +++ b/tests/color_util.h @@ -53,6 +53,9 @@ struct lcmsVEC3 { float n[3]; }; +/* + * While LittleCMS' cmsMAT3 is row-major, this here is colum-major. + */ struct lcmsMAT3 { /* array of columns */ struct lcmsVEC3 v[3];