[{"id":17989,"web_url":"https://patchwork.libcamera.org/comment/17989/","msgid":"<20210705154825.hpfvzafpobewzmwb@uno.localdomain>","date":"2021-07-05T15:48:25","subject":"Re: [libcamera-devel] [RFC PATCH v3 04/16] android,\n\tcontrols: Add and plumb MaxLatency control","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Paul,\n\nOn Fri, Jul 02, 2021 at 07:37:48PM +0900, Paul Elder wrote:\n> Add a MaxLatency control, and plumb it into the HAL accordingly.\n>\n> Bug: https://bugs.libcamera.org/show_bug.cgi?id=50\n> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n> ---\n> Changes in v3:\n> - use v3 setMetadata\n> - add comment to explain 4\n> - remove todo\n>\n> Changes in v2:\n> - use new setMetadata\n> - rebase on camera capabilities refactor\n> ---\n>  src/android/camera_capabilities.cpp | 13 +++++++++++--\n>  src/libcamera/control_ids.yaml      | 10 ++++++++++\n>  2 files changed, 21 insertions(+), 2 deletions(-)\n>\n> diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp\n> index 1d4c44ce..530167de 100644\n> --- a/src/android/camera_capabilities.cpp\n> +++ b/src/android/camera_capabilities.cpp\n> @@ -870,8 +870,17 @@ int CameraCapabilities::initializeStaticMetadata()\n>  \t}\n>\n>  \t/* Sync static metadata. */\n> -\tint32_t maxLatency = ANDROID_SYNC_MAX_LATENCY_UNKNOWN;\n> -\tstaticMetadata_->addEntry(ANDROID_SYNC_MAX_LATENCY, maxLatency);\n> +\tint32_t maxLatency = setMetadata<int32_t, int32_t>(\n> +\t\tstaticMetadata_.get(), ANDROID_SYNC_MAX_LATENCY,\n> +\t\tcontrolsInfo, &controls::draft::MaxLatency,\n> +\t\tControlRange::Def,\n> +\t\t(int32_t)ANDROID_SYNC_MAX_LATENCY_UNKNOWN);\n\nThat's tough to read, but probably better than repeating the checks in\nevery metadata.\n\n> +\tLOG(HAL, Info) << \"Max sync latency is \" << maxLatency;\n> +\t/* CTS allows a sync latency of up to 4 for burst capture capability */\n> +\tif (maxLatency < 0 || 4 < maxLatency)\n> +\t\tcapabilities.erase(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE);\n\nAccording to my previous comments, I would centralize these checks in\none function and do the other way around: add instead of erasing.\n\n> +\tif (maxLatency != 0)\n> +\t\thwLevels.erase(ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_FULL);\n\nSame\n\n>\n>  \t/* Flash static metadata. */\n>  \tchar flashAvailable = ANDROID_FLASH_INFO_AVAILABLE_FALSE;\n> diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml\n> index d92f29f5..9d4638ae 100644\n> --- a/src/libcamera/control_ids.yaml\n> +++ b/src/libcamera/control_ids.yaml\n> @@ -622,6 +622,16 @@ controls:\n>          detection, additional format conversions etc) count as an additional\n>          pipeline stage.\n>\n> +  - MaxLatency:\n> +      type: int32_t\n> +      draft: true\n> +      description: |\n> +        The maximum number of frames that can occur after a request (different\n> +        than the previous) has been submitted, and before the result's state\n> +        becomes synchronized. A value of -1 indicates unknown latency, and 0\n> +        indicates per-frame control. Currently identical to\n> +        ANDROID_SYNC_MAX_LATENCY.\n> +\n>    - TestPatternMode:\n>        type: int32_t\n>        draft: true\n> --\n> 2.27.0\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id C51D7C0100\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  5 Jul 2021 15:47:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4E9FE684F9;\n\tMon,  5 Jul 2021 17:47:38 +0200 (CEST)","from relay10.mail.gandi.net (relay10.mail.gandi.net\n\t[217.70.178.230])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B64C46050A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  5 Jul 2021 17:47:36 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay10.mail.gandi.net (Postfix) with ESMTPSA id 43AA5240003;\n\tMon,  5 Jul 2021 15:47:35 +0000 (UTC)"],"Date":"Mon, 5 Jul 2021 17:48:25 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Paul Elder <paul.elder@ideasonboard.com>","Message-ID":"<20210705154825.hpfvzafpobewzmwb@uno.localdomain>","References":"<20210702103800.41291-1-paul.elder@ideasonboard.com>\n\t<20210702103800.41291-5-paul.elder@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210702103800.41291-5-paul.elder@ideasonboard.com>","Subject":"Re: [libcamera-devel] [RFC PATCH v3 04/16] android,\n\tcontrols: Add and plumb MaxLatency control","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]