pirongbing0020 2017-09-13 03:39 采纳率: 0%
浏览 1418

C语言ioctl调曝光的问题

这是我调曝光的方法,试了v4l2_control的两种方式,这种可以调,但是保存图片发现不是每次曝光都正常。这是为什么,是这个V4L2_CID_EXPOSURE_ABSOLUTE参数不好还是摄像头问题。

 int set_exposure(int cam_fd, int exp_value) {
    struct v4l2_control ctrl;
    struct v4l2_queryctrl setting;
    int min, max, current, step, val_def;
    if (isv4l2Control(cam_fd, V4L2_CID_EXPOSURE_ABSOLUTE, &setting) < 0)
        return -1;
    min = setting.minimum;
    max = setting.maximum;
    step = setting.step;
    val_def = setting.default_value;
    current = v4l2GetControl(cam_fd, V4L2_CID_EXPOSURE_ABSOLUTE);
    printf("max %d, min %d, default %d, current %d \n", max, min, val_def,
            current);
    printf("start set exp\n");
    int ret;
    //设置曝光绝对值
    ctrl.id = V4L2_CID_EXPOSURE_ABSOLUTE;
    ctrl.value = exp_value;
    ret = ioctl(cam_fd, VIDIOC_S_CTRL, &ctrl);
    if (ret < 0) {
        printf("Set exposure failed (%d)\n", ret);
        return FALSE;
    } else
        printf("Control name:%s set to value:%d\n", setting.name, ctrl.value);
    return TRUE;
}

这是我尝试过不行的方式

 int ret; 
struct v4l2_controlctrl; 
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); 
returnV4L2_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 exposurefailed (%d)\n", ret); 
return V4L2_UTILS_SET_EXPSURE_ERR;} 

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 数学建模招标中位数问题
    • ¥15 phython路径名过长报错 不知道什么问题
    • ¥15 深度学习中模型转换该怎么实现
    • ¥15 HLs设计手写数字识别程序编译通不过
    • ¥15 Stata外部命令安装问题求帮助!
    • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
    • ¥15 TYPCE母转母,插入认方向
    • ¥15 如何用python向钉钉机器人发送可以放大的图片?
    • ¥15 matlab(相关搜索:紧聚焦)
    • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计