Jetson Nano平台,增加图像sensor,在应用程序调用V4L2通用接口,无法调整相机参数(gain,exposure,frame rate),需要采用扩展的方式进行调用方可。
1.设置gain
int SetGain(int gain)
{
struct v4l2_ext_controls ctrls;
struct v4l2_ext_control ctrl;
memset(&ctrls, 0, sizeof(ctrls));
memset(&ctrl, 0, sizeof(ctrl));
ctrls.controls = &ctrl;
ctrls.count = 1;
ctrls.which = V4L2_CTRL_WHICH_CUR_VAL;
ctrl.id = TEGRA_CAMERA_CID_GAIN;
ctrl.value = gain;
return Xioctl(fd, VIDIOC_S_EXT_CTRLS, &ctrls);
}
2.设置exposure
int SetExposure(int exposure)
{
struct v4l2_ext_controls ctrls;
struct v4l2_ext_control ctrl;
memset(&ctrls, 0, sizeof(ctrls));
memset(&ctrl, 0, sizeof(ctrl));
ctrls.controls = &ctrl;
ctrls.count = 1;
ctrls.which = V4L2_CTRL_WHICH_CUR_VAL;
ctrl.id = TEGRA_CAMERA_CID_EXPOSURE;
ctrl.value = exposure;
return Xioctl(fd, VIDIOC_S_EXT_CTRLS, &ctrls);
}
3.设置frame rate
int SetFrameRate(unsigned int frame_rate)
{
struct v4l2_ext_controls ctrls;
struct v4l2_ext_control ctrl;
memset(&ctrls, 0, sizeof(ctrls));
memset(&ctrl, 0, sizeof(ctrl));
ctrls.controls = &ctrl;
ctrls.count = 1;
ctrls.which = V4L2_CTRL_WHICH_CUR_VAL;
ctrl.id = TEGRA_CAMERA_CID_FRAME_RATE;
ctrl.value = frame_rate;
return Xioctl(fd, VIDIOC_S_EXT_CTRLS, &ctrls);
}
4.设置模式
int SetMode(unsigned int mode)
{
struct v4l2_ext_controls ctrls;
struct v4l2_ext_control ctrl;
memset(&ctrls, 0, sizeof(ctrls));
memset(&ctrl, 0, sizeof(ctrl));
ctrls.controls = &ctrl;
ctrls.count = 1;
ctrls.which = V4L2_CTRL_WHICH_CUR_VAL;
ctrl.id = TEGRA_CAMERA_CID_SENSOR_MODE_ID;
ctrl.value = mode;
return Xioctl(fd, VIDIOC_S_EXT_CTRLS, &ctrls);
}
5.其他
诸如:
TEGRA_CAMERA_CID_VI_BYPASS_MODE
TEGRA_CAMERA_CID_OVERRIDE_ENABLE
TEGRA_CAMERA_CID_VI_PREFERRED_STRIDE
可按上述方法进行设置。