Long exposure time with Argus


I have been trying to capture long exposure (up to 10 second) images via Libargus Camera API. The maximum exposure time and frame duration time limit I can set is about ~630ms (Both via my own Libargus program and the Argus GUI). I’m using IMX283 sensor. How is it possible to override this limit? The sensor is capable of taking long exposure shots. It seems that the Libargus is the limiting factor here.

Thank you!

What are the reported ranges for exposure and framerate by your driver:

v4l2-ctl -d /dev/video0 -l | grep exposure
v4l2-ctl -d /dev/video0 -l | grep frame_rate

Such a 10s exposure means a very low framerate (< 0.1 fps).
Does this work ?

# Try to set to 0.1 fps
v4l2-ctl -d /dev/video0 --set-ctrl=frame_rate=100000

# Verify:
v4l2-ctl -d /dev/video0 --get-ctrl=frame_rate

# If ok, try to set exposure to 9s:
v4l2-ctl -d /dev/video0 --set-ctrl=exposure=9000000

# Verify:
v4l2-ctl -d /dev/video0 --get-ctrl=exposure

# If ok, you may try to capture one frame in raw mode with v4l2-ctl:
v4l2-ctl -d /dev/video0 --set-ctrl=bypass_mode=0 --stream-mmap --stream-count=1 --stream-to=test_exposure.raw

If this works fine, then there may be something else with Argus.


I’m going to elaborate more on this - so I have a Raspberry Pi HQ camera attached to my Jetson Nano Dev kit, I have installed RidgeRun IMX477 driver and edited the device tree so it would allow longer exposures (default is 683709 us) but I think that the problem is with framerate limits. The framerate is an integer value, meaning, that I can’t get it below 1 FPS.

Even though I can set the exposure time longer after I change device tree settings for IMX477 sensor, I’m limited by minimum framerate, which would mean that the max exposure time I can get is 1 second. Do you know how to edit the device tree so it would allow for decimal point framerate?

So the settings in device tree (with default values) that have something to do with framerate are:
framerate_factor = “1000000”;
exposure_factor = “1000000”;
min_framerate = “1000000”;
max_framerate = “30000000”;
step_framerate = “1”;
default_framerate = “30000000”;
min_exp_time = “13”;
max_exp_time = “683709”;
step_exp_time = “1”;
default_exp_time = “2495”;

So the main thing is to get the framerate to be with a decimal number, I think

This reaches my threshold of knowledge. I have no experience yet with this sensor.
Probably someone from NVIDIA or RidgeRun would better advise.

hello therealmatiss,

may I know what’s your actual use-case to capture 10-sec exposure image via Argus?
according to the rules of rolling shutter, you may configure sensor frame-rate as 0.1-fps.

it’s frame buffering between each frames and getting queued-up for frame complete.
there’s exposure limit (400ms) inside the Argus drivers.

please also refer to L4T release notes for details.
for example,
issue-2032213, the maximum value that getExposureTimeRange() is 400ms.