ZED 2i - Incorrect FPS After Camera Reboot

Sometimes rebooting the camera causes it to restart with a lower FPS setting than originally configured.

The camera_fps init parameter is set to 60, and on first open it works as expected.
Sometimes the console logs unusual requested FPS numbers (38,46,50 etc) on both first open and reboot.
[2026-02-09 12:45:13 UTC][ZED][INFO] [Init] Video mode: HD720@50
On first startup no further information about the odd fps is printed, and the camera seems to use the correct 60fps setting even if it claims HD720@38 etc on open.
On reboots a log is printed warning about the odd fps mode, and the camera seems to default to the closest supported FPS setting.
[2026-02-10 12:23:04 UTC][ZED][INFO] [Init] Requested FPS (11fps) is not available for the current resolution, using 15 fps instead.
Often the odd fps number is high enough that the correct 60 fps setting gets used anyways, but other times its low enough to select 30 fps, or even 15 fps in rarer cases.

The problem seems to easier to replicate when the camera is rebooted often, but seems possible even if the reboots are few and far apart.
Simple way to replicate it was to add a “Camera::reboot(0)” call on key press to the “ZED_Multi_Camera” sample.
The unmodified “ZED_Camera_Control” sample also prints odd fps number such as “Video mode: HD720@16” when using the reboot key “b” (but this sample doesn’t print live fps or complain about the odd fps).

Noticed it first when testing the newer ZED SDK 5.1.2.
So far haven’t been able to replicate it on 4.1.0. (on different PCs & cameras) or on 5.0.7 on the same machine. Briefly tried 5.2.0 but it seemed to get hard stuck on reboots too often.

Machine 1
OS: Win 10
CPU: Intel i5-10500
GPU: RTX 2060 SUPER
ZED SDK Version: v5.1.2
Camera: Zed 2

Machine 2
OS: Win 11
CPU: Intel Core Ultra 5 235
GPU: RTX 5060 SUPER
ZED SDK Version: v5.1.2
Camera: Zed 2i

Log sample from the ZED_Multi_Camera sample with added reboot

20968 59.5238
20968 59.8802
20968 59.8802
[2026-02-10 12:22:50 UTC][ZED][INFO] Detected Connection Failure. Trying to recover the camera with sn[SERIAL]…
..[2026-02-10 12:22:51 UTC][ZED][INFO] [Grab] Camera module reset
..[2026-02-10 12:22:54 UTC][ZED][INFO] [Init] Requested FPS (48fps) is not available for the current resolution, using 60 fps instead.
.Tab pressed
.[2026-02-10 12:22:57 UTC][ZED][INFO] [Grab] Automatically recover from image capture failure → SUCCESS
20968 60.241
20968 1.00837
[2026-02-10 12:23:00 UTC][ZED][INFO] Detected Connection Failure. Trying to recover the camera with sn[SERIAL]…
..[2026-02-10 12:23:00 UTC][ZED][INFO] [Grab] Camera module reset
..[2026-02-10 12:23:04 UTC][ZED][INFO] [Init] Requested FPS (11fps) is not available for the current resolution, using 15 fps instead.
..[2026-02-10 12:23:06 UTC][ZED][INFO] [Grab] Automatically recover from image capture failure → SUCCESS
20968 1.00878
20968 0.530955
20968 0.531096

Hi @JereH,

Thanks for reaching out!

Can you share the code snippet you are using to open the cameras? The INFO log suggests that the InitParameters set contains these different fps values, and adjusts to open with a correct one.

We are explicitly setting `camera_fps = 60` in `InitParameters` and always using the same parameters when opening the camera.

InitParameters init_parameters;
init_parameters.camera_resolution = RESOLUTION::HD720;
init_parameters.camera_fps = 60;

auto open_return_state = zed.open(init_parameters);
sl::ERROR_CODE logged = sl::ERROR_CODE::SUCCESS;
while (open_return_state != sl::ERROR_CODE::SUCCESS)
{
if (logged != open_return_state)
{
    logged = open_return_state;
    std::cout << "Failed to open camera: " << open_return_state << std::endl;
    writeErrorLog("Camera Opening", open_return_state);
}
switch (open_return_state) {  
case sl::ERROR_CODE::CAMERA_REBOOTING:  
   sl::sleep_ms(5000);  
   open_return_state = zed.open(init_parameters);  
   break;

default:  
   std::cout << "\rTrying to Reboot..." << endl;  
   if (sl::Camera::reboot(0) == sl::ERROR_CODE::SUCCESS)  
   {  
       std::cout << "\rReboot succesful. Opening camera..." << endl;  
       sl::sleep_ms(1000);  
       // reboot invalidates cameras, create new  
       zed = Camera();  
       open_return_state = zed.open(init_parameters);  
   }  
   break;  
}  
sl::sleep_ms(1000);

}
cout << "Open Succesful" << endl;

You can also reproduce this in the C:\Program Files (x86)\ZED SDK\samples\depth sensing\multi camera sample by adding a manual `Camera::reboot(0)` call. We did not observe this behavior prior to SDK 5.1.2 (e.g., not on 4.1.0 or 5.0.7).