* Not able to capture video frames @ 2010-07-30 11:30 Sudhindra Nayak 2010-07-31 11:32 ` Jean-Francois Moine 0 siblings, 1 reply; 5+ messages in thread From: Sudhindra Nayak @ 2010-07-30 11:30 UTC (permalink / raw) To: video4linux-list Hi all, I'm using the 'Omnivision' ov538 camera bridge processor along with an ov10620 CMOS sensor. I'm using a driver which I got from the following link: http://lwn.net/Articles/308358/ I've modified the driver by inserting printk statements in the driver code to understand the flow of control between functions. I've also changed the arguments passed to the 'sccb_reg_write' function to values corresponding to the ov10620 sensor. I'm using a v4l2 example code as my application along with the above mentioned driver. The example code can be found at the below link: http://v4l2spec.bytesex.org/spec/capture-example.html When I run the application after inserting the driver, it calls the open_device(), init_device() and start_capturing() functions and then enters the mainloop() function. In the mainloop() function, the select() function call times out after 2 seconds and I'm not able to capture any video frames. I'm also receiving some errors like: gspca: ISOC data error: [3] len=56, status=-71 gspca: ISOC data error: [4] len=12, status=-71 This repeats with different values for 'len' and the value in [ ]. Any solutions?? ----- Regards, Sudhindra Nayak -- View this message in context: http://video4linux-list.1448896.n2.nabble.com/Not-able-to-capture-video-frames-tp5354598p5354598.html Sent from the video4linux-list mailing list archive at Nabble.com. -- video4linux-list mailing list Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe https://www.redhat.com/mailman/listinfo/video4linux-list ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Not able to capture video frames 2010-07-30 11:30 Not able to capture video frames Sudhindra Nayak @ 2010-07-31 11:32 ` Jean-Francois Moine 2010-08-04 11:27 ` Sudhindra Nayak 0 siblings, 1 reply; 5+ messages in thread From: Jean-Francois Moine @ 2010-07-31 11:32 UTC (permalink / raw) To: Sudhindra Nayak; +Cc: video4linux-list [-- Attachment #1: Type: text/plain, Size: 2044 bytes --] On Fri, 30 Jul 2010 04:30:51 -0700 (PDT) Sudhindra Nayak <sudhindra.nayak@gmail.com> wrote: > I'm using the 'Omnivision' ov538 camera bridge processor along with an > ov10620 CMOS sensor. I'm using a driver which I got from the > following link: > > http://lwn.net/Articles/308358/ > > I've modified the driver by inserting printk statements in the driver > code to understand the flow of control between functions. I've also > changed the arguments passed to the 'sccb_reg_write' function to > values corresponding to the ov10620 sensor. > > I'm using a v4l2 example code as my application along with the above > mentioned driver. The example code can be found at the below link: > > http://v4l2spec.bytesex.org/spec/capture-example.html > > When I run the application after inserting the driver, it calls the > open_device(), init_device() and start_capturing() functions and then > enters the mainloop() function. In the mainloop() function, the > select() function call times out after 2 seconds and I'm not able to > capture any video frames. > > I'm also receiving some errors like: > > gspca: ISOC data error: [3] len=56, status=-71 > gspca: ISOC data error: [4] len=12, status=-71 > > This repeats with different values for 'len' and the value in [ ]. Hi Sudhindra, First, the mailing list for linux video is now linux-media@vger.kernel.org. Then, the ov534 which appeared in lwn is rather old. The last gspca stable version may be found at LinuxTv.org, and there is a test version as a tarball in my home page (see below). The error in the ISOC messages are set by the webcam. It means that the initialization is not complete/correct. To facilitate your job, I join a Tcl script which parses the output of sniffbin (USB sniffer on ms-win) giving a more compact and readable trace. BTW, I could include your driver in the Linux kernel as soon as it will work... Best regards. -- Ken ar c'hentañ | ** Breizh ha Linux atav! ** Jef | http://moinejf.free.fr/ [-- Attachment #2: parsnoop.tcl --] [-- Type: text/x-tcl, Size: 5060 bytes --] #!/bin/sh # -*- tcl -*- \ exec tclsh "$0" ${1+"$@"} proc usage {} { puts "Parse a ms-win USB snoop Usage: parsnoop \[options\] <usbsnoop file> Options: -nb Don't display the Bulk/Interrupt messages -ni Don't display the Isochronous messages -t Display the delta time between exchanges" exit } proc isoc {fd} { global deltatime noisoc set in 0 while {[gets $fd line] >= 0} { switch -regexp -- $line { " URB " break StartFrame { if {[string compare [lindex $line 2] 00000000] != 0} { set in 1 } } TransferBufferLength { set l [lindex $line 2] } NumberOfPackets { set n [lindex $line 2] } } } if {!$in || $noisoc} { return $line } puts -nonewline $deltatime puts [format "<isoc \[%d\] l:%d" 0x$n 0x$l] return $line } proc vendor {fd} { # outgoing message global deltatime set out 0 set b {} while {[gets $fd line] >= 0} { switch -regexp -- $line { " URB " break DIRECTION_OUT { set out 1 } TransferBufferLength { # set l 0x[lindex $line 3] } 00000..0: { if {$out} { if {[string length $b] != 0} { append b "\n\t\t " } append b [lrange $line 1 end] } } "Request" { set r [format %02x 0x[lindex $line 2]] } "Value" { set v [format %04x 0x[lindex $line 2]] } "Index" { set i [format %04x 0x[lindex $line 2]] } } } if {$out} { puts -nonewline $deltatime puts " SET $r $v $i $b" } return $line } proc ctrl {fd} { # incoming message global deltatime set in 0 set b {} set setup 0 while {[gets $fd line] >= 0} { switch -regexp -- $line { " URB " break DIRECTION_IN { set in 1 } SetupPacket { set setup 1 } " 00000" { if {!$in} continue if {!$setup} { if {[string length $b] == 0} { set b [lrange $line 1 end] } else { append b "\n<\t\t " append b [lrange $line 1 end] } } else { set r [lindex $line 2] set v [lindex $line 4][lindex $line 3] set i [lindex $line 6][lindex $line 5] } } } } if {$in} { puts -nonewline $deltatime puts "<GET $r $v $i $b" } return $line } proc interf {fd} { # select interface global deltatime set i {??} set a {??} while {[gets $fd line] >= 0} { switch -regexp -- $line { " URB " break InterfaceNumber { set i [format %02x 0x[lindex $line 3]] } AlternateSetting { set a [format %02x 0x[lindex $line 3]] } } } puts -nonewline $deltatime puts " intf $i alt $a" return $line } proc feature {fd} { global deltatime while {[gets $fd line] >= 0} { switch -regexp -- $line { " URB " break } } puts -nonewline $deltatime puts "feature" return $line } proc transf {fd} { # bulk or interrupt transfer global deltatime nobulk set in 0 set b {} while {[gets $fd line] >= 0} { switch -regexp -- $line { DIRECTION_IN { set in 1 } " 000000" { if {!$nobulk} { if {[string length $b] == 0} { set b [lrange $line 1 end] } else { append b "\n\t " append b [lrange $line 1 end] } } } " 00000100" { if {!$nobulk} { append b "\n\t ..." } } " URB " break } } if {$nobulk || [string length $b] == 0} { return $line } puts -nonewline $deltatime if {$in} { puts "<Bulk/Int IN $b" } else { puts " Bulk/Int OUT $b" } return $line } proc main {argv} { global nowtime prevtime withtime deltatime nobulk noisoc set withtime 0 set nobulk 0 set noisoc 0 set deltatime {} set fn {} foreach a $argv { switch -- $a { -t { set withtime 1 } -nb { set nobulk 1 } -ni { set noisoc 1 } default { if {[string length $fn] != 0} usage set fn $a } } } if {[string length $fn] == 0} usage if {[catch {open $fn r} fd]} { puts "cannot open '$fn'" exit 1 } set nowtime 0 set prevtime 0 set nisoc 0 while {[gets $fd line] >= 0} { set isoc 0 switch -regexp -- $line { URB_FUNCTION_ISOCH_TRANSFER { set line [isoc $fd] set isoc 1 incr nisoc } URB_FUNCTION_VENDOR { set line [vendor $fd] } URB_FUNCTION_CONTROL_TRANSFER { set line [ctrl $fd] } URB_FUNCTION_SELECT_INTERFACE { set line [interf $fd] } URB_FUNCTION_SET_FEATURE_TO_DEVICE { set line [feature $fd] } URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER { set line [transf $fd] } } if {!$noisoc && !$isoc && $nisoc != 0} { puts -nonewline $deltatime puts "$nisoc isoc" set nisoc 0 } if {[regexp {\[([0-9]+) ms\]} $line dum ntime]} { set prevtime $nowtime set nowtime $ntime if {[string first down $line] > 0} { if {$withtime} { set deltatime [format "%4d " \ [expr {$nowtime - $prevtime}]] } elseif {$nowtime > $prevtime + 2} { puts "== +[expr {$nowtime - $prevtime}] ms" } } if {$nowtime > $prevtime + 200} { puts "== \[$nowtime ms\]" } } } } main $argv [-- Attachment #3: Type: text/plain, Size: 164 bytes --] -- video4linux-list mailing list Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe https://www.redhat.com/mailman/listinfo/video4linux-list ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Not able to capture video frames 2010-07-31 11:32 ` Jean-Francois Moine @ 2010-08-04 11:27 ` Sudhindra Nayak 0 siblings, 0 replies; 5+ messages in thread From: Sudhindra Nayak @ 2010-08-04 11:27 UTC (permalink / raw) To: video4linux-list Hi Jean, First of all, thanks for the response. I'm using the above mentioned driver and the test application on an AT91SAM9G45-EKES evaluation kit and not on the PC. Does your solution hold good for the ARM9 based kit too? I downloaded the test version of the 'gspca' driver from your home page as you mentioned in your previous mail. I'm now using the new gspca driver , header files and the new ov534 driver. I've changed the arguments in the 'sensor_init' array to correspond to the OV10620 sensor values. But when I run the application, I get the following: gspca: [a.out] open gspca: frame alloc frsz: 614400 gspca: reqbufs st:0 c:4 gspca: mmap start:4013e000 size:614400 gspca: mmap start:401d4000 size:614400 gspca: mmap start:4026a000 size:614400 gspca: mmap start:40300000 size:614400 gspca: qbuf 0 gspca: qbuf 1 gspca: qbuf 2 gspca: qbuf 3 gspca: no transfer endpoint found VIDIOC_STREAMON error 5, Input/outgspca: [a.out] close pgspca: frame free ut error gspca: close done I'm getting an I/O error here. The usb interface seems to be working fine since I tested it with a pen drive. Can you please help me out. I'm including the 'strace' ouput below for your reference: execve("./a.out", ["./a.out"], [/* 13 vars */]) = 0 brk(0) = 0x13000 uname({sys="Linux", node="at91sam9g45ekes", ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001c000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/var/run/ld.so.cache", O_RDONLY) = -1 ENOENT (No such file or directory) open("/lib/tls/v5l/fast-mult/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/tls/v5l/fast-mult/half", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/tls/v5l/fast-mult/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/tls/v5l/fast-mult", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/tls/v5l/half/libc.so.6", gspca: [a.out] open O_RDONLY) = -1 ENOENT (No such file or directory) sgspca: frame alloc frsz: 614400 tat64("/lib/tls/v5l/gspca: reqbufs st:0 c:4 half", 0xbee35220) = -1 ENOENT (No such file or directory) gspca: mmap start:4013e000 size:614400 open("/lib/tls/v5l/libc.so.6", O_RDONLY) = -1 ENOENT (gspca: mmap start:401d4000 size:614400 No such file or directory) stat64("/lib/tls/v5l", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/tls/fast-mult/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/tls/fast-mult/half", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/tls/fast-mult/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/tls/fast-mult", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/tls/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/tls/half", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/tls/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/tls", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/v5l/fast-mult/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/v5l/fast-mult/half", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/v5l/fast-mult/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/v5l/fast-mult", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/v5l/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/v5l/half", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/v5l/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/v5l", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/fast-mult/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/fast-mult/half", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/fast-mult/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/fast-mult", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/half/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory) stat64("/lib/half", 0xbee35220) = -1 ENOENT (No such file or directory) open("/lib/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\220K\1\000"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1111536, ...}) = 0 mmap2(NULL, 1147328, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x40025000 mprotect(0x40130000, 32768, PROT_NONE) = 0 mmap2(0x40138000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x10b) = 0x40138000 mmap2(0x4013b000, 8640, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4013b000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001d000 syscall_983045(0x4001d090, 0x4001d090, 0x68c, 0x4001d768, 0x40024060, 0x40024000, 0, 0xf0005, 0x60, 0xffff565c, 0, 0xbee35aec, 0, 0xbee357e8, 0x40010e24, 0x40001fc4, 0x20000010, 0x4001d090, 0xb575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) = 0 mprotect(0x40138000, 8192, PROT_READ) = 0 mprotect(0x40023000, 4096, PROT_READ) = 0 fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(4, 64), ...}) = 0 ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B115200 opost isig icanon echo ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001e000 write(1, "Opening Device\n", 15Opening Device ) = 15 stat64("/dev/video", {st_mode=S_IFCHR|0660, st_rdev=makedev(81, 0), ...}) = 0 open("/dev/video", O_RDWR|O_NONBLOCK) = 3 write(1, "Initializing Device\n", 20Initializing Device ) = 20 ioctl(3, VIDIOC_QUERYCAP or VT_OPENQRY, 0xbee35bec) = 0 ioctl(3, VIDIOC_CROPCAP, 0xbee35bc0) = -1 EINVAL (Invalid argument) ioctl(3, VIDIOC_S_FMT or VT_RELDISP, 0xbee35ae0) = 0 ioctl(3, VIDIOC_REQBUFS or VT_DISALLOCATE, 0xbee35aac) = 0 brk(0) = 0x13000 brk(0x34000) = 0x34000 ioctl(3, VIDIOC_QUERYBUF or VT_RESIZE, 0xbee35a68) = 0 mmap2(NULL, 614400, PROT_READ|PROT_WRITgspca: mmap start:4026a000 size:614400 E, MAP_SHARED, 3, 0) = 0x4013e000 ioctl(3, VIDIOC_QUERgspca: mmap start:40300000 size:614400 YBUF or VT_RESIZE, 0xbee35a68) = 0 mmap2(NULL, 614400, Pgspca: qbuf 0 ROT_READ|Pgspca: qbuf 1 ROT_WRITE,gspca: qbuf 2 MAP_SHARED, 3, 0x96) = 0x40gspca: qbuf 3 1d4000 iogspca: no transfer endpoint found ctl(3, VIDIOC_QUERYBUF or VT_RESIZE, 0xbee35a68) = 0 mmapgspca: [a.out] close 2gspca: frame free (NULL, 614400,gspca: close done PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x12c) = 0x4026a000 ioctl(3, VIDIOC_QUERYBUF or VT_RESIZE, 0xbee35a68) = 0 mmap2(NULL, 614400, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x1c2) = 0x40300000 write(1, "Capturing Frames\n", 17Capturing Frames ) = 17 ioctl(3, VIDIOC_QBUF, 0xbee35c0c) = 0 ioctl(3, VIDIOC_QBUF, 0xbee35c0c) = 0 ioctl(3, VIDIOC_QBUF, 0xbee35c0c) = 0 ioctl(3, VIDIOC_QBUF, 0xbee35c0c) = 0 ioctl(3, VIDIOC_STREAMON, 0xbee35c50) = -1 EIO (Input/output error) write(2, "VIDIOC_STREAMON error 5, Input/o"..., 44VIDIOC_STREAMON error 5, Input/output error ) = 44 io_submit(0x1, 0x1, 0xfbad2088 <unfinished ... exit status 1> Process 1053 detached ----- Regards, Sudhindra Nayak -- View this message in context: http://video4linux-list.1448896.n2.nabble.com/Not-able-to-capture-video-frames-tp5354598p5372108.html Sent from the video4linux-list mailing list archive at Nabble.com. -- video4linux-list mailing list Unsubscribe mailto:video4linux-list-request@redhat.com?subject=unsubscribe https://www.redhat.com/mailman/listinfo/video4linux-list ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <AANLkTim5YmSsvhub3+t0_QX0k84xZgPy1FS5=9COfEzH@mail.gmail.com>]
* Re: Not able to capture video frames [not found] <AANLkTim5YmSsvhub3+t0_QX0k84xZgPy1FS5=9COfEzH@mail.gmail.com> @ 2010-08-05 11:19 ` Jean-Francois Moine [not found] ` <AANLkTinEbSe=d7TESEzzd8MZ5tPExrN4U9LvHrgm7FYf@mail.gmail.com> 0 siblings, 1 reply; 5+ messages in thread From: Jean-Francois Moine @ 2010-08-05 11:19 UTC (permalink / raw) To: Sudhindra Nayak; +Cc: linux-media On Thu, 5 Aug 2010 11:34:28 +0530 Sudhindra Nayak <sudhindra.nayak@gmail.com> wrote: > As you requested, I'm including the lsusb output below: Hi Sudhindra, The USB information indicate that the webcam uses uses isochronous transfer. The driver ov534 you used as a base uses bulk transfer. So, you must either remove the 'cam->bulk..' in sd_conf() or change your base driver to ov519. In any case, don't forget to adjust the pkt_scan function... Best regards. -- Ken ar c'hentañ | ** Breizh ha Linux atav! ** Jef | http://moinejf.free.fr/ ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <AANLkTinEbSe=d7TESEzzd8MZ5tPExrN4U9LvHrgm7FYf@mail.gmail.com>]
* Re: Not able to capture video frames [not found] ` <AANLkTinEbSe=d7TESEzzd8MZ5tPExrN4U9LvHrgm7FYf@mail.gmail.com> @ 2010-08-17 18:01 ` Jean-Francois Moine 0 siblings, 0 replies; 5+ messages in thread From: Jean-Francois Moine @ 2010-08-17 18:01 UTC (permalink / raw) To: Sudhindra Nayak; +Cc: linux-media On Tue, 17 Aug 2010 17:50:58 +0530 Sudhindra Nayak <sudhindra.nayak@gmail.com> wrote: > As you suggested I removed the 'cam->bulk....' part in the sd_config > function. Also, can you please explain how you arrived at the > sd_pkt_scan function? I'm not able to understand the bit > manipulations that you have performed in the sd_pkt_scan function. > Also, you did mention that the sd_pkt_scan function needs to be > modified. Can you please elaborate on the changes that need to be > done to the sd_pkt_scan function? > > As I'd mentioned earlier, I'm using the 'ov534.c' code with the ov538 > bridge processor. Will there be any change in the sd_pkt_scan > function with respect to ov538? [snip] > functions and then enters the mainloop() function. In the mainloop() > function, the select() function call times out after 2 seconds and > I'm not able to capture any video frames. > > Any suggestions?? Hi Sudhindra, The ov534 sends images in UVC format, i.e. each packet contains a 12 bytes header and a part of the image. In the header, the 1st byte contains various indicators, of which the bit 1 (0x02) marks the end of the image. To code your sd_pkt_scan(), you have to search in the ms-windows traces how the images are fragmented, how you may find the start and end of image and whether some data have to be discarded in the packets. The last problem to solve is to find how are encoded the images. You may know it looking also in the ms-winsows traces or, when the driver will work, in the received images. If you want, I may send you a small program which displays raw images (done by 'svv -rg') forcing the encoding. Good luck! -- Ken ar c'hentañ | ** Breizh ha Linux atav! ** Jef | http://moinejf.free.fr/ ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-08-17 18:00 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-30 11:30 Not able to capture video frames Sudhindra Nayak
2010-07-31 11:32 ` Jean-Francois Moine
2010-08-04 11:27 ` Sudhindra Nayak
[not found] <AANLkTim5YmSsvhub3+t0_QX0k84xZgPy1FS5=9COfEzH@mail.gmail.com>
2010-08-05 11:19 ` Jean-Francois Moine
[not found] ` <AANLkTinEbSe=d7TESEzzd8MZ5tPExrN4U9LvHrgm7FYf@mail.gmail.com>
2010-08-17 18:01 ` Jean-Francois Moine
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox