当前位置:首页>技术文档>高通平台下如何在Camera Sensor驱动程序中配置minHorizo​​ntalBlanking和minVerticalBlanking

高通平台下如何在Camera Sensor驱动程序中配置minHorizo​​ntalBlanking和minVerticalBlanking

1 概述

•使用中的传感器模式的水平和垂直消隐期会影响IFE像素时钟的计算。请注意,传感器供应商提供的消隐信息可能不是最小消隐期,而是平均消隐期。为了最佳,正确地计算出IFE时钟速率,我们不能使用平均消隐周期,因为这会导致CAMIF溢出。

12-14 03:14:01.854 0 0 E CAM_ERR : CAM-ISP: cam_ife_csid_irq: 3188 CSID:1 IPP fifo over flow

12-14 03:14:01.887 0 0 E CAM_ERR : CAM-ISP: cam_vfe_irq_err_top_half: 176 Encountered Error: vfe:0: Irq_status0=0x0 Status1=0x80

12-14 03:14:01.898 0 0 E CAM_ERR : CAM-ISP: cam_vfe_irq_err_top_half: 179 Stopping further IRQ processing from this HW index=0

12-14 03:14:01.909 0 0 I CAM_INFO: CAM-ISP: cam_vfe_irq_err_top_half: 213 Violation status = 1

12-14 03:14:01.916 0 0 E CAM_ERR : CAM-ISP: cam_vfe_bus_error_irq_top_half: 2495 Bus Err IRQ

•相反,必须指定给定帧的最小水平和垂直消隐期。通常,传感器供应商不会在其数据表中提供最小的消隐期。但是,出于降低功耗的目的,IFE节点基于最小水平消隐间隔(HBI)和最小垂直消隐间隔(VBI)来计算IFE像素时钟速率,它们在传感器驱动程序XML文件中的下方。

<!--Minimum horizontal blanking interval in pixels -->

<minHorizontalBlanking>xxxxx</minHorizontalBlanking>

<!--Minimum vertical blanking interval in lines -->

<minVerticalBlanking>xxxxx</minVerticalBlanking>

<!--Output pixel clock -->

<outputPixelClock>735436800</outputPixelClock>

2 如何在SM8150上获得适当的minHorizo​​ntalBlanking和minVerticalBlanking

•将IFE配置为Turbo模式以首先启动传感器
我们利用Spectra HW的功能来测量HBI和VBI。它需要捕获内核日志以根据CSID时钟速率测量最小的HBI和VBI。
因此,请以低于camxoveridesettings的turbo模式配置IFE,以确保首先成功启动传感器。
adb shell "echo ifeClockFrequencyMHz=0xFFFFFFFF >> /vendor/etc/camera/camxoverridesettings.txt"
adb shell "echo ifeCamnocBandwidthMBytes=0xFFFFFFFF >> /vendor/etc/camera/camxoverridesettings.txt"
adb shell "echo ifeExternalBandwidthMBytes=0xFFFFFFFF >> /vendor/etc/camera/camxoverridesettings.txt"
•使用Spectra HW的功能来测量HBI和VBI
通过以下步骤,我们可以根据CSID时钟速率来测量HBI和VBI。
adb shell "echo 0x80 > /sys/kernel/debug/camera_ife/ife_csid_debug"
adb shell "echo 0x1 > /sys/kernel/debug/camera_ife/ife_camif_debug"
adb logcat -b all -c && adb logcat -b kernel > kmd.log
以下是从基于SM8150的设备收集的示例日志,其中显示了HBI和VBI数据。

12-31 20:07:12.806 0 0 E I[0: AudioRecord:10818] CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 2256 Resource 4 HBI: 0x50d0362

12-31 20:07:12.806 0 0 E I[0: AudioRecord:10818] CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 2258 Resource 4 VBI: 0x416471

12-31 20:07:12.839 0 0 E I[0: SyncManager_0: 926] CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 2256 Resource 4 HBI: 0x50c0361

12-31 20:07:12.839 0 0 E I[0: SyncManager_0: 926] CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 2258 Resource 4 VBI: 0x400cb1

12-31 20:07:12.873 0 0 E I[0: logd.writer: 552] CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 2256 Resource 4 HBI: 0x50c0361

12-31 20:07:12.873 0 0 E I[0: logd.writer: 552] CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 2258 Resource 4 VBI: 0x416471

12-31 20:07:12.906 0 0 E I[0:provider@2.4-se: 2182] CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 2256 Resource 4 HBI: 0x50c0361

12-31 20:07:12.906 0 0 E I[0:provider@2.4-se: 2182] CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 2258 Resource 4 VBI: 0x400cb2

如以上示例所示,HBI和VBI值可能会有一些小的变化。始终使用在几秒钟内观察到的最小值非常重要。另请注意,此测量必须在每种模式下传感器支持的最高fps下进行。为确保最高fps,请确保已在1000 lux左右对设备进行测试,并确认确实已实现最高fps。
对于HBI,仅应使用位0到11位来提取最小HBI。从日志中看到,最小HBI为0x361
对于VBI,它是log中完整的值。从上面的日志中看到,最小VBI为0x400cb2
•将minHBI / minVBI转换为传感器的输出像素时钟域
o对于最低HBI,我们需要使用以下公式将此值转换为传感器的输出像素时钟域
𝑚𝑖𝑛𝐻𝑜𝑟𝑖𝑧𝑜𝑛𝑡𝑎𝑙𝐵𝑙𝑎𝑛𝑘𝑖𝑛𝑔=𝑅𝑜𝑢𝑛𝑑𝑈𝑝(𝑂𝑢𝑡𝑝𝑢𝑡𝑃𝑖𝑥𝐶𝑙𝑘𝑅𝑎𝑡𝑒 ∗ 𝑐𝑠𝑖𝑑𝐻𝐵𝐼𝑐𝑦𝑐𝑙𝑒𝑠 / 𝐶𝑆𝐼𝐷𝑐𝑙𝑜𝑐𝑘𝑅𝑎𝑡𝑒)

OutputPixClkRate是传感器的输出像素时钟频率,单位为Hz。如:735436800
sensor mipi clk是 1075.2 MHZ:1075200000* 2.28 * 3/10 = 735436800
csidHBIcycles是Spectra硬件报告的HBI值。在上面的日志中,该值为0x361
CSIDclockRate是用于此用例的CSID块的时钟速率。在用例处于活动状态时,可以使用以下命令读取此信息:该值为:400001384
adb shell cat /d/clk/cam_cc_ife_0_clk/clk_measure
adb shell cat /d/clk/cam_cc_ife_1_clk/clk_measure
应根据使用案例使用的是IFE_0还是IFE_1,使用正确的CSID时钟速率。
要计算最小VBI,请使用以下公式:
𝑚𝑖𝑛𝑂𝑝𝑝𝑐𝑙𝑘𝑉𝐵𝐼𝑐𝑦𝑐𝑙𝑒𝑠=(𝑐𝑠𝑖𝑑𝑉𝐵𝐼𝑐𝑦𝑐𝑙𝑒𝑠 ∗ 𝑂𝑢𝑡𝑝𝑢𝑡𝑃𝑖𝑥𝐶𝑙𝑘𝑅𝑎𝑡𝑒) / 𝐶𝑆𝐼𝐷𝑐𝑙𝑜𝑐𝑘𝑅𝑎𝑡𝑒

minOppclkVBIcycles是输出像素时钟域中的周期。我们需要将其转换为传感器的垂直消隐线。
𝑚𝑖𝑛𝑉𝑒𝑟𝑡𝑖𝑐𝑎𝑙𝐵𝑙𝑎𝑛𝑘𝑖𝑛𝑔= 𝑅𝑜𝑢𝑛𝑑𝑈𝑝(𝑚𝑖𝑛𝑂𝑝𝑝𝑐𝑙𝑘𝑉𝐵𝐼𝑐𝑦𝑐𝑙𝑒𝑠 / 𝐶𝑒𝑖𝑙𝑖𝑛𝑔((𝑜𝑢𝑡𝑝𝑢𝑡𝑊𝑖𝑑𝑡ℎ𝑃𝑖𝑥𝑒𝑙𝑠 + 𝑚𝑖𝑛𝐻𝑜𝑟𝑖𝑧𝑜𝑛𝑡𝑎𝑙𝐵𝑙𝑎𝑛𝑘𝑖𝑛𝑔)))

3 在SM8250平台下配置minHorizo​​ntalBlanking和minVerticalBlanking

SM8250 IFE硬件行为与SM8150非常相似。但是,它能够在每个时钟周期处理2个像素。 SM8250上的IFE驱动程序将有助于提高吞吐量。因此,计算minHorizo​​ntalBlanking和minVerticalBlanking的过程与上面的部分相同。

4 检查IFE像素时钟速率

•通过UMD日志,我们可以看到IFE节点的IFE像素时钟计算结果。
启用CamxLogGroupPower的INFO级别日志,以检查由IFE节点计算的IFE像素时钟速率。
adb shell “logInfoMask = 0x40 >> /vendor/etc/camera/camxoverridesettings.txt”
以下日志是使用SM8250设备捕获的。从日志中我们可以看到,传感器outPixelClock 1177526520 Hz,minHorizo​​ntalBlanking 600和minVerticalBlanking 858启用了双IFE模式。 IFE像素时钟之一是314007072 Hz,另一个是299054354。

10-10 20:29:45.971 839 1557 I CamX : [ INFO][POWER ] camxifenode.cpp:13412 CalculatePixelClockRate() inputWidth=1196 minVerticalBlanking=858 minHorizontalBlanking=600 pixClockHz=314007072 minHBI=64 minVBI=40 Sensor Op 1177526520 sensorOutputWidth=1920

10-10 20:29:45.971 839 1557 I CamX : [ INFO][POWER ] camxifenode.cpp:13476 GetPixelClockRate() Using clock rate 350000000 Hz for inputWidth: 1196

10-10 20:29:45.971 839 1557 I CamX : [ INFO][POWER ] camxifenode.cpp:13412 CalculatePixelClockRate() inputWidth=1128 minVerticalBlanking=858 minHorizontalBlanking=600 pixClockHz=299054354 minHBI=64 minVBI=40 Sensor Op 1177526520 sensorOutputWidth=1920

10-10 20:29:45.971 839 1557 I CamX : [ INFO][POWER ] camxifenode.cpp:13476 GetPixelClockRate() Using clock rate 350000000 Hz for inputWidth: 1128

•使用以下命令检查所应用的IFE像素时钟速率
adb shell cat /d/clk/cam_cc_ife_0_clk/clk_measure
adb shell cat /d/clk/cam_cc_ife_1_clk/clk_measure

给TA打赏
共{{data.count}}人
人已打赏
技术文档

Python pip 安装与使用

2022-5-6 23:57:12

技术文档

linux多国语言本地化工具

2022-5-6 23:57:26

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索