Difference between revisions of "How to use frame rate adjust function on NVIDIA Jetson Board/zh"
Line 1: | Line 1: | ||
[http://wiki.veye.cc/index.php/How_to_use_frame_rate_adjust_function_on_NVIDIA_Jetson_Board English] | [http://wiki.veye.cc/index.php/How_to_use_frame_rate_adjust_function_on_NVIDIA_Jetson_Board English] | ||
+ | |||
+ | === 怎样在英伟达平台使用灵活帧率功能 === | ||
+ | |||
+ | ==== 问题描述 ==== | ||
+ | CS系列摄像头支持灵活的帧率控制功能,可以使用I2C脚本进行配置。 | ||
+ | |||
+ | 但是如果使用我们提供的默认的驱动,使用gstreamer做应用层调用,每次gstreamer的调用都会覆盖i2c脚本已经写好的帧率模式。 | ||
+ | |||
+ | |||
+ | 下面以CS-MIPI-IMX307为例给出例子和解决方法。 | ||
+ | |||
+ | 比如,我们采用如下命令,配置CS-MIPI-IMX307的模式为1920*1080@10fps: | ||
+ | |||
+ | <code>./cs_mipi_i2c.sh -w -f videofmt -p1 1920 -p2 1080 -p3 10</code> | ||
+ | |||
+ | 然后使用如下命令预览: | ||
+ | |||
+ | <code>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</code> | ||
+ | |||
+ | 摄像头会被gstreamer命令重新配置为1920*1080@30fps。 | ||
+ | |||
+ | ==== 解决方法 ==== | ||
+ | 由于我们的驱动模式是V4L2模式,暂时给出的解决方案是:修改摄像头驱动的源码,在驱动中去掉对摄像头码流模式的配置。 | ||
+ | |||
+ | 以CS-MIPI-IMX307为例,在[https://github.com/veyeimaging/nvidia_jetson_veye_bsp/blob/master/drivers_source/cam_drv_src/cs_imx307.h cs_imx307.h]文件中,进行如下修改:<blockquote><code>static cs307_reg cs307_reg_1920x1080_30fps[] = {</code> | ||
+ | |||
+ | <code>/* {FMT_WIDTH_L,0x80},</code> | ||
+ | |||
+ | <code> {FMT_WIDTH_H,0x7},</code> | ||
+ | |||
+ | <code> {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_CMD},</code> | ||
+ | |||
+ | <code> {FMT_HEIGHT_L,0x38},</code> | ||
+ | |||
+ | <code> {FMT_HEIGHT_H,0x4},</code> | ||
+ | |||
+ | <code> {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_CMD},</code> | ||
+ | |||
+ | <code> {FMT_FRAMRAT_L,0x1E},</code> | ||
+ | |||
+ | <code> {FMT_FRAMRAT_H,0x00},</code> | ||
+ | |||
+ | <code> {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_STREAM},*/</code> | ||
+ | |||
+ | <code>{CS307_TABLE_END, 0x00}</code> | ||
+ | |||
+ | <code>};</code> | ||
+ | |||
+ | <code>static cs307_reg cs307_reg_1280x720_crop_60fps[] = {</code> | ||
+ | |||
+ | <code>/* {FMT_WIDTH_L,0x00},</code> | ||
+ | |||
+ | <code> {FMT_WIDTH_H,0x5},</code> | ||
+ | |||
+ | <code> {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_CMD},</code> | ||
+ | |||
+ | <code> {FMT_HEIGHT_L,0xD0},</code> | ||
+ | |||
+ | <code> {FMT_HEIGHT_H,0x2},</code> | ||
+ | |||
+ | <code> {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_CMD},</code> | ||
+ | |||
+ | <code> {FMT_FRAMRAT_L,0x3C},</code> | ||
+ | |||
+ | <code> {FMT_FRAMRAT_H,0x00},</code> | ||
+ | |||
+ | <code> {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_STREAM},*/</code> | ||
+ | |||
+ | <code>{CS307_TABLE_END, 0x00}</code> | ||
+ | |||
+ | <code>};</code> | ||
+ | |||
+ | <code>static cs307_reg cs307_reg_640x480_crop_130fps[] = {</code> | ||
+ | |||
+ | <code>/* {FMT_WIDTH_L,0x80},</code> | ||
+ | |||
+ | <code> {FMT_WIDTH_H,0x2},</code> | ||
+ | |||
+ | <code> {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_CMD},</code> | ||
+ | |||
+ | <code> {FMT_HEIGHT_L,0xE0},</code> | ||
+ | |||
+ | <code> {FMT_HEIGHT_H,0x1},</code> | ||
+ | |||
+ | <code> {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_CMD},</code> | ||
+ | |||
+ | <code> {FMT_FRAMRAT_L,0x82},</code> | ||
+ | |||
+ | <code> {FMT_FRAMRAT_H,0x00},</code> | ||
+ | |||
+ | <code> {CS307_TABLE_WAIT_MS, CS307_WAIT_MS_STREAM},*/</code> | ||
+ | |||
+ | <code>{CS307_TABLE_END, 0x00}</code> | ||
+ | |||
+ | <code>};</code></blockquote>然后按照'''[http://wiki.veye.cc/index.php/VEYE_CS_Camera_source_for_Jetson/zh 英伟达Jetson平台上VEYE和CS系列摄像头驱动源码编译指南]'''重新编译驱动即可。 | ||
+ | |||
+ | 做如上更改之后,记得使用i2c脚本进行码流模式的配置。 | ||
+ | <br /> |
Latest revision as of 11:34, 19 March 2021
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脚本进行码流模式的配置。