Linux下 攝像頭 V4L2曝光時間控制
阿新 • • 發佈:2019-02-02
設定曝光值的通常流程是:
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在設定為手動模式後,再得到和設定曝光絕對值:
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; 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:在設定為手動模式後,再得到和設定曝光絕對值: