Linux下 摄像头 V4L2曝光时间控制

设置曝光值的通常流程 是:
1. 首先将曝光模式修改为手动曝光。
2. 设置曝光档次或者具体的曝光值。

例1:得到曝光模式,设置为手动曝光模式
int ret;
struct v4l2_control ctrl;
//得到曝光模式
ctrl.id = V4L2_CID_EXPOSURE_AUTO;
ret = ioctl(Handle, VIDIOC_G_CTRL, &ctrl);
if (ret < 0) 
{
printf("Get exposure auto Type failed\n");
return V4L2_UTILS_GET_EXPSURE_AUTO_TYPE_ERR;
}
printf("\nGet Exposure Auto Type:[%d]\n", ctrl.value);
// 此时,得到曝光模式。曝光模式分以下几种:

//设置曝光模式为手动模式
 ctrl.id = V4L2_CID_EXPOSURE_AUTO; 
 ctrl.value = V4L2_EXPOSURE_MANUAL;  //手动曝光模式
 ret = ioctl(Handle, VIDIOC_S_CTRL, &ctrl); 
 if (ret < 0) 
 { printf("Get exposure auto Type failed\n"); 
 return V4L2_UTILS_SET_EXPSURE_AUTO_TYPE_ERR; 
 }
 例2:在设置为手动模式后,再得到和设置曝光等级
int ret; 
 struct v4l2_control ctrl; 
 ctrl.id = V4L2_CID_EXPOSURE;   //得到曝光档次,A20接受从 -4到4 共9个档次
 ret = ioctl(Handle, VIDIOC_G_CTRL, &ctrl); 
 if (ret < 0) 
 { printf("Get exposure failed (%d)\n", ret); 
 return V4L2_UTILS_GET_EXPSURE_ERR; 
 } 
  printf("\nGet Exposure :[%d]\n", ctrl.value);
//设置曝光档次
ctrl.id = V4L2_CID_EXPOSURE; 
 ctrl.value = -4; 
 ret = ioctl(Handle, VIDIOC_S_CTRL, &ctrl); 
 if (ret < 0) { printf("Set exposure failed (%d)\n", ret); 
 return V4L2_UTILS_SET_EXPSURE_ERR; } 

例3:在设置为手动模式后,再得到和设置曝光绝对值:
int ret;
struct v4l2_control ctrl;

ctrl.id = V4L2_CID_EXPOSURE_ABSOLUTE;
ret = ioctl(handle, VIDIOC_G_CTRL, &ctrl);
if (ret < 0) 
{
printf("Set exposure failed (%d)\n", ret);
//return V4L2_UTILS_SET_EXPSURE_ERR;
}
printf("\nGet ABS EXP Success:[%d]\n", ctrl.value);

sleep(1);

//设置曝光绝对值
ctrl.id = V4L2_CID_EXPOSURE_ABSOLUTE;
ctrl.value = 5;
ret = ioctl(handle, VIDIOC_S_CTRL, &ctrl);
if (ret < 0) 
{
printf("Set exposure failed (%d)\n", ret);
//return V4L2_UTILS_SET_EXPSURE_ERR;
}


1得 到曝光模式,设置为手动曝光模式
2在设置为手动模式后,再得到和设置曝光绝对值:

你可能感兴趣的:(Linux下 摄像头 V4L2曝光时间控制)