You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
src/yuv_rgb/color.rs has quite a bit of code that can logically be const-evaluated.
Basically, get_rgb_to_yuv_matrix and get_yuv_to_rgb_matrix (which is the first function plus 1 step) can be simplified into lookups of 3x3 matrices based only on the MatrixCoefficients and ColorPrimaries.
This could either be done by moving the calculation code into a build script (similar to this PR in ssimulacra2), or by using soft floats (e.g. const_soft_float and/or constgebra).
This could also allow removing the nalgebra dependency, since the only nalgebra code that really needs to run at runtime is the pix_vector * transform_matrix multiplication, which can be ported to a trivial helper function (because the dimensions are always the same).
The text was updated successfully, but these errors were encountered:
I've played around with this a bit and it looks like this won't be a real performance increase, maybe 1-2%. It could still be nice to ditch the nalgebra dependency... I've basically implemented this on my fork. It needs a bit of polishing, but the matrix stuff is ~200 lines of mostly boilerplate. I'll think about whether I want to open a PR with it.
Even when using const-evaluated LUTs, there doesn't seem to be a noteworthy performance increase. I think it's probably best to "just" ditch the nalgebra dependency by adding some Matrix boilerplate...
src/yuv_rgb/color.rs
has quite a bit of code that can logically be const-evaluated.Basically,
get_rgb_to_yuv_matrix
andget_yuv_to_rgb_matrix
(which is the first function plus 1 step) can be simplified into lookups of 3x3 matrices based only on theMatrixCoefficients
andColorPrimaries
.This could either be done by moving the calculation code into a build script (similar to this PR in ssimulacra2), or by using soft floats (e.g. const_soft_float and/or constgebra).
This could also allow removing the
nalgebra
dependency, since the onlynalgebra
code that really needs to run at runtime is thepix_vector * transform_matrix
multiplication, which can be ported to a trivial helper function (because the dimensions are always the same).The text was updated successfully, but these errors were encountered: