Skip to content

libcamerify seems to work partly, but motion isn't able to open the device #69

@joeschmitt

Description

@joeschmitt

Starting motion with the libcamerify helper script leads to the following behavior:

libcamerify -d motion -c /home/pi/.motion/motion.conf -l /media/pi/USBVIDEO/motion.log
[0:motion] [NTC] [ALL] conf_load: Processing thread 0 - config file /home/pi/.motion/motion.conf
[0:motion] [ALR] [ALL] conf_cmdparse: Unknown config option "
"
[0:motion] [NTC] [ALL] motion_startup: Logging to file (/media/pi/USBVIDEO/motion.log)
[0:29:40.002029132] [5366] INFO Camera camera_manager.cpp:299 libcamera v0.0.3+40-9b860a66
[0:29:40.128392311] [5367] INFO RPI raspberrypi.cpp:1425 Registered camera /base/soc/i2c0mux/i2c@1/imx708@1a to Unicam device /dev/media4 and ISP device /dev/media0
[0:29:40.128564532] [5366] DEBUG V4L2Compat v4l2_compat_manager.cpp:79 Started camera manager
[0:29:40.128704328] [5366] DEBUG V4L2Compat v4l2_camera_proxy.cpp:50 [] open()
[0:29:40.129057344] [5366] DEBUG V4L2Compat v4l2_compat_manager.cpp:163 Opened /dev/video0 -> fd 8
[0:29:40.129230602] [5366] DEBUG V4L2Compat v4l2_camera_proxy.cpp:739 [/dev/video0 (fd:8)] vidioc_streamoff()
[0:29:40.129259879] [5366] DEBUG V4L2Compat v4l2_camera_proxy.cpp:85 [/dev/video0 (fd:8)] close()
[0:29:40.217066672] [5366] DEBUG V4L2Compat v4l2_camera_proxy.cpp:50 [] open()
[0:29:40.217502299] [5366] DEBUG V4L2Compat v4l2_compat_manager.cpp:163 Opened /dev/video0 -> fd 8
[0:29:40.217595446] [5366] DEBUG V4L2Compat v4l2_camera_proxy.cpp:739 [/dev/video0 (fd:8)] vidioc_streamoff()
[0:29:40.217622780] [5366] DEBUG V4L2Compat v4l2_camera_proxy.cpp:85 [/dev/video0 (fd:8)] close()
[0:29:49.955948844] [5366] DEBUG V4L2Compat v4l2_camera_proxy.cpp:50 [] open()
[0:29:49.956718228] [5366] DEBUG V4L2Compat v4l2_compat_manager.cpp:163 Opened /dev/video0 -> fd 8
[0:29:49.956928208] [5366] DEBUG V4L2Compat v4l2_camera_proxy.cpp:739 [/dev/video0 (fd:8)] vidioc_streamoff()
[0:29:49.956983263] [5366] DEBUG V4L2Compat v4l2_camera_proxy.cpp:85 [/dev/video0 (fd:8)] close()

and my motion log shows:

....
[1:ml1] [NTC] [ALL] [Feb 26 18:03:30] motion_init: Camera 0 started: motion detection Enabled
[1:ml1] [NTC] [VID] [Feb 26 18:03:30] vid_start: Opening V4L2 device
[1:ml1] [DBG] [ALL] [Feb 26 18:03:30] util_parms_add: Parsed: >palette< >17<
[1:ml1] [DBG] [ALL] [Feb 26 18:03:30] util_parms_add: Parsed: >input< >-1<
[1:ml1] [DBG] [ALL] [Feb 26 18:03:30] util_parms_add: Parsed: >norm< >0<
[1:ml1] [DBG] [ALL] [Feb 26 18:03:30] util_parms_add: Parsed: >frequency< >0<
[1:ml1] [NTC] [VID] [Feb 26 18:03:30] v4l2_device_open: Using videodevice /dev/video0 and input -1
[1:ml1] [ERR] [VID] [Feb 26 18:03:30] v4l2_device_capability: Not a V4L2 device?
[1:ml1] [DBG] [VID] [Feb 26 18:03:30] v4l2_device_close: close
[1:ml1] [DBG] [VID] [Feb 26 18:03:30] v4l2_device_cleanup: vid_source
[1:ml1] [ERR] [VID] [Feb 26 18:03:30] vid_start: V4L2 device failed to open
.......

It seems the call to xioctl(vid_source, VIDIOC_QUERYCAP, &vid_source->cap) in motion leads to a negative ret code:

.\motion-master\src\video_v4l2.c line 1496
....
static int v4l2_device_capability(struct video_dev *curdev)
{

src_v4l2_t *vid_source = (src_v4l2_t *) curdev->v4l2_private;

if (xioctl(vid_source, VIDIOC_QUERYCAP, &vid_source->cap) < 0) {
    MOTION_LOG(ERR, TYPE_VIDEO, NO_ERRNO, _("Not a V4L2 device?"));
    return -1;
}

MOTION_LOG(DBG, TYPE_VIDEO, NO_ERRNO, "------------------------");
MOTION_LOG(DBG, TYPE_VIDEO, NO_ERRNO, "cap.driver: \"%s\"",vid_source->cap.driver);
MOTION_LOG(DBG, TYPE_VIDEO, NO_ERRNO, "cap.card: \"%s\"",vid_source->cap.card);
MOTION_LOG(DBG, TYPE_VIDEO, NO_ERRNO, "cap.bus_info: \"%s\"",vid_source->cap.bus_info);
MOTION_LOG(DBG, TYPE_VIDEO, NO_ERRNO, "cap.capabilities=0x%08X",vid_source->cap.capabilities);
MOTION_LOG(DBG, TYPE_VIDEO, NO_ERRNO, "------------------------");

....

The camera (Camer V3 with imx708) works fine when I check this with libcamera-vid. And feeding the data through a nginx server (rmtp) which can the motion read from does also work but it's slow in regard to fps and it needs nearly 100% cpu of an raspi4.
So not my prefered solution :(.

My device is a Raspi4 with 64 Bit bullseye, with motion [0:motion] [NTC] [ALL] [Feb 26 18:03:30] motion_startup: Motion 4.5.1 Started

Any idea for a fix or a work-around?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions