Pdaf数据捕获进程
根据上层的isCommand命令,通过otp取得了pd info。 构建流控制pdaf相关信息的结构体pd_profile,通过sendCommand从snesor driver文件中获取信息pdaf capacity、pdaf info、vc info、crop win info。 将矫正数据发送到PD核心后,将otp中的pd info与驱动程序中进行比较,如果不一致则报告错误。 convertpdBufFormat将pd点一起转换为原始16格式,对buffer进行重新排序,并在l的前r之后,即转换为pd algo所需的pd格式。
Pd info和相关计算Pd info结构
PD Block是PD点分布的最小单位,各Block内PD点的位置相同,因此驱动中配置一个PD Block内的PD坐标,根据起点的坐标和横向纵向上有几个PD Block,在所有PD点的Bayer raw域上
staticstructset _ PD _ block _ info _ timg sensor _ PD _ info _ 1920 _ 1080=
{
. i4OffsetX=16,//x offset of PD area
. i4OffsetY=12,//y offset of PD area
. i4PitchX=16,//x pitch/width of a PD block
. i4PitchY=16,//y pitch/height of a PD block
. i4PairNum=8,//numofpairsl/rpdpixelwithinapdblock
. i4SubBlkW=8,//一个块中y方向pairs的密度
. i4SubBlkH=4,//yintervalof 1pai rl/rpdpixelwithinapdblock
. i4BlockNumX=120,//PD block number in X direction
. i4BlockNumY=67,//PD block number in Y direction
. iMirrorFlip=0,//显示图的方向和模块工厂校正后的图的方向的相对方向
. i4PosR={
{ 16,13 }、{ 24,13 }、{ 20,17 }、{ 28,17 }、
{ 16,21 }、{ 24,21 }、{ 20,25 }、{ 28,25 }、
(,
. i4PosL={
{ 17,13 }、{ 25,13 }、{ 21,17 }、{ 29,17 }、
{ 17,21 }、{ 25,21 }、{ 21,25 }、{ 29,25 }、
(,
. i4 crop={ 0,0 }、{ 0,0 }、{ 1040,960 }、{ 0,0 }、{ 0,0 }、{ 0,0 }、{ 0,0 }、{ 0,0 }、{0}
(;
i4BlockNumX=1920/i4PitchX
i4BlockNumY=1080/i4PitchY
i4Crop=?
mboolpd _ xxxmipiraw :3360 is support (SPD配置文件_ tipd配置文件)。
{
if () IPDprofile.I4sensormode==5) ) iPdProfile.uImgXsz==1920 ) (iPdProfile.uImgYsz==1080 ) ) m _ pdb uu if(m_PDbuf ) { delete m_PDBuf; m_PDBuf=nullptr; } m _ pdbufsz=m _ pdbufxsz * m _ pdbufysz; m_PDBuf=new uint16_t [m_PDBufSz]; ret=MTRUE; aa _ logd (' [ 1080 p 60 fps ] is support : I4sensor mode : % dw [ % d ] s [ % d ]n ',IPD配置文件. I4sensor mode,IPD
这里,m_PDXSz是各行pixel的个数,m_PDYSz表示行数,
pixel num=pitchx/densityx * block numx=16/8 * 120=240
linenum=pitchy/densityy *2* blocknumy=16/8 *2* 67=536///l和r上下分布,所以乘以2
pd win size
staticstructsensor _ winsize _ info _ structimgsensor _ winsize _ info [7]={
{8032、6032、0、12、8032、6008、4016、3004、8、2、4000、3000、0、4000、3000},/preview(4000x3000 ) ) ) )
{8032、6032、0、12、8032、6008、4016、3004、8、2、4000、3000、0、4000、3000},/capture(4000x3000 ) ) ) )。
{8032、6032、0、12、8032、6008、4016、3004、8、2、4000、3000、0、4000、3000},/video(4000x3000 ) }
{8032、6032、0、1568、8032、2896、2008、724、364、2、1280、720、0、1280、720},/hightspeedvideo(1280 )
{8032、6032、0、12、8032、6008、4016、3004、8、2、4000、3000、0、4000、3000},/slim视频(1280 x720 ) ) )
{8032、6032、2080、1932、3872、2168、1936、1084、8、2、1920、1080、0、1920、1080},/custom1(1920x1080 )
{8032、6032、0、14、8032、6004、8032、6004、16、2、8000、6000、0、8000、6000},/remosaic(8000x6000 ) ) )。
(;
8032 6032传感器内部有效像素crop binning crop如果有更小的尺寸,也需要crop
为了使中心一致,0 12上下都裁剪crop
8032-(0*2) 6032-(12*2)=8032 6008重新绑定
0163004继续crop上下
4016-(8*2) 3004 )2)2)=4000 * 3000最终输出tgsize