Linux--V4L2应用程序开发(二)改变亮度

一、思路流程

创建一个新线程用来控制亮度,线程通过读取用户输入来增加或减少亮度值,并使用 ioctl 函数将新亮度值设置到视频设备。

二、代码

复制代码
/*创建线程来控制亮度*/
pthread_t thread;
pthread_create(&thread, NULL, thread_brightness_contrl,(void*)fd);



static void*thread_brightness_contrl(void* args)
{
    int fd = (int)args;
    unsigned char c;
    int brightness;
    int delta;

    struct v4l2_queryctrl qctrl;
    memset(&qctrl,0,sizeof(qctrl));
    qctrl.id = V4L2_CID_BRIGHTNESS;
    if(0 != ioctl(fd,VIDIOC_QUERYCTRL,&qctrl))
    {
        printf("can not query brightness\n");
        return NULL;
    }
    printf("brightness min = %d,max = %d\n",qctrl.minimum,qctrl.maximum);

    struct v4l2_control ctl;
    ctl.id = V4L2_CID_BRIGHTNESS;
    ioctl(fd, VIDIOC_G_CTRL,&ctl);

    while(1)
    {
        c= getchar();
        if (c=='u'||c=='U')
        {
            ctl.value += delta;
        }
        else if(c =='D'||c=='d')
        {
            ctl.value -=delta;
        }
        if(ctl.value >= qctrl.maximum) ctl.value = qctrl.maximum;
        if(ctl.value <= qctrl.minimum) ctl.value = qctrl.minimum;

        ioctl(fd,VIDIOC_S_CTRL,&ctl);
    }


    return NULL;
};

三、知识点补充

while循环关键点

  1. 阻塞等待 :当执行 c = getchar(); 时,如果没有输入,程序会在这里阻塞。这意味着线程会在此暂停,直到用户输入一个字符。

  2. 循环继续 :一旦用户输入一个字符,getchar() 返回字符并继续执行循环的剩余部分。循环并未终止,它只是被阻塞等待输入。

  3. 线程挂起 :由于 getchar() 阻塞等待输入,线程会被挂起,等待输入字符。挂起状态并不意味着 while 循环终止,而是线程暂停在 getchar() 这行代码。

相关推荐
钝挫力PROGRAMER5 分钟前
从“硬件报错”到“内核崩溃”:一次超微(Supermicro)服务器失联问题解决记录
服务器·内核升级·无法连接
manageengine15 分钟前
PHP2Shell 事件复盘:企业应该如何自查、修复与规模化处置
运维·安全·php
第404号工位25 分钟前
插上充电宝真能偷光相册?我拆解了一台改装充电宝,实测“恶意充电”的真实攻击链
linux·python·架构
Initialize2930832 分钟前
Kafka 消息越堆越多、消费越来越慢?五步查清消费积压
运维
天南散修41 分钟前
《802.11-2024》第06讲 · 介质接入:MAC 架构与 DCF(CSMA/CA)
linux·网络·wifi·802.11
cpolar技术支持1 小时前
磁盘明明没满,服务却写不进去?做个 inode 与分区占用只读报表页,cpolar 给异地同事看
linux·内网穿透·cpolar·inode·运维排障
时间售卖铺1 小时前
MySQL 表的约束
运维·数据库·mysql·云原生
广州工博科技1 小时前
SAP Joule for Consultants 如何为自动化与集成项目提供支持?
运维·自动化
Lsetea1 小时前
curl访问HTTPS返回304却没有正文:条件请求、缓存与证书验收排查
linux·http·https·ssl证书·curl
Acrellea1 小时前
数据中心这台新变压器,让配电房的电表全失效了
运维·能源