Qualcomm 8*60平台AWB学习笔记一

         由于没有Qualcomm ISP相关的资料,只能慢慢看代码来猜测其行为。这次主要想了解一下AWB前期所做的一些工作,包括region的划分、RAW数据的分析等。

        1.8*60平台在对RAW数据进行分析时,划分了16*16个block,使用时可以灵活选择,不过release出来的代码都采用8*8的方式。所以在代码里面可以看到VFE收集收据部分的数组定义的index都是256,而在处理后保存的就只有64个mapping来对应了。在awb_parse_stats函数里面可以清晰看到此过程。

        2.8*60平台ISP分析RAW数据应该是后端处理,因为其采集来的数据是YCbCr的和(前端处理采集的是整个region里面R\G\B的和)。而为了加快运算,在ISP分析RAW数据时还使用bounding box(有lowlight\normal\outdoor三个bounding box表)做了限制,凡是没有落在此区域里面的点将被丢掉(高通工程师解释),所以在vfe_util_parse_AWB_stats_regions函数里面可以看到YCbCr及NSCB的运算,这里NSCB就是落在区域里面的pixels点数,如果有效点数过少将认为此region为无效区,直接丢掉(SY1\SCb\SCr\NSCB都赋值0)。

        3.awb_parse_stats得到上面的数据以后进行求平均处理,并通过Qualcomm自己的算式将YCbCr转成RGB,提供给后面的算法运算。

 

 

PS:1.以前我一直以为AWB每帧都能校正一次,通过这次跟踪LOG发现数据分析及处理的过程还是很长的,基本200多MS才能完成一次校正。那么这中间是否可以穿插其它CPU运算?

         2.AEC及AF等是否也都需要较长时间得分析,这部分需要后期逐步看代码分析。

         3.上面的运算过程中几次出现的移位操作应该是为了防止出现浮点运算的需要。

         4.对色彩方面的知识还严重缺乏,需要不断补充。

两组常用的YCbCr转RGB公式:

(1):

R' = Y + 1.371(Cr - 128)

G' = Y - 0.698(Cr - 128) - 0.336(Cb - 128)
B' = Y + 1.732(Cb - 128)

(2):

R' = 1.164(Y - 16) + 1.596(Cr - 128)

G' = 1.164(Y - 16) - 0.813(Cr - 128) - 0.391(Cb - 128)

B' = 1.164(Y - 16) + 2.018(Cb - 128)

 

你可能感兴趣的:(数据分析,算法,工作,平台,代码分析)