从应用调用vivi驱动分析v4l2 -- 获取camera数据

Linux v4l2架构学习总链接

vivi代码

v4l2测试代码

获取camera数据的过程简写如下

 


        type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

        if (ioctl(fd, VIDIOC_STREAMON, &type) < 0)
                printf ("VIDIOC_STREAMON failed\n");
        int num = 0;
        while (1)
        {
                FD_ZERO (&fds);
                FD_SET(fd, &fds);
                tv.tv_sec = 5;
                tv.tv_usec = 0;

                r = select (fd + 1, &fds, NULL, NULL, &tv);

                if (-1 == r)
                {
                        if (EINTR == errno)
                                continue;
                        printf ("select err\n");
                }
                if (0 == r)
                {
                        fprintf (stderr, "select timeout\n");
                        exit (EXIT_FAILURE);
                }

                memset(&buf, 0, sizeof(buf));
                buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
                buf.memory = V4L2_MEMORY_MMAP;
                if (ioctl (fd, VIDIOC_DQBUF, &buf) < 0)
                        printf("dqbuf fail\n");

                fwrite(buffers[buf.index].start, buf.bytesused, 1, file_fd);

                if (ioctl (fd, VIDIOC_QBUF, &buf) < 0)
                        printf("failture VIDIOC_QBUF\n");
                num++;
                if(num > atoi(argv[2]))
                        break;
        }

测试命令

./v4l2_test /dev/video25 10 test.yuv

ubuntu下使用命令

ffplay -f rawvideo -video_size  1920x1080 -pix_fmt yuyv422 test.yuv

window下使用pyuv软件

图像显示如下

现在是输入源1,如果改成输入源3

        inp.index = 3;

        if (ioctl (fd, VIDIOC_S_INPUT, &inp) < 0) {
                printf("Set input fail\n");
                goto err;
        }

显示效果如下

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dianlong_lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值