pdaf的一些计算「建议收藏」

pdaf的一些计算「建议收藏」 Pdaf数据获取流程根据上层的isCommand命令,在otp中获取到pdinfo。构建flowcontrolpdaf相关信息的结构体pd_profile,通过sendCommand在snesordriver文件中获取信息pdafcapacity、pdafinfo、vcinfo、cropwininfo。将矫正数据送入PDcore中,会将otp中的pdinfo和driver中进行对比,不一致则报错。在convertPDBufFormat中将pd点统一转换成raw16的格式,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 Pdaf数据获取流程

  1. 根据上层的isCommand命令,在otp中获取到pd info。
  2. 构建flow control pdaf相关信息的结构体pd_profile,通过sendCommand在snesor driver文件中获取信息pdaf capacity、pdaf info、vc info、crop win info。
  3. 将矫正数据送入PD core中,会将otp中的pd info和driver中进行对比,不一致则报错。
  4. 在convertPDBufFormat中将pd点统一转换成raw16的格式,重新排列buffer,L靠前R靠后,即转化成pd algo所需要的pd格式。
     Pd info和相关计算
  5. Pd info结构体
    PD Block是PD点分布的最小单位,每个Block内的PD点的位置都是一样的,所以驱动只需要配置一个P

D Block内的PD坐标,再根据起始点的坐标和横向纵向各有多少个PD Block,就能够计算出所有PD点在Bayer raw域上的坐标。
static struct SET_PD_BLOCK_INFO_T imgsensor_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, // num of pairs L/R PD pixel within a PD block
.i4SubBlkW = 8, //一个block内y方向pairs的密度
.i4SubBlkH = 4, // y interval of 1 pair L/R PD pixel within a PD block
.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},
},
.i4Crop = { {0, 0}, {0, 0}, {1040, 960}, {0, 0}, {0, 0}, {1040,960},{0, 0}, {0, 0}, {0, 0}, {0, 0} },
};
i4BlockNumX = 1920/i4PitchX
i4BlockNumY = 1080/i4PitchY
i4Crop = ???

MBOOL PD_xxxMIPIRAW::IsSupport( SPDProfile_t &iPdProfile)
{

if (( iPdProfile.i4SensorMode == 5) && ((iPdProfile.uImgXsz == 1920) && (iPdProfile.uImgYsz == 1080)))
{
	m_PDBufXSz = 240;
	m_PDBufYSz = 536;
            if(m_PDBuf)
           {
                delete m_PDBuf;
                m_PDBuf = nullptr;
           }
           m_PDBufSz  = m_PDBufXSz*m_PDBufYSz;
           m_PDBuf    = new uint16_t [m_PDBufSz];
	ret = MTRUE;
	AAA_LOGD("[1080P 60fps] is Support : i4SensorMode:%d w[%d] s[%d]\n", iPdProfile.i4SensorMode,iPdProfile.uImgXsz, iPdProfile.uImgYsz);
}
...

}
其中m_PDXSz为每行pixel的个数,m_PDYSz代表行数,
pixel num = PitchX / DensityX * BlockNumX = 16 / 8 * 120 = 240
line num = pitchY/DensityY * 2 * BlockNumY = 16 / 8 * 2 * 67 = 536 //因为L和R是上下分布的所以乘以2
pd win size
static struct SENSOR_WINSIZE_INFO_STRUCT imgsensor_winsize_info[7] = {

{8032, 6032, 0, 12, 8032, 6008, 4016, 3004, 8, 2, 4000, 3000, 0, 0, 4000, 3000}, //preview(4000 x 3000)
{8032, 6032, 0, 12, 8032, 6008, 4016, 3004, 8, 2, 4000, 3000, 0, 0, 4000, 3000}, //capture(4000 x 3000)
{8032, 6032, 0, 12, 8032, 6008, 4016, 3004, 8, 2, 4000, 3000, 0, 0, 4000, 3000}, // VIDEO (4000 x 3000)
{8032, 6032, 0, 1568, 8032, 2896, 2008, 724, 364, 2, 1280, 720, 0, 0, 1280, 720}, // hight speed video (1280 x 720)
{8032, 6032, 0, 12, 8032, 6008, 4016, 3004, 8, 2, 4000, 3000, 0, 0, 4000, 3000}, // slim video (1280 x 720)
{8032, 6032, 2080, 1932, 3872, 2168, 1936, 1084, 8, 2, 1920, 1080,0, 0, 1920, 1080}, // custom1 (1920x 1080)
{8032, 6032, 0, 14, 8032, 6004, 8032, 6004, 16, 2, 8000, 6000, 0, 0, 8000, 6000}, //remosaic (8000 x 6000)
};
8032 6032 sensor内部有效像素 crop → binning → crop 如果有还要小的尺寸还需要crop
为了保持中心一致 0 12 上下都裁剪 crop
8032-(0 * 2) 6032 -(12 * 2)= 8032 6008 再binning
4016 3004 继续上下crop
4016 -(8 * 2)3004(2*2)= 4000 * 3000 最终输出 tgsize

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196543.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python画图小代码

    python画图小代码奥运五环importturtlet=turtle.Pen()t.speed(1)#画笔颜色为蓝色t.pencolor(“blue”)#画笔宽度为8t.pensize(8)#画半径为60的圆,篮圈t.circle(60)#第一个环t.penup()t.goto(100,0)t.pendown()设置环的颜色t.pencolor(“black”)t.circle(60)#第二个环t.penup()t.goto(200,0)t.pendown()t.pen

    2022年5月17日
    30
  • 彻底卸载Symantec Endpoint Protection之另类办法「建议收藏」

    彻底卸载Symantec Endpoint Protection之另类办法「建议收藏」诺顿卸载需要输入密码,网上一篇文章说终结进程的办法不适合v11,机器是单位的,所以开始并没有想到完全卸载,怕起不来,于是进入安全模式禁用所有服务,下个卡巴斯基安装,结果一安装,卡巴斯基就提示先卸载诺顿,太可爱了,点击确认之后,卸载之后再重启就卸得干干净净了,装上卡巴斯基,好几天也没死一次机,而以前一天要死一两次,诺顿真垃圾,而且卸载也卸不干净。卡巴斯基还有这个妙用啊,即使你不想安卡巴斯基,也可以用它来删诺顿,而且不用输密码,强。

    2022年5月27日
    58
  • Navicat 15 for MySQL手动激活码_通用破解码

    Navicat 15 for MySQL手动激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    370
  • Java开发谈:2021Java高级面试题及答案

    Java开发谈:2021Java高级面试题及答案前言最近一段时间发现经常看到很多人,对Spring源码比较感兴趣,日常开发中,无论你做什么什么项目,大部分都离不开Spring生态的那一套东西,所以很多人对Spring底层源码实现很感兴趣,但是有些从来没有接触过源码的开发者,在看Spring源码的过程中确实及其难受的,为什么,大部分人看源码基本都是debug一点一点去看的,最后发现,越追越离谱,越追越深,到最后都追到JDK源码了,也没有明白是什么意思!对于学习源码,我的看法是,先去完全的熟悉它的用法,想一下如果让你来实现,你会怎么实现!有了这些想法之后

    2022年7月18日
    16
  • 【期末复习】微机原理与接口技术

    【期末复习】微机原理与接口技术知识重点整理第一章输入/输出系统1.接口电路的作用和基本功能接口电路是CPU与外设交换信息的中转站。接口电路应具备的功能为:数据缓冲功能、联络功能、寻址功能、数据转换功能、中断管理功能。2.端口的概念和分类端口是接口电路中能与CPU直接进行信息交换的寄存器,即I/O端口寄存器。在接口电路中,按端口寄存器存放信息的物理意义可划分为数据端口、控制端口和状态端口:数据端…

    2022年10月2日
    2
  • navicat将多个表导出为一个sql文件

    navicat将多个表导出为一个sql文件

    2021年9月21日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号