Long exposure time with Argus

Hello!

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.

Hey!

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.

however,
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.
thanks

Hi Jerry, do you know if there are any plans at Nvidia to either extend Argus, or build another API to better support still capture workflows (ie. arbitrary long exposures up to the sensor limits)? It appears as though Argus (and V4L2) are heavily designed around a streaming frame model, and that makes it harder to build still photography applications. Streaming frames is great for showing a live preview, but when it comes to actually capturing a frame, it ideally would have much more discrete control of the frame timing. The folks at Raspberry have made a lot of progress with long exposure support this past year, and it would be great to have similar on the Jetson platform. Let me know if there’s a better place to post this feature request. Thanks!

hello dustinkerstein,

is your use-case also to request for a long exposure time?
the status remain the same due to an exposure limit (400ms) inside the drivers.

you can initial another new discussion thread to submit a feature request,
thanks

Oh yeah, it must be because of driver limitation. When I managed to fix this issue I also had my own custom camera driver.

Yes, my use-case requires a long exposure time (ideally up to the sensor limit of the IMX477 which I think is ~239 seconds). I will create a new feature request post now. Thanks!

Posted here - [Feature Request] Long exposures, up to actual sensor limit, for supported CSI cameras (and other still photography related requests)