一.曝光表的设置
第一行exp time 需要根据sensor info 进行计算 。
高通文档的公式
1S秒 = 1000 ms毫秒 = 1000_1000 us微妙 = 1000_000_000 ns纳秒
1GHz = 1000 MHz = 1000_000 KHz = 1000_000_000 Hz
转换为ns ,乘以1,000,000,000
sensor 驱动获得到帧行长
<frameLengthLines>3260</frameLengthLines>
<!--Minimum horizontal blanking interval in pixels -->
<minHorizontalBlanking>125</minHorizontalBlanking>
<!--Minimum horizontal blanking interval in lines -->
<minVerticalBlanking>30</minVerticalBlanking>
spec 中也可找到frame length
exp time = 1/(30*3260)*1,000,000,000 = 10224
二. 曝光介绍
sensor 曝光分为逐行曝光和全局曝光。
sensor 逐行曝光:从第一行开始曝光,一行一行的曝光。 好处:便宜
sensor 全局曝光:所有行同事开始曝光,并同时结束曝光。好处:每一行的曝光时间比较一致,拍摄运动物体时图像不会出现偏移和不一致的问题。
sensor 曝光相关计算:
1. line_time
line_time = line_length/pclk
line_time = 4896 /480000000 = 10200ns
<!--Line length pixel clock of frame
Typically this value is the active width + blanking width -->
<lineLengthPixelClock>4896</lineLengthPixelClock>
<!--Frame length lines of frame
Typically this value is the active height + blanking height -->
<frameLengthLines>3260</frameLengthLines>
<!--Minimum horizontal blanking interval in pixels -->
<minHorizontalBlanking>125</minHorizontalBlanking>
<!--Minimum horizontal blanking interval in lines -->
<minVerticalBlanking>30</minVerticalBlanking>
<!--Output pixel clock -->
<outputPixelClock>480000000</outputPixelClock>
a). line_length: 一行的长度(包含h_blank)
b). pclk: 是控制像素输出的时钟,即pixel采样时钟,单位Hz。表示是每个单位时间内采样的pixel数量
c). line_time: 曝光一行的时间
2. exposure_time 的计算
exposure = exposure_line * line_time
a). exposure_time: 曝光时间。指这一帧曝光了多长时间。
b). exposure_line: 字面意思是曝光行。值得注意的是,曝光行不是指一次性曝光多少行,对于逐行曝光的sensor来说,永远都是一次曝光一行。所以,曝光行是指这一帧曝光了多少行。
c): line_time: 曝光一行的时间
3.fps 帧率计算
frame_length = Vsync = Dummy Line = VTotal = VTS = V_Size + V_Blank // 帧长; 不占用曝光时间
line_length = Hsync = Dummy Pixel = HTotal = HTS = H_Size + H_Blank // 行长; 会增加曝光时间
fps的计算公式:fps = pclk / (VTS * HTS )
fps= pclk / (frame_length * line_length)
fps = 1 / (frame_length * line_time)
根据上面信息可以计算 fps = 480Mhz / 4896*3260 = 30
可以通过fps 计算line_time
frane_length * line_length 的意思时用一帧的行数乘以一行的长度,即一帧图像总共有多少像素。
pclk 为像素时钟,表示每秒钟可以采集480M个像数。用pclk 除以 frame_length * line_length 两者指积,即为1秒钟内采集的480M 个像素数可以分成多少帧。
三 其他
<dummyInfo>
<left>8</left>
<right>8</right>
<top>8</top>
<bottom>8</bottom>
</dummyInfo>
dummy_line :用来填充blanking 的行
frame_length = exposure_line + dummy_line
保持行数和帧长之间的最小偏移量 ,猜测为:一帧曝光结束到下次准备好重新开始曝光的时间
<verticalOffset>8</verticalOffset>
四
To calculate minimum blanking time: locate the following from sensor driver: pixel clock per line
(line_length_pclk), pixel clock = Maximum FPS * lines per frame, vertical offset (vert_offset) for
preview resolution
Minimum blanking time for preview (in Nano seconds) can be calculated by: minPreviewBlankingtime= (pixel clock per line / pixel clock) * vertOffset * (10^9). Note: 10^9 is conversion from Seconds toNano seconds.
每行的像素时钟(line_length_pclk),像素时钟 = 最大 FPS * 每帧行数,预览分辨率的垂直偏移 (vert_offset)
预览的最短消隐时间(单位为纳秒)计算公式为: minPreviewBlankingtime = (每行像素时钟 / 像
素时钟) * vertOffset * (10^9)。注: 10^9 是从秒转换为纳秒。
像素时钟 = 最大 FPS * 每帧行数 = 30*4896*3260
<lineLengthPixelClock>4896</lineLengthPixelClock>
<outputPixelClock>480000000</outputPixelClock>
4896/480,000,000 * 8 * 1,000,000,000 = 81600