photonvision icon indicating copy to clipboard operation
photonvision copied to clipboard

120 FPS camera stuck at 30 FPS

Open dustinlieu opened this issue 3 months ago • 2 comments

My camera reports that it supports 120 FPS at 320x240, but PhotonVision is maxing out at 30 FPS, even in driver mode. I tried another camera, different model, and that was able to get past 30 FPS, so it seems like an issue with this camera specifically.

Hardware:

  • RUBIK Pi 3, powered through USB-C
  • ELP-USBFHD01M-L 180

PhotonVision version: dev-v2025.3.2-83-ge84e3e7c

Image
ubuntu@photonvision:~$ v4l2-ctl --list-devices
cam-req-mgr-devnode (no bus info):
        /dev/media2
        /dev/media3

msm_vidc_media (platform:aa00000.video-codec):
        /dev/media1

msm_vidc_decoder (platform:msm_vidc_bus):
        /dev/video32
        /dev/video33

USB 2.0 Camera: HD USB Camera (usb-0000:01:00.0-2):
        /dev/video0
        /dev/video1
        /dev/media0

ubuntu@photonvision:~$ v4l2-ctl --device /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        [0]: 'MJPG' (Motion-JPEG, compressed)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.017s (60.000 fps)
                Size: Discrete 1024x768
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 640x480
                        Interval: Discrete 0.008s (120.101 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.017s (60.000 fps)
                Size: Discrete 1280x1024
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.008s (120.101 fps)
        [1]: 'YUYV' (YUYV 4:2:2)
                Size: Discrete 1920x1080
                        Interval: Discrete 0.167s (6.000 fps)
                Size: Discrete 1280x720
                        Interval: Discrete 0.111s (9.000 fps)
                Size: Discrete 1024x768
                        Interval: Discrete 0.167s (6.000 fps)
                Size: Discrete 640x480
                        Interval: Discrete 0.033s (30.000 fps)
                Size: Discrete 800x600
                        Interval: Discrete 0.050s (20.000 fps)
                Size: Discrete 1280x1024
                        Interval: Discrete 0.167s (6.000 fps)
                Size: Discrete 320x240
                        Interval: Discrete 0.033s (30.000 fps)

photonvision-logs.zip

dustinlieu avatar Oct 10 '25 05:10 dustinlieu

Note for other devs: this camera model uses an OV2710 sensor

samfreund avatar Oct 10 '25 05:10 samfreund

I think we should give one of the v4l cli tools to make sure the camera will give at least userland frames at full rate and go from there

mcm001 avatar Oct 11 '25 05:10 mcm001

That screenshot has exposure configured to 300. I believe OmniVision sensors like to do exposure in units of 0.1 ms, and at 300 * 0.1 ms, that's 30 ms of exposure, which is just faster than 30 FPS. Did you ever replicate this in Driver Mode, with a very low exposure? I think you might've, based on the log, but the logs also show a lot of instances of what appears to be non-Driver Mode pipelines, or Driver Mode accidentally using a 30 FPS video mode, and either way, it looked like some of the exposure sets may have failed as well? But that might be something separate to investigate. The logs also contain a lot of messages from the Rubik Pi system, making it hard to parse.

Gold856 avatar Dec 31 '25 08:12 Gold856