[嵌入式linux] 请教linux 下usb摄像头采集问题

[复制链接]
 楼主| 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 | 显示全部楼层
好用吗?
askeyes 发表于 2013-2-28 11:09 | 显示全部楼层
应该是当前摄像头不支持VIDIOC_QUERYCAP参数操作。可以查看下出错的原因描述。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部