Toybrick

imx415适配60帧

wudiking

高级会员

积分
693
发表于 2023-7-11 09:10:56    查看: 9569|回复: 13 | [复制链接]    打印 | 显示全部楼层
我看toybrick提供的imx415摄像头,仅支持30帧,如何提升到60帧,请指教
回复

使用道具 举报

jefferyzhang

版主

积分
13093
发表于 2023-7-11 11:36:51 | 显示全部楼层
软件没有限制帧率。
回复

使用道具 举报

wudiking

高级会员

积分
693
 楼主| 发表于 2023-7-11 11:58:43 | 显示全部楼层
jefferyzhang 发表于 2023-7-11 11:36
软件没有限制帧率。

内核里控制最大帧率30帧每秒
static const struct imx415_mode supported_modes[] = {
    /*
     * frame rate = 1 / (Vtt * 1H) = 1 / (VMAX * 1H)
     * VMAX >= (PIX_VWIDTH / 2) + 46 = height + 46
     */
    {
        .bus_fmt = MEDIA_BUS_FMT_SGBRG10_1X10,
        .width = 3864,
        .height = 2192,
        .max_fps = {
            .numerator = 10000,
            .denominator = 300000,

        },
        .exp_def = 0x08ca - 0x08,
        .hts_def = 0x044c * IMX415_4LANES * 2,
        .vts_def = 0x08ca,
        .global_reg_list = imx415_global_10bit_3864x2192_regs,
        .reg_list = imx415_linear_10bit_3864x2192_891M_regs,
        .hdr_mode = NO_HDR,
        .mipi_freq_idx = 1,
        .bpp = 10,
        .vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_0,
    },  
......
回复

使用道具 举报

troy

版主

积分
2364
发表于 2023-7-11 12:40:35 | 显示全部楼层
首先你要知道帧率是怎么来的,受到哪些因素的影响。
1. sensor本身支持的最大mipi传输速率,每秒传输的数据量是width * height * 10bit * fps,这个也是有上限,不能无限制提高。IMX415的DateSheet上写的就是支持3864x2192@30fps。
2. mipi传输链路的限制,lane的数量,和每个lane每秒能传输的最大数据量,这个一般不会到达上限。
3. cpu端的phy接收性能和isp处理速度的限制,就像有些CPU支持4K,有些支持8K,具体要看下你的板子是什么芯片,翻下芯片的TRM说明。你总不能要求51单片机处理8K 60fps吧。
4. 曝光时间的限制,你代码贴出来的30fps,是当前sensor的初始化序列下,sensor本身输出的是30fps的帧率图像,你总不能要求CPU能读到60fps的图像吧。在弱光条件下,帧率有可能会低于30fps,是因为曝光时间拉长了,当前曝光时间 + 图像数据的传输时间 > 33ms时,帧率就会被拉低。

提升帧率的措施:
据我所知imx415所能支持的帧率就是4K@30fps,要调整为60帧,只能是重新找模组厂商拿一组低分辨率的sensor配置,比如1080P@60fps,然后添加到supported_modes,设置max_fps为60fps,初始序列就是其中的global_reg_list和reg_list。这些寄存器配置会通过I2C设置到sensor中,控制sensor输出的fps。
回复

使用道具 举报

wudiking

高级会员

积分
693
 楼主| 发表于 2023-7-11 13:27:07 | 显示全部楼层
troy 发表于 2023-7-11 12:40
首先你要知道帧率是怎么来的,受到哪些因素的影响。
1. sensor本身支持的最大mipi传输速率,每秒传输的数据 ...

3588平台,使用imx415,摄像头支持1920*1080分辨率60fps,当前只能每秒读30帧,如何调整到60帧,哪里能知道初始化序列
回复

使用道具 举报

troy

版主

积分
2364
发表于 2023-7-12 09:17:00 | 显示全部楼层
wudiking 发表于 2023-7-11 13:27
3588平台,使用imx415,摄像头支持1920*1080分辨率60fps,当前只能每秒读30帧,如何调整到60帧,哪里能知 ...

上面说了,只能找模组厂商拿低分辨率的配置。
或者自己对照imx415的芯片文档自己改,但是厂商提供的文档寄存器大部分都不全,自己基本不可能改好,还有计算各个参数,比如mipi速率之类的。
回复

使用道具 举报

wudiking

高级会员

积分
693
 楼主| 发表于 2023-7-12 09:25:28 | 显示全部楼层
troy 发表于 2023-7-12 09:17
上面说了,只能找模组厂商拿低分辨率的配置。
或者自己对照imx415的芯片文档自己改,但是厂商提供的文档 ...

那咱们toybrick官方这边能进行适配吗
回复

使用道具 举报

wudiking

高级会员

积分
693
 楼主| 发表于 2023-7-17 08:09:38 | 显示全部楼层
troy 发表于 2023-7-12 09:17
上面说了,只能找模组厂商拿低分辨率的配置。
或者自己对照imx415的芯片文档自己改,但是厂商提供的文档 ...

您好,我从sonyfae拿到了60帧的序列,但是他不分globa_reg和reg,我如何调整啊
回复

使用道具 举报

troy

版主

积分
2364
发表于 2023-7-18 09:23:35 | 显示全部楼层
wudiking 发表于 2023-7-17 08:09
您好,我从sonyfae拿到了60帧的序列,但是他不分globa_reg和reg,我如何调整啊 ...

global_reg和reg是由多个初始序列拆出来,把多个初始序列相同部分放到global_reg,差异部分放到reg。你完全可以不管global_reg,把你的60fps序列都放到reg中,反正最终reg会覆盖global。
还有需要修改获取确认的
1. 你的lane数和现在硬件连接的lane数是否一致,现在是4lane的
2. supported_modes中新增一个60fps序列的结构体,或者把原来的结构体都删了,只留下60fps的结构体。
    a) 修改max_fps的denominator为60
    b)    根据你的序列修改width和height
    c)    修改hts_def和vts_def代码里面有计算公式,你可以先算一下原来的值,学会怎么算以后再改
    d)    global_reg_list和reg_list都改成你的序列,实际写两遍序列到sensor也没影响
    e)    mipi_freq_idx是用来表示使用link_freq_items中哪个的频率,你可以在link_freq_items新加一个60fps使用的mipi freq,这个很重要,如果mipi频率对应不上,会无法正确接收数据。
     f)    bpp是填写60pfs序列输出的是10bit还是12bit,如果是10bit,  bpp = 10, .bus_fmt = MEDIA_BUS_FMT_SGBRG10_1X10。如果是12bit,bpp = 12, bus_fmt = MEDIA_BUS_FMT_SGBRG12_1X12。


再次提醒: mipi freq是非常重要的参数,关系到mipi数据能不能正常接收,时钟对不上,mipi中断会一直报错。还有宽高如果设置错误,mipi中断也会不断报错。

需要更多支持,请贵公司联系申请redmine账号,会有工程师进行处理。
回复

使用道具 举报

wudiking

高级会员

积分
693
 楼主| 发表于 2023-7-19 06:40:35 | 显示全部楼层
本帖最后由 wudiking 于 2023-7-19 06:42 编辑
troy 发表于 2023-7-18 09:23
global_reg和reg是由多个初始序列拆出来,把多个初始序列相同部分放到global_reg,差异部分放到reg。你完 ...

多谢指教,已经适配成功,删除了之前的模式,发现60帧与当前的模式不能共存,不知道是不是哪里没有改好,所以将原有模式删掉了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表