IPNC一般都需要使用IRCUT的,当滤光片切换、红外灯开启的时候,如果视频还是彩色的,会出现严重到偏色现象。此时需要将视频转换为黑白的,以前一直是在驱动层实时检测ircut的状态动态设置
DRV_reszLock(); if(gio59) { CSL_RszHandle->regs->YUV_C_MIN = 0x00; CSL_RszHandle->regs->YUV_C_MAX = 0xFF; } else { CSL_RszHandle->regs->YUV_C_MIN = 0x80; CSL_RszHandle->regs->YUV_C_MAX = 0x80;//ircut } DRV_reszUnlock();注:gio59为GPIO59的状态,低电平表示滤光片已经切换,红外灯已经开启,视频需要转换为黑白
来实现视频转换为黑白.
后来在TI文档中发现(如下图):
如上所述,只需要在应用层将CSL_IpipeRgb2YuvConfig结构体中rgb2yuv.matrix[1]、rgb2yuv.matrix[2]均赋值为0(其他值与原值相同):
CSL_IpipeRgb2YuvConfig rgb2yuv ; rgb2yuv.matrix[1][0]=rgb2yuv.matrix[1][1]=rgb2yuv.matrix[1][2]=0; rgb2yuv.matrix[2][0]=rgb2yuv.matrix[2][1]=rgb2yuv.matrix[2][2]=0;然后再调用CSL_ipipeSetRgb2YuvConfig函数即可实现黑白视频.
其实,还有另外一种实现彩色转黑白的方法,当开启2A(AE+AWB均开启)的时候,用手挡住镜头,会发现当光线暗到一定程度的时候,图像也会自动转为黑白,
在DM36x VPFE文档中,有如下描述:
(对应值均相同)时,经过矩阵变换后,R_out、G_out、B_out也是相同的,当RGB三原色值相等的时候,视频图像也是黑白的.
2A算法里面的彩色转为黑白就是通过判断曝光时间&模拟增益和数字增益(当然根据不同的sensor可能有不相同的情况,如有些sensor不会调整数字增益,也就不用判断数字增益而只判断曝光时间和模拟增益就行了)均达到最大值时,设置RGB2RGB和RGB2RGB2参数来实现彩色转为黑白(RGB2RGB与RGB2RGB2的关系为:RGB2RGB->gamma校正->RGB2RGB2,其实只要保证RGB2RGB2输出RGB三原色值相同即可).