[v2,0/9] ipa: libipa: agc: Take exposure margin into account
mbox series

Message ID 20260925102551.137108-1-barnabas.pocze@ideasonboard.com
Headers show
Series
  • ipa: libipa: agc: Take exposure margin into account
Related show

Message

Barnabás Pőcze Sept. 25, 2026, 10:25 a.m. UTC
The maximum available exposure depends on the frame duration, but this
is not considered by the current agc implementation, it fixes the maximum
exposure time based on whatever configuration was used to configure the
algorithm. This means that in certain situations the full exposure range
might not be used, even in dark scenes.

This a second attempt at adapting https://patchwork.libcamera.org/project/libcamera/list/?series=5590
on the current master branch. But now that the agc handling is largely unified,
fewer changes are needed to make this work on every platform.

So effectively only patch 7 is taken directly, but only the exposure margin
introduction part of it.

This was mainly tested on rkisp1+imx219 and softisp+ov2740.

changes in v2:
  * report `FrameDurationLimits` in metadata
  * add exposure margin to more sensor helpers

v1: https://patchwork.libcamera.org/cover/28111/

Barnabás Pőcze (8):
  ipa: libipa: agc: Keep frame duration limits ordered
  ipa: libipa: agc: Retrieve `FrameDurationLimits` earlier
  ipa: libipa: agc: Report `FrameDurationLimits`
  ipa: libipa: agc: Calculate vblank and frame duration sooner
  ipa: libipa: agc: Take parameters from active state for calculation
  libcamera: pipeline: Set vblank on more platforms
  ipa: libipa: agc: Rework frame duration limit calculation
  ipa: libipa: agc: Take exposure margin into account

Jacopo Mondi (1):
  ipa: camera_sensor_helper: Introduce exposure margin

 src/ipa/ipu3/algorithms/agc.cpp              |   2 +-
 src/ipa/ipu3/ipu3.cpp                        |   3 +-
 src/ipa/libipa/agc.cpp                       | 226 +++++++++++--------
 src/ipa/libipa/agc.h                         |  18 +-
 src/ipa/libipa/camera_sensor_helper.cpp      |  68 ++++++
 src/ipa/libipa/camera_sensor_helper.h        |   2 +
 src/ipa/mali-c55/algorithms/agc.cpp          |   2 +-
 src/ipa/mali-c55/mali-c55.cpp                |   3 +-
 src/ipa/rkisp1/algorithms/agc.cpp            |   2 +-
 src/ipa/rkisp1/rkisp1.cpp                    |   4 +-
 src/ipa/softisp/algorithms/agc.cpp           |   2 +-
 src/ipa/softisp/softisp.cpp                  |   3 +-
 src/libcamera/pipeline/ipu3/ipu3.cpp         |   1 +
 src/libcamera/pipeline/mali-c55/mali-c55.cpp |   1 +
 src/libcamera/pipeline/simple/simple.cpp     |   1 +
 15 files changed, 224 insertions(+), 114 deletions(-)

--
2.55.0

Comments

Robert Mader Sept. 29, 2026, 7:52 a.m. UTC | #1
Hi, thanks for the series!

Unfortunately I currently don't have time to help with reviewing, 
however I gave the series a quick go on some mobile qcom devices on 
pmOS: Pixel 3a,  OnePlus 6, FairPhone 5

By now all their cameras are supported in the pmOS downstream kernels - 
and I'm happy to report that all of them seem to benefit a lot from this 
series! Especially in challenging environments with high contrasts the 
results are way less overexposed - overall the behavior seems to be much 
closer to rkisp1 (on the PinePhone Pro).

The only downsides I could spot are lower frame rates while the 
algorithm adjusts - and occasionally way to bright or dark output, again 
only while the algorithm adjusts. Thus:

Tested-by: Robert Mader <robert.mader@collabora.com>

for the shared and softisp/simple parts.

Best regards

On 25.09.26 12:25, Barnabás Pőcze wrote:
> The maximum available exposure depends on the frame duration, but this
> is not considered by the current agc implementation, it fixes the maximum
> exposure time based on whatever configuration was used to configure the
> algorithm. This means that in certain situations the full exposure range
> might not be used, even in dark scenes.
>
> This a second attempt at adapting https://patchwork.libcamera.org/project/libcamera/list/?series=5590
> on the current master branch. But now that the agc handling is largely unified,
> fewer changes are needed to make this work on every platform.
>
> So effectively only patch 7 is taken directly, but only the exposure margin
> introduction part of it.
>
> This was mainly tested on rkisp1+imx219 and softisp+ov2740.
>
> changes in v2:
>    * report `FrameDurationLimits` in metadata
>    * add exposure margin to more sensor helpers
>
> v1: https://patchwork.libcamera.org/cover/28111/
>
> Barnabás Pőcze (8):
>    ipa: libipa: agc: Keep frame duration limits ordered
>    ipa: libipa: agc: Retrieve `FrameDurationLimits` earlier
>    ipa: libipa: agc: Report `FrameDurationLimits`
>    ipa: libipa: agc: Calculate vblank and frame duration sooner
>    ipa: libipa: agc: Take parameters from active state for calculation
>    libcamera: pipeline: Set vblank on more platforms
>    ipa: libipa: agc: Rework frame duration limit calculation
>    ipa: libipa: agc: Take exposure margin into account
>
> Jacopo Mondi (1):
>    ipa: camera_sensor_helper: Introduce exposure margin
>
>   src/ipa/ipu3/algorithms/agc.cpp              |   2 +-
>   src/ipa/ipu3/ipu3.cpp                        |   3 +-
>   src/ipa/libipa/agc.cpp                       | 226 +++++++++++--------
>   src/ipa/libipa/agc.h                         |  18 +-
>   src/ipa/libipa/camera_sensor_helper.cpp      |  68 ++++++
>   src/ipa/libipa/camera_sensor_helper.h        |   2 +
>   src/ipa/mali-c55/algorithms/agc.cpp          |   2 +-
>   src/ipa/mali-c55/mali-c55.cpp                |   3 +-
>   src/ipa/rkisp1/algorithms/agc.cpp            |   2 +-
>   src/ipa/rkisp1/rkisp1.cpp                    |   4 +-
>   src/ipa/softisp/algorithms/agc.cpp           |   2 +-
>   src/ipa/softisp/softisp.cpp                  |   3 +-
>   src/libcamera/pipeline/ipu3/ipu3.cpp         |   1 +
>   src/libcamera/pipeline/mali-c55/mali-c55.cpp |   1 +
>   src/libcamera/pipeline/simple/simple.cpp     |   1 +
>   15 files changed, 224 insertions(+), 114 deletions(-)
>
> --
> 2.55.0
Barnabás Pőcze Sept. 29, 2026, 8:50 a.m. UTC | #2
2026. 09. 29. 9:52 keltezéssel, Robert Mader írta:
> Hi, thanks for the series!
> 
> Unfortunately I currently don't have time to help with reviewing, however I gave the series a quick go on some mobile qcom devices on pmOS: Pixel 3a,  OnePlus 6, FairPhone 5
> 
> By now all their cameras are supported in the pmOS downstream kernels - and I'm happy to report that all of them seem to benefit a lot from this series! Especially in challenging environments with high contrasts the results are way less overexposed - overall the behavior seems to be much closer to rkisp1 (on the PinePhone Pro).
> 
> The only downsides I could spot are lower frame rates while the algorithm adjusts - and occasionally way to bright or dark output, again only while the algorithm adjusts. Thus:

I think I see something very similar on a yoga x1 gen 7 laptop (ipu6 + ov2740).
But the reason there is that changing controls of the sensor takes an unfortunately
long time, and as far as I can see this is because the i2c communication goes through
usb (la jolla cove adapter).

I'm wondering if you have a bit of time to check e.g. `strace -y -f -tt -T -e ioctl ...`
to see if maybe the issue is similar.


> 
> Tested-by: Robert Mader <robert.mader@collabora.com>
> 
> for the shared and softisp/simple parts.
> 
> Best regards
> 
> On 25.09.26 12:25, Barnabás Pőcze wrote:
>> The maximum available exposure depends on the frame duration, but this
>> is not considered by the current agc implementation, it fixes the maximum
>> exposure time based on whatever configuration was used to configure the
>> algorithm. This means that in certain situations the full exposure range
>> might not be used, even in dark scenes.
>>
>> This a second attempt at adapting https://patchwork.libcamera.org/project/libcamera/list/?series=5590
>> on the current master branch. But now that the agc handling is largely unified,
>> fewer changes are needed to make this work on every platform.
>>
>> So effectively only patch 7 is taken directly, but only the exposure margin
>> introduction part of it.
>>
>> This was mainly tested on rkisp1+imx219 and softisp+ov2740.
>>
>> changes in v2:
>>    * report `FrameDurationLimits` in metadata
>>    * add exposure margin to more sensor helpers
>>
>> v1: https://patchwork.libcamera.org/cover/28111/
>>
>> Barnabás Pőcze (8):
>>    ipa: libipa: agc: Keep frame duration limits ordered
>>    ipa: libipa: agc: Retrieve `FrameDurationLimits` earlier
>>    ipa: libipa: agc: Report `FrameDurationLimits`
>>    ipa: libipa: agc: Calculate vblank and frame duration sooner
>>    ipa: libipa: agc: Take parameters from active state for calculation
>>    libcamera: pipeline: Set vblank on more platforms
>>    ipa: libipa: agc: Rework frame duration limit calculation
>>    ipa: libipa: agc: Take exposure margin into account
>>
>> Jacopo Mondi (1):
>>    ipa: camera_sensor_helper: Introduce exposure margin
>>
>>   src/ipa/ipu3/algorithms/agc.cpp              |   2 +-
>>   src/ipa/ipu3/ipu3.cpp                        |   3 +-
>>   src/ipa/libipa/agc.cpp                       | 226 +++++++++++--------
>>   src/ipa/libipa/agc.h                         |  18 +-
>>   src/ipa/libipa/camera_sensor_helper.cpp      |  68 ++++++
>>   src/ipa/libipa/camera_sensor_helper.h        |   2 +
>>   src/ipa/mali-c55/algorithms/agc.cpp          |   2 +-
>>   src/ipa/mali-c55/mali-c55.cpp                |   3 +-
>>   src/ipa/rkisp1/algorithms/agc.cpp            |   2 +-
>>   src/ipa/rkisp1/rkisp1.cpp                    |   4 +-
>>   src/ipa/softisp/algorithms/agc.cpp           |   2 +-
>>   src/ipa/softisp/softisp.cpp                  |   3 +-
>>   src/libcamera/pipeline/ipu3/ipu3.cpp         |   1 +
>>   src/libcamera/pipeline/mali-c55/mali-c55.cpp |   1 +
>>   src/libcamera/pipeline/simple/simple.cpp     |   1 +
>>   15 files changed, 224 insertions(+), 114 deletions(-)
>>
>> -- 
>> 2.55.0
Robert Mader Sept. 30, 2026, 3:04 p.m. UTC | #3
Hi,

On 29.09.26 10:50, Barnabás Pőcze wrote:
> 2026. 09. 29. 9:52 keltezéssel, Robert Mader írta:
>> Hi, thanks for the series!
>>
>> Unfortunately I currently don't have time to help with reviewing, 
>> however I gave the series a quick go on some mobile qcom devices on 
>> pmOS: Pixel 3a,  OnePlus 6, FairPhone 5
>>
>> By now all their cameras are supported in the pmOS downstream kernels 
>> - and I'm happy to report that all of them seem to benefit a lot from 
>> this series! Especially in challenging environments with high 
>> contrasts the results are way less overexposed - overall the behavior 
>> seems to be much closer to rkisp1 (on the PinePhone Pro).
>>
>> The only downsides I could spot are lower frame rates while the 
>> algorithm adjusts - and occasionally way to bright or dark output, 
>> again only while the algorithm adjusts. Thus:
>
> I think I see something very similar on a yoga x1 gen 7 laptop (ipu6 + 
> ov2740).
> But the reason there is that changing controls of the sensor takes an 
> unfortunately
> long time, and as far as I can see this is because the i2c 
> communication goes through
> usb (la jolla cove adapter).
>
> I'm wondering if you have a bit of time to check e.g. `strace -y -f 
> -tt -T -e ioctl ...`
> to see if maybe the issue is similar.

When running that command with qcam the only results that stand out to 
me are calls to a v4l2 subdev - does the following help you in any way?

[pid  6987] 16:55:50.984189 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=3503, value64=3503}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=1608, value64=1608}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=3503, value64=3503}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=1608, value64=1608}]}) = 0 <0.001261>
[pid  6987] 16:55:51.242984 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, 
{id=V4L2_CID_EXPOSURE, size=0, value=5017, value64=5017}]}) = 0 <0.000876>
[pid  6987] 16:55:51.560279 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
[pid  6987] 16:55:51.612564 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000124>
[pid  6987] 16:55:51.949237 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000441>
[pid  6987] 16:55:52.249029 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001243>
[pid  6987] 16:55:52.562944 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
[pid  6987] 16:55:52.880668 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000282>
[pid  6987] 16:55:53.228395 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000150>
[pid  6987] 16:55:53.518880 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001265>
[pid  6987] 16:55:53.842315 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.002526>
[pid  6987] 16:55:54.150583 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000308>
[pid  6987] 16:55:54.499292 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000141>
[pid  6987] 16:55:54.789556 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=20689, value64=20689}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=20689, value64=20689}]}) = 0 <0.002152>
[pid  6987] 16:55:55.111930 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=20689, value64=20689}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=20671, value64=20671}]}) = 0 <0.001206>
[pid  6987] 16:55:55.424848 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=20689, value64=20689}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=20671, value64=20671}]}) = 0 <0.000667>
[pid  6987] 16:55:55.670075 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=20689, value64=20689}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=20671, value64=20671}]}) = 0 <0.000221>
[pid  6987] 16:55:55.855896 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=24899, value64=24899}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=20671, value64=20671}]}) = 0 <0.000693>
[pid  6987] 16:55:56.082384 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=24899, value64=24899}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=24881, value64=24881}]}) = 0 <0.001346>
[pid  6987] 16:55:56.300857 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=24899, value64=24899}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=24881, value64=24881}]}) = 0 <0.000175>
[pid  6987] 16:55:56.576440 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=24899, value64=24899}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=24881, value64=24881}]}) = 0 <0.000229>
[pid  6987] 16:55:56.823304 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
[pid  6987] 16:55:57.081586 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001915>
[pid  6987] 16:55:57.339273 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000438>
[pid  6987] 16:55:57.688265 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000173>
[pid  6987] 16:55:57.978902 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001334>
[pid  6987] 16:55:58.290605 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
[pid  6987] 16:55:58.612965 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000237>
[pid  6987] 16:55:58.955866 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000171>
[pid  6987] 16:55:59.247693 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001184>
[pid  6987] 16:55:59.566270 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000444>
[pid  6987] 16:55:59.879763 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000261>
[pid  6987] 16:56:00.233259 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000168>
[pid  6987] 16:56:00.524704 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=22501, value64=22501}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=22501, value64=22501}]}) = 0 <0.002233>
[pid  6987] 16:56:00.838552 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=22501, value64=22501}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=22483, value64=22483}]}) = 0 <0.001037>
[pid  6987] 16:56:01.155589 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=22501, value64=22501}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=22483, value64=22483}]}) = 0 <0.000281>
[pid  6987] 16:56:01.406946 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=22501, value64=22501}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, 
{id=V4L2_CID_EXPOSURE, size=0, value=22483, value64=22483}]}) = 0 <0.000269>
[pid  6987] 16:56:01.628006 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, 
{id=V4L2_CID_EXPOSURE, size=0, value=22483, value64=22483}]}) = 0 <0.001145>
[pid  6987] 16:56:01.862885 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001138>
[pid  6987] 16:56:02.101632 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000350>
[pid  6987] 16:56:02.429338 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000416>
[pid  6987] 16:56:02.732639 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001203>
[pid  6987] 16:56:03.057485 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000492>
[pid  6987] 16:56:03.370166 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000159>
[pid  6987] 16:56:03.719593 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000521>
[pid  6987] 16:56:04.006789 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000996>
[pid  6987] 16:56:04.320280 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000088>
[pid  6987] 16:56:04.633028 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000146>
[pid  6987] 16:56:04.976441 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
[pid  6987] 16:56:05.270354 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=252, value64=252}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
[pid  6987] 16:56:05.587319 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=252, value64=252}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=252, value64=252}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000171>
[pid  6987] 16:56:05.905006 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=252, value64=252}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=252, value64=252}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000170>
[pid  6987] 16:56:06.250761 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=252, value64=252}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
[pid  6987] 16:56:06.549971 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001576>
[pid  6987] 16:56:06.866953 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000151>
[pid  6987] 16:56:07.188840 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000131>
[pid  6987] 16:56:07.529850 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000184>
[pid  6987] 16:56:07.820446 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001171>
[pid  6987] 16:56:08.133719 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000211>
[pid  6987] 16:56:08.450089 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000095>
[pid  6987] 16:56:08.797798 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000408>
[pid  6987] 16:56:09.094746 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
[pid  6987] 16:56:09.409220 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000545>
[pid  6987] 16:56:09.725948 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000145>
[pid  6987] 16:56:10.065845 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000119>
[pid  6987] 16:56:10.356911 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=978, value64=978}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=978, value64=978}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000751>
[pid  6987] 16:56:10.680812 ioctl(16</dev/v4l-subdev28>, 
VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, 
controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=978, value64=978}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => 
{controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, 
{id=V4L2_CID_ANALOGUE_GAIN, size=0, value=978, value64=978}, 
{id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000193>


>
>>
>> Tested-by: Robert Mader <robert.mader@collabora.com>
>>
>> for the shared and softisp/simple parts.
>>
>> Best regards
>>
>> On 25.09.26 12:25, Barnabás Pőcze wrote:
>>> The maximum available exposure depends on the frame duration, but this
>>> is not considered by the current agc implementation, it fixes the 
>>> maximum
>>> exposure time based on whatever configuration was used to configure the
>>> algorithm. This means that in certain situations the full exposure 
>>> range
>>> might not be used, even in dark scenes.
>>>
>>> This a second attempt at adapting 
>>> https://patchwork.libcamera.org/project/libcamera/list/?series=5590
>>> on the current master branch. But now that the agc handling is 
>>> largely unified,
>>> fewer changes are needed to make this work on every platform.
>>>
>>> So effectively only patch 7 is taken directly, but only the exposure 
>>> margin
>>> introduction part of it.
>>>
>>> This was mainly tested on rkisp1+imx219 and softisp+ov2740.
>>>
>>> changes in v2:
>>>    * report `FrameDurationLimits` in metadata
>>>    * add exposure margin to more sensor helpers
>>>
>>> v1: https://patchwork.libcamera.org/cover/28111/
>>>
>>> Barnabás Pőcze (8):
>>>    ipa: libipa: agc: Keep frame duration limits ordered
>>>    ipa: libipa: agc: Retrieve `FrameDurationLimits` earlier
>>>    ipa: libipa: agc: Report `FrameDurationLimits`
>>>    ipa: libipa: agc: Calculate vblank and frame duration sooner
>>>    ipa: libipa: agc: Take parameters from active state for calculation
>>>    libcamera: pipeline: Set vblank on more platforms
>>>    ipa: libipa: agc: Rework frame duration limit calculation
>>>    ipa: libipa: agc: Take exposure margin into account
>>>
>>> Jacopo Mondi (1):
>>>    ipa: camera_sensor_helper: Introduce exposure margin
>>>
>>>   src/ipa/ipu3/algorithms/agc.cpp              |   2 +-
>>>   src/ipa/ipu3/ipu3.cpp                        |   3 +-
>>>   src/ipa/libipa/agc.cpp                       | 226 
>>> +++++++++++--------
>>>   src/ipa/libipa/agc.h                         |  18 +-
>>>   src/ipa/libipa/camera_sensor_helper.cpp      |  68 ++++++
>>>   src/ipa/libipa/camera_sensor_helper.h        |   2 +
>>>   src/ipa/mali-c55/algorithms/agc.cpp          |   2 +-
>>>   src/ipa/mali-c55/mali-c55.cpp                |   3 +-
>>>   src/ipa/rkisp1/algorithms/agc.cpp            |   2 +-
>>>   src/ipa/rkisp1/rkisp1.cpp                    |   4 +-
>>>   src/ipa/softisp/algorithms/agc.cpp           |   2 +-
>>>   src/ipa/softisp/softisp.cpp                  |   3 +-
>>>   src/libcamera/pipeline/ipu3/ipu3.cpp         |   1 +
>>>   src/libcamera/pipeline/mali-c55/mali-c55.cpp |   1 +
>>>   src/libcamera/pipeline/simple/simple.cpp     |   1 +
>>>   15 files changed, 224 insertions(+), 114 deletions(-)
>>>
>>> -- 
>>> 2.55.0
>
Barnabás Pőcze Oct. 1, 2026, 9:22 a.m. UTC | #4
2026. 09. 30. 17:04 keltezéssel, Robert Mader írta:
> Hi,
> 
> On 29.09.26 10:50, Barnabás Pőcze wrote:
>> 2026. 09. 29. 9:52 keltezéssel, Robert Mader írta:
>>> Hi, thanks for the series!
>>>
>>> Unfortunately I currently don't have time to help with reviewing, however I gave the series a quick go on some mobile qcom devices on pmOS: Pixel 3a,  OnePlus 6, FairPhone 5
>>>
>>> By now all their cameras are supported in the pmOS downstream kernels - and I'm happy to report that all of them seem to benefit a lot from this series! Especially in challenging environments with high contrasts the results are way less overexposed - overall the behavior seems to be much closer to rkisp1 (on the PinePhone Pro).
>>>
>>> The only downsides I could spot are lower frame rates while the algorithm adjusts - and occasionally way to bright or dark output, again only while the algorithm adjusts. Thus:
>>
>> I think I see something very similar on a yoga x1 gen 7 laptop (ipu6 + ov2740).
>> But the reason there is that changing controls of the sensor takes an unfortunately
>> long time, and as far as I can see this is because the i2c communication goes through
>> usb (la jolla cove adapter).
>>
>> I'm wondering if you have a bit of time to check e.g. `strace -y -f -tt -T -e ioctl ...`
>> to see if maybe the issue is similar.
> 
> When running that command with qcam the only results that stand out to me are calls to a v4l2 subdev - does the following help you in any way?

Yes, that's what I was thinking of. But those seem fast enough. Although I can see up to 0.002233,
which is more than 2 ms, which I think kind of enters the not ideal territory.

In my case I can see things like

   [pid  5907] ioctl(11, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=2, controls=[{id=V4L2_CID_EXPOSURE, size=0, value=2039, value64=2039}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=1184, value64=1184}]} => {controls=[{id=V4L2_CID_EXPOSURE, size=0, value=2039, value64=2039}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=1184, value64=1184}]}) = 0 <0.109058>

so more than 0.1 seconds for the ioctl.


> 
> [pid  6987] 16:55:50.984189 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=3503, value64=3503}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=1608, value64=1608}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=3503, value64=3503}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=1608, value64=1608}]}) = 0 <0.001261>
> [pid  6987] 16:55:51.242984 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, {id=V4L2_CID_EXPOSURE, size=0, value=5017, value64=5017}]}) = 0 <0.000876>
> [pid  6987] 16:55:51.560279 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
> [pid  6987] 16:55:51.612564 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000124>
> [pid  6987] 16:55:51.949237 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=544, value64=544}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000441>
> [pid  6987] 16:55:52.249029 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001243>
> [pid  6987] 16:55:52.562944 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
> [pid  6987] 16:55:52.880668 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000282>
> [pid  6987] 16:55:53.228395 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=465, value64=465}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000150>
> [pid  6987] 16:55:53.518880 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001265>
> [pid  6987] 16:55:53.842315 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.002526>
> [pid  6987] 16:55:54.150583 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000308>
> [pid  6987] 16:55:54.499292 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=23, value64=23}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000141>
> [pid  6987] 16:55:54.789556 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=20689, value64=20689}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=20689, value64=20689}]}) = 0 <0.002152>
> [pid  6987] 16:55:55.111930 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=20689, value64=20689}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=20671, value64=20671}]}) = 0 <0.001206>
> [pid  6987] 16:55:55.424848 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=20689, value64=20689}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=20671, value64=20671}]}) = 0 <0.000667>
> [pid  6987] 16:55:55.670075 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=20689, value64=20689}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=19157, value64=19157}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=20671, value64=20671}]}) = 0 <0.000221>
> [pid  6987] 16:55:55.855896 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=24899, value64=24899}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=20671, value64=20671}]}) = 0 <0.000693>
> [pid  6987] 16:55:56.082384 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=24899, value64=24899}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=24881, value64=24881}]}) = 0 <0.001346>
> [pid  6987] 16:55:56.300857 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=24899, value64=24899}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=24881, value64=24881}]}) = 0 <0.000175>
> [pid  6987] 16:55:56.576440 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=24899, value64=24899}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=23367, value64=23367}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=24881, value64=24881}]}) = 0 <0.000229>
> [pid  6987] 16:55:56.823304 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
> [pid  6987] 16:55:57.081586 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001915>
> [pid  6987] 16:55:57.339273 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000438>
> [pid  6987] 16:55:57.688265 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=302, value64=302}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000173>
> [pid  6987] 16:55:57.978902 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001334>
> [pid  6987] 16:55:58.290605 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
> [pid  6987] 16:55:58.612965 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000237>
> [pid  6987] 16:55:58.955866 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=355, value64=355}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000171>
> [pid  6987] 16:55:59.247693 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001184>
> [pid  6987] 16:55:59.566270 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000444>
> [pid  6987] 16:55:59.879763 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000261>
> [pid  6987] 16:56:00.233259 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=33, value64=33}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000168>
> [pid  6987] 16:56:00.524704 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=22501, value64=22501}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=22501, value64=22501}]}) = 0 <0.002233>
> [pid  6987] 16:56:00.838552 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=22501, value64=22501}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=22483, value64=22483}]}) = 0 <0.001037>
> [pid  6987] 16:56:01.155589 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=22501, value64=22501}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=22483, value64=22483}]}) = 0 <0.000281>
> [pid  6987] 16:56:01.406946 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=22501, value64=22501}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=20969, value64=20969}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=0, value64=0}, {id=V4L2_CID_EXPOSURE, size=0, value=22483, value64=22483}]}) = 0 <0.000269>
> [pid  6987] 16:56:01.628006 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, {id=V4L2_CID_EXPOSURE, size=0, value=22483, value64=22483}]}) = 0 <0.001145>
> [pid  6987] 16:56:01.862885 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001138>
> [pid  6987] 16:56:02.101632 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000350>
> [pid  6987] 16:56:02.429338 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=120, value64=120}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000416>
> [pid  6987] 16:56:02.732639 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001203>
> [pid  6987] 16:56:03.057485 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000492>
> [pid  6987] 16:56:03.370166 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000159>
> [pid  6987] 16:56:03.719593 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=234, value64=234}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000521>
> [pid  6987] 16:56:04.006789 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000996>
> [pid  6987] 16:56:04.320280 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000088>
> [pid  6987] 16:56:04.633028 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000146>
> [pid  6987] 16:56:04.976441 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=317, value64=317}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
> [pid  6987] 16:56:05.270354 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=252, value64=252}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
> [pid  6987] 16:56:05.587319 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=252, value64=252}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=252, value64=252}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000171>
> [pid  6987] 16:56:05.905006 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=252, value64=252}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=252, value64=252}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000170>
> [pid  6987] 16:56:06.250761 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=252, value64=252}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
> [pid  6987] 16:56:06.549971 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001576>
> [pid  6987] 16:56:06.866953 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000151>
> [pid  6987] 16:56:07.188840 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000131>
> [pid  6987] 16:56:07.529850 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=198, value64=198}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000184>
> [pid  6987] 16:56:07.820446 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.001171>
> [pid  6987] 16:56:08.133719 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000211>
> [pid  6987] 16:56:08.450089 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000095>
> [pid  6987] 16:56:08.797798 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=136, value64=136}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000408>
> [pid  6987] 16:56:09.094746 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}] <unfinished ...>
> [pid  6987] 16:56:09.409220 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000545>
> [pid  6987] 16:56:09.725948 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000145>
> [pid  6987] 16:56:10.065845 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=54, value64=54}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000119>
> [pid  6987] 16:56:10.356911 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=978, value64=978}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=978, value64=978}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000751>
> [pid  6987] 16:56:10.680812 ioctl(16</dev/v4l-subdev28>, VIDIOC_S_EXT_CTRLS, {ctrl_class=0 /* V4L2_CTRL_CLASS_??? */, count=3, controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=978, value64=978}, {id=V4L2_CID_EXPOSURE, size=0, value=30230, value64=30230}]} => {controls=[{id=V4L2_CID_VBLANK, size=0, value=28698, value64=28698}, {id=V4L2_CID_ANALOGUE_GAIN, size=0, value=978, value64=978}, {id=V4L2_CID_EXPOSURE, size=0, value=30212, value64=30212}]}) = 0 <0.000193>
> 
> 
>>
>>>
>>> Tested-by: Robert Mader <robert.mader@collabora.com>
>>>
>>> for the shared and softisp/simple parts.
>>>
>>> Best regards
>>>
>>> On 25.09.26 12:25, Barnabás Pőcze wrote:
>>>> The maximum available exposure depends on the frame duration, but this
>>>> is not considered by the current agc implementation, it fixes the maximum
>>>> exposure time based on whatever configuration was used to configure the
>>>> algorithm. This means that in certain situations the full exposure range
>>>> might not be used, even in dark scenes.
>>>>
>>>> This a second attempt at adapting https://patchwork.libcamera.org/project/libcamera/list/?series=5590
>>>> on the current master branch. But now that the agc handling is largely unified,
>>>> fewer changes are needed to make this work on every platform.
>>>>
>>>> So effectively only patch 7 is taken directly, but only the exposure margin
>>>> introduction part of it.
>>>>
>>>> This was mainly tested on rkisp1+imx219 and softisp+ov2740.
>>>>
>>>> changes in v2:
>>>>    * report `FrameDurationLimits` in metadata
>>>>    * add exposure margin to more sensor helpers
>>>>
>>>> v1: https://patchwork.libcamera.org/cover/28111/
>>>>
>>>> Barnabás Pőcze (8):
>>>>    ipa: libipa: agc: Keep frame duration limits ordered
>>>>    ipa: libipa: agc: Retrieve `FrameDurationLimits` earlier
>>>>    ipa: libipa: agc: Report `FrameDurationLimits`
>>>>    ipa: libipa: agc: Calculate vblank and frame duration sooner
>>>>    ipa: libipa: agc: Take parameters from active state for calculation
>>>>    libcamera: pipeline: Set vblank on more platforms
>>>>    ipa: libipa: agc: Rework frame duration limit calculation
>>>>    ipa: libipa: agc: Take exposure margin into account
>>>>
>>>> Jacopo Mondi (1):
>>>>    ipa: camera_sensor_helper: Introduce exposure margin
>>>>
>>>>   src/ipa/ipu3/algorithms/agc.cpp              |   2 +-
>>>>   src/ipa/ipu3/ipu3.cpp                        |   3 +-
>>>>   src/ipa/libipa/agc.cpp                       | 226 +++++++++++--------
>>>>   src/ipa/libipa/agc.h                         |  18 +-
>>>>   src/ipa/libipa/camera_sensor_helper.cpp      |  68 ++++++
>>>>   src/ipa/libipa/camera_sensor_helper.h        |   2 +
>>>>   src/ipa/mali-c55/algorithms/agc.cpp          |   2 +-
>>>>   src/ipa/mali-c55/mali-c55.cpp                |   3 +-
>>>>   src/ipa/rkisp1/algorithms/agc.cpp            |   2 +-
>>>>   src/ipa/rkisp1/rkisp1.cpp                    |   4 +-
>>>>   src/ipa/softisp/algorithms/agc.cpp           |   2 +-
>>>>   src/ipa/softisp/softisp.cpp                  |   3 +-
>>>>   src/libcamera/pipeline/ipu3/ipu3.cpp         |   1 +
>>>>   src/libcamera/pipeline/mali-c55/mali-c55.cpp |   1 +
>>>>   src/libcamera/pipeline/simple/simple.cpp     |   1 +
>>>>   15 files changed, 224 insertions(+), 114 deletions(-)
>>>>
>>>> -- 
>>>> 2.55.0
>>