Please provide the following info (tick the boxes after creating this topic): Software Version
DRIVE OS 6.0.10.0
DRIVE OS 6.0.8.1
DRIVE OS 6.0.6
DRIVE OS 6.0.5
DRIVE OS 6.0.4 (rev. 1)
DRIVE OS 6.0.4 SDK
other
Target Operating System
Linux
QNX
other
Hardware Platform
DRIVE AGX Orin Developer Kit (940-63710-0010-300)
DRIVE AGX Orin Developer Kit (940-63710-0010-200)
DRIVE AGX Orin Developer Kit (940-63710-0010-100)
DRIVE AGX Orin Developer Kit (940-63710-0010-D00)
DRIVE AGX Orin Developer Kit (940-63710-0010-C00)
DRIVE AGX Orin Developer Kit (not sure its number)
other
SDK Manager Version
2.1.0
other
Host Machine Version
native Ubuntu Linux 20.04 Host installed with SDK Manager
native Ubuntu Linux 20.04 Host installed with DRIVE OS Docker Containers
native Ubuntu Linux 18.04 Host installed with DRIVE OS Docker Containers
other
Issue Description
Is it possible to have some sort of finer grain control to start sets of cameras within the same device block individually? I have 1 INvSIPLCamera instance for each camera in each device block, and try to start 2 of the cameras, but it fails at the INvSIPLCamera->Init() step.
I understand that there are possible limitations in the deserializer being able to setup the link individually. For MAX9296 on another (non-drive) platform, 2 cameras are tied together so we could bring up / down 2 cameras and need not bring up / down 4 at the same time. What about MAX96712 and the implementation on NVIDIA Drive?
Yeap, I set-up each camera as 1x INvSIPLCamera instance applying the mask for each camera. For example if we are on Group A, with the camera-id [0, 1, 2, 3], I have the mask as {1, 0, 0, 0} for camera 0, and mask {4096, 0, 0, 0} for camera 3.
Here’s the pseudo code. Both cameras are the same, so we are using the same platform config. The second call to INvSIPLCamera->Init() fails with NVSIPL_STATUS_ERROR.
// I'm testing only with 2 camera_ids now.
for (each camera_id) {
auto sipl_query = INvSIPLQuery::GetInstance();
sipl_query->ParseDatabase());
sipl_query->GetPlatformCfg(platform_name, platform_cfg);
sipl_query->ApplyMask(platform_cfg, masks);
auto sipl_camera = INvSIPLCamera::GetInstance();
sipl_camera->SetPlatformCfg(&platform_cfg, notification_queues[camera_id]);
sipl_camera->SetPipelineCfg(camera_id, pipeline_cfg, queues[camera_id]);
sipl_cameras.emplace_back(std::move(sipl_camera));
}
for (auto& camera : sipl_cameras) {
camera->Init();
}
Yeap, the best case for us is start/stop of individual cameras in the same device block, but we could also do with group of 2 if that is the deserializer limitation.
It is not possible. You need to have
one process → one SIPL client → one INvSIPLCamera instance → device block(s) → deserializer(s). So init() can’t be done twice.
Hey @SivaRamaKrishnaNV, on a separate platform with MAX96712, we are able to start / stop cameras individually. For Orin / Thor, it is not possible to do so, is that due to the limitation of the NvSIPL API?
Using DisableLink() and enableLink() you can disable and enable camera link in runtime.
I don’t see any issue with the camera module I have. I could use dl, el, elr options in nvsipl_camera with out any issue. The issue could be specific to these camera modules. Did you check with sensor vendor on the supported DRIVE OS version and also inform about these issues.
Please file a new topic for new issues as the original query is addressed.
Hi @SivaRamaKrishnaNV, thanks for the response and clarification. Let us check with the vendor and I will file a new topic once we have more information!