Skip to content

rpicam-vid framerate is not obeyed for frame captures when using --segment along with --sync parameters #322

@phantomkingx

Description

@phantomkingx

Environment

Raspberry Pi 5

rpicam-vid --list-cameras

Available cameras

0 : ov9281 [1280x800 10-bit MONO] (/base/axi/pcie@1000120000/rp1/i2c@88000/ov9281@60)
Modes: 'R8' : 640x400 [309.79 fps - (0, 0)/1280x800 crop]
1280x720 [171.79 fps - (0, 0)/1280x720 crop]
1280x800 [143.66 fps - (0, 0)/1280x800 crop]
'R10_CSI2P' : 640x400 [247.83 fps - (0, 0)/1280x800 crop]
1280x720 [137.42 fps - (0, 0)/1280x720 crop]
1280x800 [114.93 fps - (0, 0)/1280x800 crop]

1 : ov9281 [1280x800 10-bit MONO] (/base/axi/pcie@1000120000/rp1/i2c@80000/ov9281@60)
Modes: 'R8' : 640x400 [309.79 fps - (0, 0)/1280x800 crop]
1280x720 [171.79 fps - (0, 0)/1280x720 crop]
1280x800 [143.66 fps - (0, 0)/1280x800 crop]
'R10_CSI2P' : 640x400 [247.83 fps - (0, 0)/1280x800 crop]
1280x720 [137.42 fps - (0, 0)/1280x720 crop]
1280x800 [114.93 fps - (0, 0)/1280x800 crop]

rpicam-vid --version

rpicam-apps build: v1.10.1 28-11-2025 (16:40:26)
rpicam-apps capabilites: egl:1 qt:1 drm:1 libav:1
libcamera build: v0.6.0+rpt20251202

uname -a

Linux pi5 6.12.62-v8-16k+ #1928 SMP PREEMPT Wed Dec 17 15:38:28 GMT 2025 aarch64 GNU/Linux

Issue

When trying to use the multi-camera synchronization feature of rpicam-vid the captured frames appear to be pinned to 30 fps when using the --segment parameter regardless of what --framerate is set to. Oddly the preview window conflicts with this showing the desired framerate.

How to reproduce

create temp location in ram to store files

mkdir /dev/shm/track

command to run server process to begin creating frames

rpicam-vid --camera 0 --timeout 0 --codec mjpeg --segment 1 --mode 1280:800:10 --framerate 120 --output /dev/shm/track/cama%09d.jpg --save-pts /dev/shm/track/atimestamp.txt --sync server

contents of timestamp file

the timestamps remain at ~33.3 ms interval, or 30 fps.

# timecode format v2
0.000
33.351
66.704
100.053
133.404
166.756
200.105
233.455
266.806
300.158
...
12339.772
12373.123
12406.471
12439.820
12473.171
12506.522

adding client process

Using a client process and starting this first will wait for the server to start as expected. After server starts the client will start but the timestamps are also ~33.3 ms for the client.

rpicam-vid --camera 1 --timeout 0 --codec mjpeg --segment 1 --mode 1280:800:10 --framerate 120 --output /dev/shm/track/camb%09d.jpg --save-pts /dev/shm/track/btimestamp.txt --sync client

The preview windows for both server and client display 120 fps.

behavior without --sync param

If I remove the --sync parameter from both client and server commands above then the captured frames are now at 120 fps as expected according to the timestamp file.

# timecode format v2
0.000
8.328
16.680
25.008
33.351
41.690
50.038
58.365
66.704
...
5136.005
5144.344
5152.681
5161.019
5169.355
5177.696
5186.029
5194.371

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions