[libcamera-devel,v4,00/16] IPU3 control info update and HAL frame durations
mbox series

Message ID 20211014174208.50509-1-jacopo@jmondi.org
Headers show
Series
  • IPU3 control info update and HAL frame durations
Related show

Message

Jacopo Mondi Oct. 14, 2021, 5:41 p.m. UTC
As the patch subject suggests, this series is composed of two main parts, which
concur in correctly handling the frame durations reported to the Android HAL.

The series starts by allowing the IPU3 pipeline handler to select the optimal
sensor size to feed the ImgU with. Umang's series is a requirement for this
patch, otherwise the ImgU configuration fails.

Patches 2 and 3 update the Camera's ControlInfoMap in response to a
Camera::configure() call, by updating the controls limits in the ph and the IPA.

From patch 4 on the Android HAL parts begins by collecting per-stream frame
durations. As the frame durations are updated as part of the Camera's
ControlInfoMap limits update it is necessary to configure the camera during the
HAL startup. A few cleanup patches follows, including the correct handling of
STALL durations

Patch 10 introduces a filtering criteria for YUV streams: only streams that can
produce 30 FPS can be registered for preview. I was not able to find this
clearly specified in documentation but the requirement has been confirmed by the
cros camera team and in the Intel HAL implementation.

After two more cleanup patches the way
ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES gets populated is changed to
comply with the documentation. Note that this does not align with the Intel HAL
implementation which registers 8 values instead of 4.

v4 rebased on top of Laurent's
[PATCH 0/2] libcamera: Add new helpers to the Size class
to use the newly introduced geometry helpers.

CTS:

=============== Summary ===============
Total Run time: 19m 32s
1/1 modules completed
Total Tests       : 231
PASSED            : 228
FAILED            : 3
============== End of Results ==============

android.hardware.camera2.cts.CameraDeviceTest#testPrepare
fail: junit.framework.AssertionFailedError: Wait for a capture result timed out in 3000ms

android.hardware.camera2.cts.PerformanceTest#testMultipleCapture
fail: junit.framework.AssertionFailedError: Wait for a capture result timed out in 3000ms

android.hardware.cts.CameraGLTest#testSetPreviewTextureTextureCallback
fail: junit.framework.AssertionFailedError
Failed becaus of:
	ERROR Camera camera.cpp:1031 Request contains no buffers
Failure is expected

The first two failing tests are due to errors on the video device
which I haven't seen before:
ERROR V4L2 v4l2_videodevice.cpp:1591 /dev/video0[37:cap]: Failed to queue buffer 0: Input/output error

I'll make sure they are flukes before merging the series.

Thanks
   j

v3->v4:
- Rebased on Laurent's geometry helpers used in 1/16
- Change IF crop max name as suggested by Laurent
- Collect tags

v2->v3:
- Limit the reported FPS range in the HAL only
- Record the reson for filtering < 30 FPS preview resolutions
- Address review comments and collect tags

v1->v2:
- add a patch to centralize the ImgU sizes definition
- small grammar/spelling fixes here and there
- Collect the actual minFPS when populating AE_AVAILABLE_FPS_RANGE instead of
  limiting it to 15, as suggested by Paul.

Thanks
   j

Jacopo Mondi (16):
  libcamera: ipu3: Use the optimal sensor size
  libcamera: ipu3: Centralize ImgU sizes definition
  libcamera: ipu3: Rationalize constant expressions names
  libcamera: ipu3: Split controls init/update
  ipa: ipu3: Update camera controls in configure()
  android: capabilities: Collect per-stream frame durations
  android: capabilities: Initialize camera state when building
    properties
  android: capabilties: Assume controls::FrameDurationLimits is
    supported
  android: capabilities: Use per-configuration durations
  android: capabilties: Correctly populate STALL durations
  android: capabilities: Collect absolute max frame durations
  android: Filter preview streams on FPS
  android: capabilities: Print output stream list
  android: Populate streams and duration in the same loop
  android: capabilties: Fix
    ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
  android: capabilities: Cap frame rate to 30 FPS

 include/libcamera/ipa/ipu3.mojom     |   3 +-
 src/android/camera_capabilities.cpp  | 238 ++++++++++++++++++---------
 src/android/camera_capabilities.h    |   3 +
 src/ipa/ipu3/ipu3.cpp                |  82 ++++++---
 src/libcamera/pipeline/ipu3/cio2.cpp |   6 +-
 src/libcamera/pipeline/ipu3/cio2.h   |   2 +-
 src/libcamera/pipeline/ipu3/imgu.cpp |  86 ++++------
 src/libcamera/pipeline/ipu3/imgu.h   |  23 +++
 src/libcamera/pipeline/ipu3/ipu3.cpp | 142 +++++++++-------
 9 files changed, 370 insertions(+), 215 deletions(-)

--
2.33.0