1. 程式人生 > >Linux下 攝像頭 V4L2曝光時間控制

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在設定為手動模式後,再得到和設定曝光絕對值: