top of page
  • 作家相片Johanna

TI ISP系列2 - 调试流程

作者: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,这里就不演示了。

后面的话,我计划去每个模块里把坑蹚一遍,做一些调试前和调试后的效果对比图。

就这样吧……


47 次查看0 則留言

最新文章

查看全部
bottom of page