下载
中文
注册

hi_isp_clut_lut

说明

定义CLUT的查找表。

定义

typedef struct {
     hi_u32 lut[HI_ISP_CLUT_LUT_LENGTH];
} hi_isp_clut_lut;

成员

成员名称

描述

lut

查找表取值范围:[0, 1073741823]。

注:lut表中每个元素的有效范围是30bit,若设置超过取值范围的值,实际生效范围仍是30bit

#define HI_ISP_CLUT_LUT_LENGTH                    5508

注意事项

用户需要自行生成3D LUT表,将17x17x17x3的LUT放入8x3的LUT,然后将8x3的LUT紧凑排列填入长度为5508的LUT。

17x17x17x3的LUT每个元素的范围为[-511, 511],使用10bit有符号数表示。将17x17x17x3的LUT取成8x3的LUT的过程为:

三维表的下标为偶数时定义为0,下标为奇数时定义为1。R[i][j][k],G[i][j][k], B[i][j][k]中的i代表r的分格,j代表b的分格,k代表g的分格,即ijk代表三维表的地址坐标,对应的是rbg的排列顺序。R[i][j][k],G[i][j][k],B[i][j][k]的值是deltaR,deltaG,deltaB的值。用C代表RGB,真值表如下所示:

上图对应的伪代码如下所示:
for(k = 0; k < 17; k++) {
    for(j = 0; j < 17; j++) {
        for(i = 0; i < 17; i++) {
            switch((i&1) + ((j&1)<<1) + ((k&1)<<2)) {
                case 0:
                    R0[n0]=R[i][j][k];
                    G0[n0]=G[i][j][k];
                    B0[n0]=B[i][j][k];
                case 1:
                    R1[n1]=R[i][j][k];
                    G1[n1]=G[i][j][k];
                    B1[n1]=B[i][j][k];
                case 2:
                    R2[n2]=R[i][j][k];
                    G2[n2]=G[i][j][k];
                    B2[n2]=B[i][j][k];
                case 3:
                    R3[n3]=R[i][j][k];
                    G3[n3]=G[i][j][k];
                    B3[n3]=B[i][j][k];
                case 4:
                    R4[n4]=R[i][j][k];
                    G4[n4]=G[i][j][k];
                    B4[n4]=B[i][j][k];
                case 5:
                    R5[n5]=R[i][j][k];
                    G5[n5]=G[i][j][k];
                    B5[n5]=B[i][j][k];
                case 6:
                    R6[n6]=R[i][j][k];
                    G6[n6]=G[i][j][k];
                    B6[n6]=B[i][j][k];
                case 7:
                    R7[n7]=R[i][j][k];
                    G7[n7]=G[i][j][k];
                    B7[n7]=B[i][j][k];
            }
        }
    }
}

用C代表RGB,取成的8个LUT分别为c0[729]、c1[648]、c2[648]、c3[576]、 c4[648]、c5[576]、c6[576]、c7[512]。

下面的描述用_0代表一维数组c0[729]第0个数据,_1代表一维数组c0[729]第1个数据。

8x3的LUT按照每3个数据紧凑排列到1个32bit数据内的格式定义为:

{2’b00,B0_0,G0_0,R0_0},

{2’b00,B1_0,G1_0,R1_0},

{2’b00,B2_0,G2_0,R2_0},

{2’b00,B3_0,G3_0,R3_0},

{2’b00,B0_1,G0_1,R0_1},

{2’b00,B1_1,G1_1,R1_1},

{2’b00,B2_1,G2_1,R2_1},

{2’b00,B3_1,G3_1,R3_1},

{......},

上述格式可视化如下图所示:

整体看如下图所示:

8x3的LUT按照c0[729] 占用空间729 x 4 = 2916和c4[648]占用空间648 x 4 = 2592连续存储成一个长度为5508的一维数组。