How to dynamically change camera parameters with Argus

I have followed your examples on multimedia API on Jetpack 4.4 to use camera.

I succeed in the operation.

I would like now to change camera parameters during it captures pictures.

During the initialization I can change sourceSettings and controlSettings with success.
But when the camera begin to work, functions like sourceSettings->setExposureTimeRange() still returns STATUS_OK but the behavior of the camera doens’t change at all even we try very different values.

In order to change settings, during the initialization, we keep the Argus::Request object as a member of our class and in the change parameter thread we call (in pseudo code) :

Argus::IRequest * iRequest = _requestSavePreviously²;
Argus:: ISourceSettings * sourceSettings = iRequest->getSourceSettings();

sourceSettings->setExposureTimeRange(Argus::Range<uint64_t>(new values)

I have also try to keep the sourceSettings object instead of request to prevent from creating a new one but it have the same effect.

Is there a method to call to “synchronize” configuration with the camera ?

How do you check the behavior doesn’t change?
Did you try the min and max as the same to check?

To check that it doesn’t change, I change dynamically parameters and nothing happens but when I restart my software with these new parameters image has fully changed. For example I change wb mode that makes my picture more blue or yellow depends on the light. Or I radically change exposure range from 100’000 - 200’000 to 20’000’000 - 30’000’000. It’s making my picture okay to black screen.

The first solution I have found for the moment is to stop repeating my request on new camera parameter, applying my order to my request and repeat again.
It seems to work. Not easy to use so if you have any other solution It would be great.

The clue that helps me is the comments in the capture() method.

/**
     * Submits a single capture request to the request queue.
     * The runtime will queue a copy of the request. The client can
     * submit the same request instance in a future call.
     * The request will be copied by the runtime.

If the repeat() function has the same behavior, the request is copied and all modification I can make after having call to repeat are not taken into account. Am I right ?

Is it possible to have an accessor to the running request ?

I would suggest to check with the argus_camera sample APP that have GUI can set those setting to verify it.

I have made a little search in the source code, but it is really huge and I havn’t find where these call are made.