From patchwork Thu Oct 14 17:41:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 14136 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id EBE40C323E for ; Thu, 14 Oct 2021 17:41:24 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 6066B68F4F; Thu, 14 Oct 2021 19:41:24 +0200 (CEST) Received: from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net [217.70.183.199]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id B6CE668541 for ; Thu, 14 Oct 2021 19:41:23 +0200 (CEST) Received: (Authenticated sender: jacopo@jmondi.org) by relay9-d.mail.gandi.net (Postfix) with ESMTPSA id 3F15AFF808; Thu, 14 Oct 2021 17:41:23 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Thu, 14 Oct 2021 19:41:52 +0200 Message-Id: <20211014174208.50509-1-jacopo@jmondi.org> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v4 00/16] IPU3 control info update and HAL frame durations X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" 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