Hi everyone. I’m running a UCTRONICS Arducam 20MP IMX283 UVC camera on a Jetson Orin Nano, accessed through OpenCV2 using the V4L plugin. I need full-resolution readout with full control over exposure, because I’m doing my own custom AE metering.
The issue is that V4L exposes gain and exposure controls with min/max ranges, but in manual mode I can’t seem to reach the full range that auto exposure uses. The manual minimum values I can set through V4L are exposure = 5 and gain = 100. But on a very bright scene, switching to auto exposure darkens the image further than my manual minimum of 5 does. Manually setting gain to its minimum doesn’t reproduce that darkening either. The opposite happens in dark scenes too - auto exposure can expose more than the manual maximum allows.
Has anyone run into this? I really need the full manual exposure range for what I’m building.
Welcome to the forum. That does sound like the manual range exposed through V4L is narrower than what the camera’s AE engine can actually set. Before we dig in, could you share the exact min/max values V4L reports for exposure and gain? Also, what resolution and framerate are you currently running when you see this? Sometimes the control ranges are tied to the active mode.
Sure. I pulled the list of available controls and their min/max ranges. I set manual exposure to the minimum (5) and gain to 100, and the camera accepted both settings. With a very bright scene I switched to auto exposure and watched it darken further. Then I set exposure back to 5 manually and the image brightened again. Setting gain to its minimum didn’t change anything, so it really looks like auto can hit a lower exposure than I can set manually.
Thanks, that test is really helpful. It matches what I suspected: auto mode appears to reach a wider exposure range than what V4L exposes in manual mode (manual min exposure = 5, manual min gain = 100). Same idea at the other end - in dark scenes auto can push exposure further than your manual max.
As a next step, let’s rule out the current mode being part of the problem. Can you test these three modes at 30fps and re-check whether the manual range changes?
1280×720@30fps
1920×1080@30fps
2720×1536@30fps
Then in the same scene, compare what manual exposure can reach vs what auto exposure reaches.
Thanks. To be clear, I need readout at full resolution with full exposure control from inside OpenCV2’s V4L plugin. Where exactly do I set those resolutions? I’m not sure how to set the framerate on this camera, and does the 30fps part actually help when I ultimately need full resolution?
Sorry, I should have given more detail earlier. You can set the framesize and framerate using qv4l2 or the arducam_demo.py script. The docs walk through qv4l2 here:
Basically: use qv4l2 or arducam_demo.py to set the framesize and framerate on the camera, then test the three resolutions@30fps from my last message: 1280×720@30fps, 1920×1080@30fps, and 2720×1536@30fps. The point is to see whether manual exposure can reach the same range as auto exposure when the camera is in a known-good mode.
Got it, I’ll set it up with qv4l2 and run through those three modes. Just to double-check - after I set each mode, I should re-test manual exposure against auto in the same scene and note whether the manual minimum is still stuck at 5, right? I’ll report back what I find.
Right, that’s exactly the test. To summarize where things stand: the camera’s auto exposure clearly reaches values outside the manual V4L range (manual min exposure = 5, manual min gain = 100), so it looks like the manual control range exposed through V4L is narrower than what the sensor/AE can actually do. We haven’t found a fix yet, but the next step is to configure framesize and framerate via qv4l2 or arducam_demo.py and test the three 30fps modes. That will tell us whether the manual exposure range changes by mode, or whether it’s a hard limit in how V4L exposes the controls. Let us know what you see.