USB camera on ARM64 RPi3
Joel <[email protected]>
| Newsgroups | gmane.os.netbsd.ports.arm |
|---|---|
| Message-ID | <[email protected]> |
Hello -- I have an RPi3 running GENERIC Aarch64 NetBSD 10-RELEASE. It has generally been good. Recently I'm trying to get an OpenCV 4.x build to work. With some minimal cmake file changes, I've had success on a RockPro64 and Pinebook Pro -- same Rockchip SoC. Motivation is that current pkgsrc OpenCV 3.x doesn't work (ARM64 nor AMD64) with USB cameras (separate thread on that, related to buffer reallocation to change resolution). Okay, plot is set. On the RPi3, I see an error I don't on the Rockchip devices. It's a simple 1) open cam, 2) read image, 3) write image, 4) close. I'll start with naive debugging: Could there be a chipset difference that could be causing the failure only on one? With opencv debugging output on, here is where the failure is: [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_DQBUF(3227014673), ...) => -1 errno=35 (Resource temporarily unavailable) [ WARN:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (1021) tryIoctl VIDEOIO(V4L2:/dev/video0): select() timeout. [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (957) read_frame_v4l2 VIDEOIO(V4L2:/dev/video0): can't read frame (VIDIOC_DQBUF): errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_STREAMOFF(2147767827), failIfBusy=1) It's failing on a select() call at opencv/modules/videoio/src/cap_v4l.cpp:982. Here's the successful trace on the RockPro64: [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_DQBUF(3227014673), ...) => -1 errno=35 (Resource temporarily unavailable) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (1025) tryIoctl VIDEOIO(V4L2:/dev/video0): select(5) => 1 errno = 0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_DQBUF(3227014673), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_QBUF(3227014671), failIfBusy=1) Can anyONE guide me to further understand why the select() fails on one chipset and not another, using the same GENERIC ARM64 NetBSD? BTW: No luck with pkgsrc ffmpeg5 either -- still debugging that. Thanks - Joel Below is the entire failed trace on the RPi3: [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/python/src2/cv2.cpp (95) pycvRegisterMatType pycvRegisterMatType 0xfb443b59b790 0xfb443bb7ac10 [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/videoio_registry.cpp (197) VideoBackendRegistry VIDEOIO: Builtin backends(3): V4L_BSD(1000); CV_IMAGES(990); CV_MJPEG(980) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/videoio_registry.cpp (221) VideoBackendRegistry VIDEOIO: Available backends(3): V4L_BSD(1000); CV_IMAGES(990); CV_MJPEG(980) [ INFO:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/videoio_registry.cpp (223) VideoBackendRegistry VIDEOIO: Enabled backends(3, sorted by priority): V4L_BSD(1000); CV_IMAGES(990); CV_MJPEG(980) [ WARN:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap.cpp (130) open VIDEOIO(V4L_BSD): trying capture filename='/dev/video0' ... [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (918) open VIDEOIO(V4L2:/dev/video0): opening... [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (934) open VIDEOIO(V4L2:/dev/video0): deviceHandle=5 [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_QUERYCAP(1080579584), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_QUERYCAP(1080579584), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_G_FMT(3234878980), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_G_FMT(3234878980), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_S_FMT(3234878981), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_S_FMT(3234878981), ...) => -1 errno=22 (Invalid argument) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_S_FMT(3234878981), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_S_FMT(3234878981), ...) => -1 errno=22 (Invalid argument) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_S_FMT(3234878981), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_S_FMT(3234878981), ...) => -1 errno=22 (Invalid argument) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_S_FMT(3234878981), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_S_FMT(3234878981), ...) => -1 errno=22 (Invalid argument) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_S_FMT(3234878981), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_S_FMT(3234878981), ...) => -1 errno=22 (Invalid argument) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_S_FMT(3234878981), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_S_FMT(3234878981), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_S_PARM(3234616854), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_S_PARM(3234616854), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_G_PARM(3234616853), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_G_PARM(3234616853), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (623) setFps VIDEOIO(V4L2:/dev/video0): FPS=30/1 [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_REQBUFS(3222558216), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_REQBUFS(3222558216), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_QUERYBUF(3227014665), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_QUERYBUF(3227014665), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_QUERYBUF(3227014665), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_QUERYBUF(3227014665), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_QUERYBUF(3227014665), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_QUERYBUF(3227014665), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_QUERYBUF(3227014665), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_QUERYBUF(3227014665), ...) => 0 errno=0 (Undefined error: 0) [ WARN:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap.cpp (142) open VIDEOIO(V4L_BSD): created, isOpened=1 [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_QBUF(3227014671), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_QBUF(3227014671), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_QBUF(3227014671), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_QBUF(3227014671), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_QBUF(3227014671), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_QBUF(3227014671), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_QBUF(3227014671), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_QBUF(3227014671), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_STREAMON(2147767826), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_STREAMON(2147767826), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_DQBUF(3227014673), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_DQBUF(3227014673), ...) => -1 errno=35 (Resource temporarily unavailable) [ WARN:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (1021) tryIoctl VIDEOIO(V4L2:/dev/video0): select() timeout. [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (957) read_frame_v4l2 VIDEOIO(V4L2:/dev/video0): can't read frame (VIDIOC_DQBUF): errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_STREAMOFF(2147767827), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_STREAMOFF(2147767827), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (976) tryIoctl VIDEOIO(V4L2:/dev/video0): tryIoctl(5, VIDIOC_REQBUFS(3222558216), failIfBusy=1) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (984) tryIoctl VIDEOIO(V4L2:/dev/video0): call ioctl(5, VIDIOC_REQBUFS(3222558216), ...) => 0 errno=0 (Undefined error: 0) [DEBUG:[email protected]] global /home/joelp/repos/opencv/modules/videoio/src/cap_v4l.cpp (469) closeDevice VIDEOIO(V4L2:/dev/video0): close(5)