How to use frame rate adjust function on NVIDIA Jetson Board/zh
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脚本进行码流模式的配置。