one function table_index3D

This commit is contained in:
Alexander 2018-03-26 17:41:25 +03:00
parent 845f4dbfe1
commit df192fff1e

View File

@ -111,18 +111,12 @@ interpolate4(INT16 out[4], const INT16 a[4], const INT16 b[4], INT16 shift)
} }
static inline int static inline int
table3D_index3(int index1D, int index2D, int index3D, table_index3D(int index1D, int index2D, int index3D,
int size1D, int size1D_2D) int size1D, int size1D_2D)
{ {
return (index1D + index2D * size1D + index3D * size1D_2D) * 3; return index1D + index2D * size1D + index3D * size1D_2D;
} }
static inline int
table3D_index4(int index1D, int index2D, int index3D,
int size1D, int size1D_2D)
{
return (index1D + index2D * size1D + index3D * size1D_2D) * 4;
}
/* /*
Transforms colors of imIn using provided 3D look-up table Transforms colors of imIn using provided 3D look-up table
@ -145,7 +139,7 @@ ImagingColorLUT3D_linear(Imaging imOut, Imaging imIn, int table_channels,
INT16* table) INT16* table)
{ {
/* This float to int conversion doesn't have rounding /* This float to int conversion doesn't have rounding
error compensation (+ 0.5) for two reasons: error compensation (+0.5) for two reasons:
1. As we don't hit the highest value, 1. As we don't hit the highest value,
we can use one extra bit for precision. we can use one extra bit for precision.
2. For every pixel, we interpolate 8 elements from the table: 2. For every pixel, we interpolate 8 elements from the table:
@ -188,11 +182,9 @@ ImagingColorLUT3D_linear(Imaging imOut, Imaging imIn, int table_channels,
INT16 shift1D = (SCALE_MASK & index1D) >> (SCALE_BITS - SHIFT_BITS); INT16 shift1D = (SCALE_MASK & index1D) >> (SCALE_BITS - SHIFT_BITS);
INT16 shift2D = (SCALE_MASK & index2D) >> (SCALE_BITS - SHIFT_BITS); INT16 shift2D = (SCALE_MASK & index2D) >> (SCALE_BITS - SHIFT_BITS);
INT16 shift3D = (SCALE_MASK & index3D) >> (SCALE_BITS - SHIFT_BITS); INT16 shift3D = (SCALE_MASK & index3D) >> (SCALE_BITS - SHIFT_BITS);
int idx = table3D_index3( int idx = 3 * table_index3D(
index1D >> SCALE_BITS, index1D >> SCALE_BITS, index2D >> SCALE_BITS,
index2D >> SCALE_BITS, index3D >> SCALE_BITS, size1D, size1D_2D);
index3D >> SCALE_BITS,
size1D, size1D_2D);
INT16 result[4], left[4], right[4]; INT16 result[4], left[4], right[4];
INT16 leftleft[4], leftright[4], rightleft[4], rightright[4]; INT16 leftleft[4], leftright[4], rightleft[4], rightright[4];