2009-05-22 2 views
0

V4L (Linux 용 다양한 비디오 캡처에 대한 통합 액세스를 제공하는 API)과 관련된 일부 문제가 있습니다. 나는 VIDIOCGCAP ioctl 호출을 만들려고 노력하고 있지만 잘못된 인수 오류가 발생합니다.VIDIOCGCAP ioctl 호출시 V4L 문제

 
#include "linux/videodev.h" 
#include "fcntl.h" 
#include "stdio.h" 
int main() { 
int fd = open("/dev/video0", O_RDONLY); 
struct video_capability chan; 
if (ioctl(fd, VIDIOCGCAP, &chan) == -1) printf("err"); 
} 

: 그리고 여기

 
execve("./test", ["./test"], [/* 26 vars */]) = 0 
brk(0)         = 0x8d5c000 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fc9000 
access("/etc/ld.so.preload", R_OK)  = -1 ENOENT (No such file or directory) 
open("/etc/ld.so.cache", O_RDONLY)  = 3 
fstat64(3, {st_mode=S_IFREG|0644, st_size=29703, ...}) = 0 
mmap2(NULL, 29703, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fc1000 
close(3)        = 0 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
open("/lib/i686/cmov/libc.so.6", O_RDONLY) = 3 
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260e\1\0004\0\0\0\4"..., 512) = 512 
fstat64(3, {st_mode=S_IFREG|0755, st_size=1413540, ...}) = 0 
mmap2(NULL, 1418864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e66000 
mmap2(0xb7fbb000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x155) = 0xb7fbb000 
mmap2(0xb7fbe000, 9840, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7fbe000 
close(3)        = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e65000 
set_thread_area({entry_number:-1 -> 6, base_addr:0xb7e656b0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 
mprotect(0xb7fbb000, 4096, PROT_READ) = 0 
munmap(0xb7fc1000, 29703)    = 0 
open("/dev/video0", O_RDONLY)   = 3 
ioctl(3, EXT2_IOC_GETVERSION or VIDIOCGCAP, 0xbf8e4ca4) = -1 EINVAL (Invalid argument) 
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fc8000 
write(1, "err"..., 3err)     = 3 
exit_group(3)       = ?    = ? 

코드입니다 : 여기 는 strace를하다

 
gcc -o test test.c 

상세 정보 : 나는 V4L을 사용하여이 컴퓨터에서 다른 비디오 캡처 소프트웨어를 문제없이. 그래서 나는 잘못된 것을하고 있습니다.

답변

2

아마도 V4L2 대신 VIDIOC_QUERYCAP ioctl을 사용해보십시오.

+0

작동합니다! 왜 버전 1이 좋을지 모르겠지만 ... 버전 2에서는 괜찮습니다. D 고마워요! –

+0

FYI, V4L은 오래된 인터페이스이며 V4L2를 지원하는 대부분의 새 장치가 출시되었습니다. – TheCodeArtist

관련 문제