[{"id":14276,"web_url":"https://patchwork.libcamera.org/comment/14276/","msgid":"<X9y/yB2Gr3g5CuhI@wyvern>","date":"2020-12-18T14:42:16","subject":"Re: [libcamera-devel] [PATCH v2 1/2] android: camera_device: Report\n\tpipeline depth","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Jacopo,\n\nThanks for your work.\n\nOn 2020-12-17 15:03:57 +0100, Jacopo Mondi wrote:\n> Report the pipeline depth in the capture results if the pipeline\n> reports it.\n> \n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThis patch does two things, oh wait I should stop that ;-P\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> ---\n>  src/android/camera_device.cpp | 21 ++++++++++++++++-----\n>  src/android/camera_device.h   |  4 ++--\n>  src/android/camera_worker.h   |  4 ++++\n>  3 files changed, 22 insertions(+), 7 deletions(-)\n> \n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 1c7bf4ed8073..26aa3bc4b123 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -675,10 +675,10 @@ std::tuple<uint32_t, uint32_t> CameraDevice::calculateStaticMetadataSize()\n>  {\n>  \t/*\n>  \t * \\todo Keep this in sync with the actual number of entries.\n> -\t * Currently: 51 entries, 687 bytes of static metadata\n> +\t * Currently: 52 entries, 698 bytes of static metadata\n>  \t */\n>  \tuint32_t numEntries = 52;\n> -\tuint32_t byteSize = 694;\n> +\tuint32_t byteSize = 698;\n>  \n>  \t/*\n>  \t * Calculate space occupation in bytes for dynamically built metadata\n> @@ -1187,6 +1187,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n>  \t\tANDROID_CONTROL_AWB_STATE,\n>  \t\tANDROID_CONTROL_AWB_LOCK,\n>  \t\tANDROID_LENS_STATE,\n> +\t\tANDROID_REQUEST_PIPELINE_DEPTH,\n>  \t\tANDROID_SCALER_CROP_REGION,\n>  \t\tANDROID_SENSOR_TIMESTAMP,\n>  \t\tANDROID_SENSOR_ROLLING_SHUTTER_SKEW,\n> @@ -1704,7 +1705,7 @@ void CameraDevice::requestComplete(Request *request)\n>  \t * pipeline handlers) timestamp in the Request itself.\n>  \t */\n>  \tuint64_t timestamp = buffers.begin()->second->metadata().timestamp;\n> -\tresultMetadata = getResultMetadata(descriptor->frameNumber_, timestamp);\n> +\tresultMetadata = getResultMetadata(descriptor, timestamp);\n>  \n>  \t/* Handle any JPEG compression. */\n>  \tfor (unsigned int i = 0; i < descriptor->numBuffers_; ++i) {\n> @@ -1822,15 +1823,17 @@ void CameraDevice::notifyError(uint32_t frameNumber, camera3_stream_t *stream)\n>   * Produce a set of fixed result metadata.\n>   */\n>  std::unique_ptr<CameraMetadata>\n> -CameraDevice::getResultMetadata([[maybe_unused]] int frame_number,\n> +CameraDevice::getResultMetadata(Camera3RequestDescriptor *descriptor,\n>  \t\t\t\tint64_t timestamp)\n>  {\n> +\tconst ControlList &metadata = descriptor->request_->metadata();\n> +\n>  \t/*\n>  \t * \\todo Keep this in sync with the actual number of entries.\n>  \t * Currently: 18 entries, 62 bytes\n>  \t */\n>  \tstd::unique_ptr<CameraMetadata> resultMetadata =\n> -\t\tstd::make_unique<CameraMetadata>(18, 62);\n> +\t\tstd::make_unique<CameraMetadata>(19, 63);\n>  \tif (!resultMetadata->isValid()) {\n>  \t\tLOG(HAL, Error) << \"Failed to allocate static metadata\";\n>  \t\treturn nullptr;\n> @@ -1880,6 +1883,14 @@ CameraDevice::getResultMetadata([[maybe_unused]] int frame_number,\n>  \tresultMetadata->addEntry(ANDROID_STATISTICS_SCENE_FLICKER,\n>  \t\t\t\t &scene_flicker, 1);\n>  \n> +\t/* Add metadata tags reported by libcamera. */\n> +\tif (metadata.contains(controls::draft::PipelineDepth)) {\n> +\t\tuint8_t pipeline_depth =\n> +\t\t\tmetadata.get<int32_t>(controls::draft::PipelineDepth);\n> +\t\tresultMetadata->addEntry(ANDROID_REQUEST_PIPELINE_DEPTH,\n> +\t\t\t\t\t &pipeline_depth, 1);\n> +\t}\n> +\n>  \t/*\n>  \t * Return the result metadata pack even is not valid: get() will return\n>  \t * nullptr.\n> diff --git a/src/android/camera_device.h b/src/android/camera_device.h\n> index 45efcf477436..07d3a846f8e1 100644\n> --- a/src/android/camera_device.h\n> +++ b/src/android/camera_device.h\n> @@ -105,8 +105,8 @@ private:\n>  \tvoid notifyError(uint32_t frameNumber, camera3_stream_t *stream);\n>  \tCameraMetadata *requestTemplatePreview();\n>  \tlibcamera::PixelFormat toPixelFormat(int format) const;\n> -\tstd::unique_ptr<CameraMetadata> getResultMetadata(int frame_number,\n> -\t\t\t\t\t\t\t  int64_t timestamp);\n> +\tstd::unique_ptr<CameraMetadata> getResultMetadata(\n> +\t\tCamera3RequestDescriptor *descriptor, int64_t timestamp);\n>  \n>  \tunsigned int id_;\n>  \tcamera3_device_t camera3Device_;\n> diff --git a/src/android/camera_worker.h b/src/android/camera_worker.h\n> index fff5021708d7..847a2fc4bd7c 100644\n> --- a/src/android/camera_worker.h\n> +++ b/src/android/camera_worker.h\n> @@ -25,6 +25,10 @@ public:\n>  \tCaptureRequest(libcamera::Camera *camera, uint64_t cookie);\n>  \n>  \tconst std::vector<int> &fences() const { return acquireFences_; }\n> +\tconst libcamera::ControlList &metadata() const\n> +\t{\n> +\t\treturn request_->metadata();\n> +\t}\n>  \n>  \tvoid addBuffer(libcamera::Stream *stream,\n>  \t\t       libcamera::FrameBuffer *buffer, int fence);\n> -- \n> 2.29.2\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","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 D29F8C0F1A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 18 Dec 2020 14:42:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5331C61595;\n\tFri, 18 Dec 2020 15:42:22 +0100 (CET)","from mail-lf1-x129.google.com (mail-lf1-x129.google.com\n\t[IPv6:2a00:1450:4864:20::129])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 76D696052C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 18 Dec 2020 15:42:20 +0100 (CET)","by mail-lf1-x129.google.com with SMTP id s26so5982843lfc.8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 18 Dec 2020 06:42:20 -0800 (PST)","from localhost ([185.224.57.161]) by smtp.gmail.com with ESMTPSA id\n\ty12sm962093lfy.300.2020.12.18.06.42.18\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 18 Dec 2020 06:42:18 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=ragnatech-se.20150623.gappssmtp.com\n\theader.i=@ragnatech-se.20150623.gappssmtp.com\n\theader.b=\"e/44GxYJ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to;\n\tbh=kGiT5X+tV0qQ5d5iy1XjXmLxMHaCYHjTScTwEFrsDNw=;\n\tb=e/44GxYJs29lnb7jpv0IL3C/kOJh2ZJnVFJf1jaf8qxp6RuRuvBrk6iVolD2UJ2gvq\n\tuBwjrpQ2NdXUBv8NfjwJXJQDNli3IfOk/IV1Fg1J1o5lC+KrAjZ5XYu19XZ2o0bYmI+U\n\tWytPUqSyNNUgV7mL0uib16GFmSUqPYf5wulFNlt4tI2CgUBjJxkfoL8OXxn5mi4FITsZ\n\t1DTCJcb5NTv0Dxtmr/mG21F9UNykxsAP6dHk9eUN0kOqH5gdhp2RH7nPzV2dgngB7pjk\n\tJS9NO7SdZ5kYULOK4qHC8Vwqzdfw/LRKzpO/tygJPaEyNRkPGqNzqPW7dKJxXUvt3gfB\n\tjbRA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to;\n\tbh=kGiT5X+tV0qQ5d5iy1XjXmLxMHaCYHjTScTwEFrsDNw=;\n\tb=NbdhqUjkkolObYBXXKkB6PNdrJeYxxucPhZ5ybVzcmQOB85YD61B2jkYFjVDqo35OY\n\tmU1l4JHmLspmCQo8ycHkyU+RSSFQsS3Iu0Eop4NR/C1Rpc1E3MiKZrY483MP8V9SGlcK\n\t1SuA7S/oaeuFidR1EhJl0hIsu5MHEIUuTU5k8/MQEZQvIqmDimM4AhzUO9qlJ1PT+Rfh\n\tqKkIvf3kd5nc2SDyEFyjnp2Nqr/JEkKsPi3QWbT7fKX8IEO4Fsl6tYHR43GHSt2V3INx\n\ta42UF4Uy94EXLk8uD6ClUKOSFhP4/60jVakAP7SAGceH4co1p2GMYHJiQREWblATkRoQ\n\tSnIQ==","X-Gm-Message-State":"AOAM531VDpgqOu1ADneUNl/kyRM4Jq14/7g104zjxaeDNIa0t0TaaqeZ\n\tK88484rI0KHSEdAKQFmauwlCn99D5K5bWg==","X-Google-Smtp-Source":"ABdhPJwS15+rGiBGZGChOY/T1LEcsFGDNyk39n1+dcKfSylv2VXYW+Lwh3sUzhfDfjaWHk4zjMeU0g==","X-Received":"by 2002:a2e:b4f1:: with SMTP id\n\ts17mr1948295ljm.228.1608302539822; \n\tFri, 18 Dec 2020 06:42:19 -0800 (PST)","Date":"Fri, 18 Dec 2020 15:42:16 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Jacopo Mondi <jacopo@jmondi.org>","Message-ID":"<X9y/yB2Gr3g5CuhI@wyvern>","References":"<20201217140358.17614-1-jacopo@jmondi.org>\n\t<20201217140358.17614-2-jacopo@jmondi.org>","MIME-Version":"1.0","Content-Disposition":"inline","In-Reply-To":"<20201217140358.17614-2-jacopo@jmondi.org>","Subject":"Re: [libcamera-devel] [PATCH v2 1/2] android: camera_device: Report\n\tpipeline depth","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","Content-Type":"text/plain; charset=\"iso-8859-1\"","Content-Transfer-Encoding":"quoted-printable","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]