作者:Lei
1. 准备
从头开始调试ISP,肯定是需要准备一些工具的。
先来看一下官网文档的要求:
2.1 Hardware Requirements
• Jacinto 7 EVM and all the related accessories + daughterboards
• Camera module to be tuned
• Ubuntu 18.04 PC – to build PROCESSOR SDK RTOS J721E
• Windows 10 PC – for DCC Tuning Tool
• Micro-SD Card & Reader
• Compatible monitor for live preview
2.2 Software Requirements
• PSDK RTOS release (v7.1 or later)
• DCC Tuning Tool (v2.03 or later)
其实就是,开发板、DCC Tuning Tool、PSDK,加上一些配套设备这些。
开发板要去官网买,PSDK可以在官网上下载,出于一些原因,我用的是PSDK Linux。 (Linux sdk链接:https://www.ti.com/tool/download/PROCESSOR-SDK-LINUX-SK-TDA4VM)
但DCC调试工具比较难搞到,买设备的时候需要和Ti签一个保密协议,之后还有一些个人、公司情况要确认,总之挺麻烦的,我是签完保密协议又和Ti的客户支持通了一周邮件才把工具弄到手的,而且因为保密协议的问题,很遗憾不能把工具直接分享出来……总之能搞定这步就算胜利一半吧。
2. 流程设计
等你拿到调试工具,就可以来看下面这张设计图了:
可以看到调试过程分为几步:
1. 从目标设备上抓取Raw图。
2. 通过DCC Tuning Tool对Raw进行计算调试,产生多份XML文件(实际上每个模块都会产生一份XMLs)。
3. 把多份XML文件放进DCC生成器,生成DCC配置文件(Bin),给目标设备使用。
2.1 采图
先说怎么抓raw图,在开发板上用这条命令:
yavta /dev/video2 -c1 -n4 -s1920x1080 -fSBGGR10 -Fvideo.raw
(/dev/video:你的相机设备号,-fSBGGR10:你的raw图位深)
注意一点,IMX219同时支持8位和10位,但是调ISP的时候还是要用10位模式抓图,因为DCC Tuning Tool只支持十位以上的raw图计算。
2.2 调试工具
然后打开DCC Tuning Tool:
选VPAC版本,我现在用的是v1,头铁可以选v3。
新建工程:
这里的几个配置,前4个没什么好说,raw图尺寸,拜耳格式,调过ISP的应该都懂。
第5个,Color Depth,这个参数的设置其实非常有误导性,虽然我们在采集Raw图的时候是使用10位深度,但存储时其实已经自动扩展到了16位(当然有效数据还是在前10位)。所以,这里我们在选择的时候必须选实际的存储位深,16 bits per pixel,。
第6个,不太要紧,只影响xml文件的保存名字。
第7个,这个很关键,ISP会根据你工程中设定的Id号去配置对应的sensor,如果Id配错了,相机就跑不起来。
第8个,采集YUV的格式,DCC调试工具可以直接控制开发板抓YUV数据,但这个功能对我没用,我的sdk是Linux版本,但调试工具只能和RTOS版本的sdk通讯。
设置完,我们就正式进入了调试界面:
首先选择一个模块:
调试的顺序是:
1.Black Level Subtraction
2.H3A
3.AWB
4.Color Correction
5.CFA+WDR
6.Noise Filter 4
这个是官方推荐,之后对具体模块的讲解也会按照这个顺序来,
至于原因?
比如说像AWB这种需要用RAW图做计算的模块,有ISP调试经验的人应该知道,放进去的RAW首先是要经过去黑电平、去镜头阴影这些操作的,这样通过RAW算出的参数才会准。
那么,如果不先做BLC,你怎么知道AWB里的BL参数要怎么设置呢?
进入某个,填完参数,点击插件处理(Process Plugin),然后导出参数(Export DCC profile binary):
调每个模块都需要按这个流程走一遍,强调一下,每个模块都需要先处理,再导出。
然后,才可以在工程目录下找到前面说的“XMLs”。
不然你只能看到最后调的模块的XML。
2.3 更新配置
拿到XMLs以后,其实就到了这一步:
虽然调试工具本身就有update DCC profiles的功能,如下:
但Linux版本的sdk却不支持和DCC Tuning Tool通讯,所以只能换种方法。
先把去官网上把PSDK RTOS的sdk 下载到ubuntu PC上。
(RTOS链接:https://www.ti.com/tool/download/PROCESSOR-SDK-RTOS-J721E/08.02.00.05)
进入这个目录:
~/ti-processor-sdk-rtos-j721e-evm-08_02_00_05/imaging/sensor_drv/src/imx219/dcc_xmls/linear/
里头有个generate_dcc.sh能帮你把XMLs转化成Linux sdk能用的DCC profiles。
只需要把XMLs塞到同级目录下,然后运行脚本。
DCC_TOOL_PATH=../../../../../tools/dcc_tools/
OUT_PATH=../../../../include
rm *.bin
rm $OUT_PATH/dcc_viss_imx219.h
$DCC_TOOL_PATH/dcc_gen_linux IMX219_rgb2rgb_dcc.xml
$DCC_TOOL_PATH/dcc_gen_linux IMX219_viss_h3a_aewb_cfg.xml
$DCC_TOOL_PATH/dcc_gen_linux IMX219_viss_nsf4.xml
$DCC_TOOL_PATH/dcc_gen_linux IMX219_viss_blc.xml
$DCC_TOOL_PATH/dcc_gen_linux IMX219_flxd_cfa.xml
$DCC_TOOL_PATH/dcc_gen_linux IMX219_rawfe_decompand.xml
$DCC_TOOL_PATH/dcc_gen_linux IMX219_viss_h3a_mux_luts_cfg.xml
cat *.bin > ../../dcc_bins/dcc_viss.bin
cp *.bin ../../dcc_bins/linear/
$DCC_TOOL_PATH/dcc_bin2c ../../dcc_bins/dcc_viss.bin $OUT_PATH/dcc_viss_imx219.h dcc_viss_imx219
echo ''
rm *.bin
rm $OUT_PATH/dcc_2a_imx219.h
$DCC_TOOL_PATH/dcc_gen_linux IMX219_awb_alg_ti3_tuning.xml
$DCC_TOOL_PATH/dcc_gen_linux IMX219_viss_h3a_aewb_cfg.xml
cat *.bin > ../../dcc_bins/dcc_2a.bin
cp *.bin ../../dcc_bins/linear/
$DCC_TOOL_PATH/dcc_bin2c ../../dcc_bins/dcc_2a.bin $OUT_PATH/dcc_2a_imx219.h dcc_2a_imx219
echo ''
rm *.bin
以上就是脚本的功能,还是很好懂的,会结合所有的XML生成两个bin文件:dcc_viss_imx219、dcc_2a_imx219。
拿到bin文件以后,把两个bin直接替换到开发板的sdk目录下:
/opt/imaging/imx219/
能看到目录里面原本就会有一个dcc_viss.bin和dcc_2a.bin。
做对应替换就可以。
到这里,ISP的流程就算正是结束,想看效果的话,可以再跑一遍相机demo,这里就不演示了。
后面的话,我计划去每个模块里把坑蹚一遍,做一些调试前和调试后的效果对比图。
就这样吧……
Comentários