高通Camera IFE时钟配置

本文主要分享高通camera驱动中minHorizontalBlanking(最小水平消隐)和minVerticalBlanking(最小垂直消隐)配置项的计算方法;

IFE时钟频率由以下sensor参数所决定:

        对应sensor mode的输入IFE的帧尺寸(width&height);

        水平和垂直消隐周期(horizontal and vertical blanking periods);

        输出时钟频率(output clock rate);

输入IFE的帧尺寸和消隐周期由对应sensor的XML配置文件指定,例如下列的典型某一sensor mode的相关配置:

    <resolutionData>
      <colorFilterArrangement>BAYER_BGGR</colorFilterArrangement>
      <streamInfo>
        <streamConfiguration>
          <vc range="[0,3]">0</vc>
          <dt>43</dt>
          <frameDimension>
            <xStart>0</xStart>
            <yStart>0</yStart>
            <width>3264</width>
            <height>2448</height>
          </frameDimension>
          <bitWidth>10</bitWidth>
          <type>IMAGE</type>
        </streamConfiguration>
      </streamInfo>
      <lineLengthPixelClock>1932</lineLengthPixelClock>
      <frameLengthLines>2482</frameLengthLines>
      <minHorizontalBlanking>0</minHorizontalBlanking>
      <minVerticalBlanking>0</minVerticalBlanking>
      <outputPixelClock>288000000</outputPixelClock>
      ......

上面是高通平台Camera的驱动文件的示例,其中各个sensor mode(每一组resolutionData)中的frameDimension、lineLengthPixelClock frameLengthLines、minHorizontalBlanking、minVerticalBlanking等数据,包括寄存器配置一般都是由sensor供应商(sensor vendor/FAE)提供;但是XML中的HBI(minHorizontalBlanking)和VBI(minVerticalBlanking)只是供应商依据sensor系列的平均值给出的,不一定就是最小的消隐周期;有时如果采用供应商提供的该项平均值,有可能会影响IFE的时钟频率与实际sensor输出速率不匹配,进而导致CAMIF(camera interface)发生溢出(overflow);

为了获取到最佳且正确的消隐周期,高通给出的计算方法(Spectra HW’s ability,含义不明待补充)如下:

1. 打开KMD csid和camif的log等级获取信息:

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 kernel > kmd.log(或adb shell dmesg > kmd.log)

*高通KMD log各等级开启请参考:高通 Camx debug log控制_小驰笔记的博客-CSDN博客

2.在log中搜索关键字 cam_ife_csid_get_hbi_vbi 可以获取到csidHBIcycles[11:0]和csidVBIcycles[31:0],下面是高通示例log:

07-25 03:52:51.427 0 0 W cam_ife_csid_get_hbi_vbi: 292 callbacks suppressed 
07-25 03:52:51.427 0 0 I CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 3090 Device csid4 index 0 Resource 4 HBI: 0x665016d VBI: 0x32e98 
07-25 03:52:51.427 0 0 I CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 3090 Device csid4 index 1 Resource 4 HBI: 0x665016d VBI: 0x32e98 
07-25 03:52:51.461 0 0 I CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 3090 Device csid4 index 0 Resource 4 HBI: 0x665016d VBI: 0x32e99 
07-25 03:52:51.461 0 0 I CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 3090 Device csid4 index 1 Resource 4 HBI: 0x665016d VBI: 0x32e99 
07-25 03:52:51.494 0 0 I CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 3090 Device csid4 index 0 Resource 4 HBI: 0x665016d VBI: 0x32e98 
07-25 03:52:51.494 0 0 I CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 3090 Device csid4 index 1 Resource 4 HBI: 0x665016d VBI: 0x32e98 
07-25 03:52:51.527 0 0 I CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 3090 Device csid4 index 0 Resource 4 HBI: 0x665016d VBI: 0x32e98 
07-25 03:52:51.527 0 0 I CAM_INFO: CAM-ISP: cam_ife_csid_get_hbi_vbi: 3090 Device csid4 index 1 Resource 4 HBI: 0x665016d VBI: 0x32e98

即csidHBIcycles为0x665016d 的后12位(HBI[11:0]),则数据为0x16d;

同理csidVBIcycles为0x32e98 的后32位,因为数据本身不足32位,则数据为0x00032e98;

我们需要使用以下公式获取min HBI:

minHorizontalBlanking = RoundUp(\frac{outputPixClkRate*csidHBIcycles}{CSIDclockRate})

*RoundUp是向上取整

  • csidHBIcycles就是上文通过log获取到的HBI后12位信息;
  • outputPixClkRate是sensor XML中的outputPixelClock配置项;
  • CSIDclockRate是用于此usecase的CSID块的时钟速率。当usecase处于活动状态时,可以使用这些命令来读取:

        adb shell cat /d/clk/cam_cc_ife_0_csid_clk/clk_measure

        adb shell cat /d/clk/cam_cc_ife_1_csid_clk/clk_measure

        要根据usecase使用的是IFE_0还是IFE_1来选择正确的频率;

获取min VBI需要使用以下公式:

minVerticalBlanking=RoundUp(\frac{outputPixClkRate*minCSIDVerticalBlanking}{CSIDclockRate})

其中的minCSIDVerticalBlanking计算公式为:

minCSIDVerticalBlanking=\frac{csidVBIcycles}{Ceiling((outputWidthPixels+csidHBIcycles),32)}

*Ceiling(a,b)函数是指将a向上取整至最接近b的倍数

  • outputWidthPixels指的是sensor XML中对应sensor mode下的frameDimension中的width;

*本文内容来自《80-p9301-97_p_camera_sensor_driver_bring-up_guide》3.2.5节

*适用平台SM8150/SM8250

  • 2
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值