How to use frame rate adjust function on NVIDIA Jetson Board/zh

From wiki_veye
Jump to navigation Jump to search

English

1 怎样在英伟达平台使用灵活帧率功能

1.1 问题描述

CS系列摄像头支持灵活的帧率控制功能,可以使用I2C脚本进行配置。

但是如果使用我们提供的默认的驱动,使用gstreamer做应用层调用,每次gstreamer的调用都会覆盖i2c脚本已经写好的帧率模式。


下面以CS-MIPI-IMX307为例给出例子和解决方法。

比如,我们采用如下命令,配置CS-MIPI-IMX307的模式为1920*1080@10fps:

./cs_mipi_i2c.sh -w -f videofmt -p1 1920 -p2 1080 -p3 10

然后使用如下命令预览:

gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false

摄像头会被gstreamer命令重新配置为1920*1080@30fps。

1.2 解决方法

由于我们的驱动模式是V4L2模式,暂时给出的解决方案是:修改摄像头驱动的源码,在驱动中去掉对摄像头码流模式的配置。

以CS-MIPI-IMX307为例,在cs_imx307.h文件中,进行如下修改:

static cs307_reg cs307_reg_1920x1080_30fps[] = {

/*    {FMT_WIDTH_L,0x80},

    {FMT_WIDTH_H,0x7},

    {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_CMD},

    {FMT_HEIGHT_L,0x38},

    {FMT_HEIGHT_H,0x4},

    {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_CMD},

    {FMT_FRAMRAT_L,0x1E},

    {FMT_FRAMRAT_H,0x00},

    {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_STREAM},*/

{CS307_TABLE_END, 0x00}

};

static cs307_reg cs307_reg_1280x720_crop_60fps[] = {

/*    {FMT_WIDTH_L,0x00},

    {FMT_WIDTH_H,0x5},

    {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_CMD},

    {FMT_HEIGHT_L,0xD0},

    {FMT_HEIGHT_H,0x2},

    {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_CMD},

    {FMT_FRAMRAT_L,0x3C},

    {FMT_FRAMRAT_H,0x00},

    {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_STREAM},*/

{CS307_TABLE_END, 0x00}

};

static cs307_reg cs307_reg_640x480_crop_130fps[] = {

/*    {FMT_WIDTH_L,0x80},

    {FMT_WIDTH_H,0x2},

    {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_CMD},

    {FMT_HEIGHT_L,0xE0},

    {FMT_HEIGHT_H,0x1},

    {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_CMD},

    {FMT_FRAMRAT_L,0x82},

    {FMT_FRAMRAT_H,0x00},

    {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_STREAM},*/

{CS307_TABLE_END, 0x00}

};

然后按照英伟达Jetson平台上VEYE和CS系列摄像头驱动源码编译指南重新编译驱动即可。

做如上更改之后,记得使用i2c脚本进行码流模式的配置。