打印
[嵌入式linux]

请教linux 下usb摄像头采集问题

[复制链接]
1972|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
guozhengang630|  楼主 | 2013-2-16 14:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 guozhengang630 于 2013-2-16 14:56 编辑

系统ubuntu12.06
代码如下:
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <linux/videodev2.h>
int main(void)
{
        
        int camera_fd;
        if(camera_fd=open("/dev/video0", O_RDWR | O_NONBLOCK, 0)<0)
        {
                        printf("open error");
                        return camera_fd;
        }
        printf("camera_fd=%d\n",camera_fd);

        struct v4l2_capability cap;
        

        if (ioctl(camera_fd, VIDIOC_QUERYCAP, &cap) == -1)  
  
        {
               perror("Error get  device informaiton");
               printf("errno=%d\n\r",errno);
               return (errno);
          }  
问题:调用ioctl时,返回EINVAL         /* Invalid argument */
open 没有问题,请问下这个问题怎么解决?谢谢摄像头为UVC摄像头

相关帖子

沙发
oldwang1983| | 2013-2-16 15:49 | 只看该作者
找了段别人写的代码,好像没什么差别
int main()
{
    int i, ret;

    // 打开设备
    int fd;
    fd = open(CAMERA_DEVICE, O_RDWR, 0);
    if (fd < 0) {
        printf("Open %s failed\n", CAMERA_DEVICE);
        return -1;
    }

    // 获取驱动信息
    struct v4l2_capability cap;
    ret = ioctl(fd, VIDIOC_QUERYCAP, &cap);
    if (ret < 0) {
        printf("VIDIOC_QUERYCAP failed (%d)\n", ret);
        return ret;
    }
要不你把非阻塞的标识去掉试试看。

使用特权

评论回复
板凳
guozhengang630|  楼主 | 2013-2-17 10:34 | 只看该作者
oldwang1983 发表于 2013-2-16 15:49
找了段别人写的代码,好像没什么差别
int main()
{

试过了,还是不行

使用特权

评论回复
地板
keywest| | 2013-2-17 10:41 | 只看该作者
好用吗?

使用特权

评论回复
5
askeyes| | 2013-2-28 11:09 | 只看该作者
应该是当前摄像头不支持VIDIOC_QUERYCAP参数操作。可以查看下出错的原因描述。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝