Is it possible to have argus to only send necessary commands over I2C to speed up starting?

Hi,

We have a jetson orin nano with 5~6 cameras. And we want to speed up camera start up speed.

The cameras are connected with MIPI and I2C, and we use nvargus lib in C++ to access the cameras. Each camera is accessed from it’s own thread.

During our observations: it seems when we call

iCaptureSession->repeat(requestPtr);

The function returns quickly. But it seems the request is actually queued and the nvargus will send I2C command one camera after another, and it takes 260ms to send all commands.

We investigated the detail of the communication with 1 camera:

We want to manual control the camera so we run the following command before we start the camera: iCaptureSession->repeat

        iAutoControlSettings->setIspDigitalGainRange(Argus::Range<float>(1, 1));
        //10*1000*1000
        iSourceSettings->setExposureTimeRange(Argus::Range<uint64_t>(preSetExposure, preSetExposure));
        //1.13
        iSourceSettings->setGainRange(Argus::Range<float>(preSetGain, preSetGain));

But it seems in the driver level, the member of tegracam_ctrl_ops, set_gain, set_frame_rate got run multiple times. The gain and framearte was set back and forth multiple times with a 35ms delay.

Is it possible to have nvargus to set everything all at once before turn on the camera?

The AE alg need to set the gain/exposure depend on the scene lux.
After the AE converge the i2c commands should be reduce.

Thanks

Thank you for the explanation.

The AE algorithm seems to be exactly what I want to disable.

I tried to run

        iAutoControlSettings->setAeLock(true); 
        iAutoControlSettings->setAwbLock(true); 

But this does not affect the I2C communication. Is it possible to disable the AE algorithm and just send a fixed value?

Set the exposure and gain to fixed value by setExposureTimeRange()/SetGainRange() to try. Set the min equal to max.

That is exactly what I did in the beginning

        iAutoControlSettings->setIspDigitalGainRange(Argus::Range<float>(1, 1));
        //10*1000*1000
        iSourceSettings->setExposureTimeRange(Argus::Range<uint64_t>(preSetExposure, preSetExposure));
        //1.13
        iSourceSettings->setGainRange(Argus::Range<float>(preSetGain, preSetGain));

If I don’t do it, the I2C will keep sending gain and exposure adjustment commands.

Can’t disable the AE alg. Suppose you can set proper sensor REG and ignore all of the gain/exposure set by argus the effect should be like disable the AE.

Thanks

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.