[{"id":20264,"web_url":"https://patchwork.libcamera.org/comment/20264/","msgid":"<YW14KAo5N01P8eMW@pendragon.ideasonboard.com>","date":"2021-10-18T13:35:36","subject":"Re: [libcamera-devel] [PATCH 04/11] android: camera_stream: Plumb\n\tprocess() with Camera3RequestDescriptor","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Umang,\n\nThank you for the patch.\n\nOn Mon, Oct 18, 2021 at 06:59:16PM +0530, Umang Jain wrote:\n> Data (or broader context) required for post processing of a camera request\n> is saved via Camera3RequestDescriptor. Instead of passing individual\n> arguments to CameraStream::process(), pass the Camera3RequestDescriptor\n> pointer to it. All the arguments necessary to run the post-processor can\n> be accessed from the descriptor.\n> \n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> ---\n>  src/android/camera_device.cpp            | 5 ++---\n>  src/android/camera_stream.cpp            | 5 ++---\n>  src/android/camera_stream.h              | 5 ++---\n>  src/android/jpeg/post_processor_jpeg.cpp | 6 ++++--\n>  src/android/jpeg/post_processor_jpeg.h   | 3 +--\n>  src/android/post_processor.h             | 5 ++---\n>  src/android/yuv/post_processor_yuv.cpp   | 3 +--\n>  src/android/yuv/post_processor_yuv.h     | 3 +--\n>  8 files changed, 15 insertions(+), 20 deletions(-)\n> \n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index c6ae8930..3bddb292 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -1176,9 +1176,8 @@ void CameraDevice::requestComplete(Request *request)\n>  \t\t\tcontinue;\n>  \t\t}\n>  \n> -\t\tint ret = cameraStream->process(*src, buffer,\n> -\t\t\t\t\t\tdescriptor->settings_,\n> -\t\t\t\t\t\tdescriptor->resultMetadata_.get());\n> +\t\tint ret = cameraStream->process(*src, buffer, descriptor);\n> +\n>  \t\t/*\n>  \t\t * Return the FrameBuffer to the CameraStream now that we're\n>  \t\t * done processing it.\n> diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp\n> index 3b96d2e9..8f47e4d8 100644\n> --- a/src/android/camera_stream.cpp\n> +++ b/src/android/camera_stream.cpp\n> @@ -144,8 +144,7 @@ int CameraStream::waitFence(int fence)\n>  \n>  int CameraStream::process(const FrameBuffer &source,\n>  \t\t\t  camera3_stream_buffer_t &camera3Dest,\n> -\t\t\t  const CameraMetadata &requestMetadata,\n> -\t\t\t  CameraMetadata *resultMetadata)\n> +\t\t\t  Camera3RequestDescriptor *request)\n>  {\n>  \t/* Handle waiting on fences on the destination buffer. */\n>  \tint fence = camera3Dest.acquire_fence;\n> @@ -175,7 +174,7 @@ int CameraStream::process(const FrameBuffer &source,\n>  \t\treturn -EINVAL;\n>  \t}\n>  \n> -\treturn postProcessor_->process(source, &dest, requestMetadata, resultMetadata);\n> +\treturn postProcessor_->process(source, &dest, request);\n>  }\n>  \n>  FrameBuffer *CameraStream::getBuffer()\n> diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h\n> index 03ecfa94..405b232d 100644\n> --- a/src/android/camera_stream.h\n> +++ b/src/android/camera_stream.h\n> @@ -19,8 +19,8 @@\n>  #include <libcamera/geometry.h>\n>  #include <libcamera/pixel_format.h>\n>  \n> +class Camera3RequestDescriptor;\n>  class CameraDevice;\n> -class CameraMetadata;\n>  class PostProcessor;\n>  \n>  class CameraStream\n> @@ -120,8 +120,7 @@ public:\n>  \tint configure();\n>  \tint process(const libcamera::FrameBuffer &source,\n>  \t\t    camera3_stream_buffer_t &camera3Buffer,\n> -\t\t    const CameraMetadata &requestMetadata,\n> -\t\t    CameraMetadata *resultMetadata);\n> +\t\t    Camera3RequestDescriptor *request);\n>  \tlibcamera::FrameBuffer *getBuffer();\n>  \tvoid putBuffer(libcamera::FrameBuffer *buffer);\n>  \n> diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp\n> index f6d47f63..699576ef 100644\n> --- a/src/android/jpeg/post_processor_jpeg.cpp\n> +++ b/src/android/jpeg/post_processor_jpeg.cpp\n> @@ -11,6 +11,7 @@\n>  \n>  #include \"../camera_device.h\"\n>  #include \"../camera_metadata.h\"\n> +#include \"../camera_request.h\"\n>  #include \"encoder_libjpeg.h\"\n>  #include \"exif.h\"\n>  \n> @@ -99,14 +100,15 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source,\n>  \n>  int PostProcessorJpeg::process(const FrameBuffer &source,\n>  \t\t\t       CameraBuffer *destination,\n> -\t\t\t       const CameraMetadata &requestMetadata,\n> -\t\t\t       CameraMetadata *resultMetadata)\n> +\t\t\t       Camera3RequestDescriptor *request)\n>  {\n>  \tif (!encoder_)\n>  \t\treturn 0;\n>  \n>  \tASSERT(destination->numPlanes() == 1);\n>  \n> +\tconst CameraMetadata &requestMetadata = request->settings_;\n> +\tCameraMetadata *resultMetadata = request->resultMetadata_.get();\n>  \tcamera_metadata_ro_entry_t entry;\n>  \tint ret;\n>  \n> diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h\n> index 6fd31022..0184d77e 100644\n> --- a/src/android/jpeg/post_processor_jpeg.h\n> +++ b/src/android/jpeg/post_processor_jpeg.h\n> @@ -24,8 +24,7 @@ public:\n>  \t\t      const libcamera::StreamConfiguration &outcfg) override;\n>  \tint process(const libcamera::FrameBuffer &source,\n>  \t\t    CameraBuffer *destination,\n> -\t\t    const CameraMetadata &requestMetadata,\n> -\t\t    CameraMetadata *resultMetadata) override;\n> +\t\t    Camera3RequestDescriptor *request) override;\n>  \n>  private:\n>  \tvoid generateThumbnail(const libcamera::FrameBuffer &source,\n> diff --git a/src/android/post_processor.h b/src/android/post_processor.h\n> index ab2b2c60..27eaef88 100644\n> --- a/src/android/post_processor.h\n> +++ b/src/android/post_processor.h\n> @@ -12,7 +12,7 @@\n>  \n>  #include \"camera_buffer.h\"\n>  \n> -class CameraMetadata;\n> +class Camera3RequestDescriptor;\n>  \n>  class PostProcessor\n>  {\n> @@ -23,8 +23,7 @@ public:\n>  \t\t\t      const libcamera::StreamConfiguration &outCfg) = 0;\n>  \tvirtual int process(const libcamera::FrameBuffer &source,\n>  \t\t\t    CameraBuffer *destination,\n> -\t\t\t    const CameraMetadata &requestMetadata,\n> -\t\t\t    CameraMetadata *resultMetadata) = 0;\n> +\t\t\t    Camera3RequestDescriptor *request) = 0;\n>  };\n>  \n>  #endif /* __ANDROID_POST_PROCESSOR_H__ */\n> diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp\n> index 7b3b4960..8110a1f1 100644\n> --- a/src/android/yuv/post_processor_yuv.cpp\n> +++ b/src/android/yuv/post_processor_yuv.cpp\n> @@ -51,8 +51,7 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg,\n>  \n>  int PostProcessorYuv::process(const FrameBuffer &source,\n>  \t\t\t      CameraBuffer *destination,\n> -\t\t\t      [[maybe_unused]] const CameraMetadata &requestMetadata,\n> -\t\t\t      [[maybe_unused]] CameraMetadata *metadata)\n> +\t\t\t      [[maybe_unused]] Camera3RequestDescriptor *request)\n>  {\n>  \tif (!isValidBuffers(source, *destination))\n>  \t\treturn -EINVAL;\n> diff --git a/src/android/yuv/post_processor_yuv.h b/src/android/yuv/post_processor_yuv.h\n> index 12f7af07..a4e0ff5d 100644\n> --- a/src/android/yuv/post_processor_yuv.h\n> +++ b/src/android/yuv/post_processor_yuv.h\n> @@ -20,8 +20,7 @@ public:\n>  \t\t      const libcamera::StreamConfiguration &outcfg) override;\n>  \tint process(const libcamera::FrameBuffer &source,\n>  \t\t    CameraBuffer *destination,\n> -\t\t    const CameraMetadata &requestMetadata,\n> -\t\t    CameraMetadata *metadata) override;\n> +\t\t    Camera3RequestDescriptor *request) override;\n>  \n>  private:\n>  \tbool isValidBuffers(const libcamera::FrameBuffer &source,","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 8C8EAC324C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 18 Oct 2021 13:35:55 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F1A1C68F5A;\n\tMon, 18 Oct 2021 15:35:54 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0068668F56\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 18 Oct 2021 15:35:53 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 67E7B8C6;\n\tMon, 18 Oct 2021 15:35:53 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"U2DA8cgk\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1634564153;\n\tbh=iIA1oUpxOnhgG07WFXzmM6mDzV9mg0WZOEwsVq8mlds=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=U2DA8cgkENJQYYS82WnIiHAQSWzchqfNhg4v/M0ZXLsN8lSQYTWQVk0P1gpy8vJ2G\n\t2UGdVrYF2ShErelL310b5+BJoAXJuy8Sg6t5PXY+Tw/yu38vCxj3QTbjRKTag11fLo\n\tU1PbvrMwzu8JYlFg9kEP5KdCeUIzotYSs4cyZy5w=","Date":"Mon, 18 Oct 2021 16:35:36 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<YW14KAo5N01P8eMW@pendragon.ideasonboard.com>","References":"<20211018132923.476242-1-umang.jain@ideasonboard.com>\n\t<20211018132923.476242-5-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211018132923.476242-5-umang.jain@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 04/11] android: camera_stream: Plumb\n\tprocess() with Camera3RequestDescriptor","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>"}},{"id":20271,"web_url":"https://patchwork.libcamera.org/comment/20271/","msgid":"<20211018155059.exgtw4pwsnftxr2r@uno.localdomain>","date":"2021-10-18T15:50:59","subject":"Re: [libcamera-devel] [PATCH 04/11] android: camera_stream: Plumb\n\tprocess() with Camera3RequestDescriptor","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Uman,\n\nOn Mon, Oct 18, 2021 at 06:59:16PM +0530, Umang Jain wrote:\n> Data (or broader context) required for post processing of a camera request\n> is saved via Camera3RequestDescriptor. Instead of passing individual\n> arguments to CameraStream::process(), pass the Camera3RequestDescriptor\n> pointer to it. All the arguments necessary to run the post-processor can\n> be accessed from the descriptor.\n\nSeems like a really good idea ;)\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n   j\n>\n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> ---\n>  src/android/camera_device.cpp            | 5 ++---\n>  src/android/camera_stream.cpp            | 5 ++---\n>  src/android/camera_stream.h              | 5 ++---\n>  src/android/jpeg/post_processor_jpeg.cpp | 6 ++++--\n>  src/android/jpeg/post_processor_jpeg.h   | 3 +--\n>  src/android/post_processor.h             | 5 ++---\n>  src/android/yuv/post_processor_yuv.cpp   | 3 +--\n>  src/android/yuv/post_processor_yuv.h     | 3 +--\n>  8 files changed, 15 insertions(+), 20 deletions(-)\n>\n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index c6ae8930..3bddb292 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -1176,9 +1176,8 @@ void CameraDevice::requestComplete(Request *request)\n>  \t\t\tcontinue;\n>  \t\t}\n>\n> -\t\tint ret = cameraStream->process(*src, buffer,\n> -\t\t\t\t\t\tdescriptor->settings_,\n> -\t\t\t\t\t\tdescriptor->resultMetadata_.get());\n> +\t\tint ret = cameraStream->process(*src, buffer, descriptor);\n> +\n>  \t\t/*\n>  \t\t * Return the FrameBuffer to the CameraStream now that we're\n>  \t\t * done processing it.\n> diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp\n> index 3b96d2e9..8f47e4d8 100644\n> --- a/src/android/camera_stream.cpp\n> +++ b/src/android/camera_stream.cpp\n> @@ -144,8 +144,7 @@ int CameraStream::waitFence(int fence)\n>\n>  int CameraStream::process(const FrameBuffer &source,\n>  \t\t\t  camera3_stream_buffer_t &camera3Dest,\n> -\t\t\t  const CameraMetadata &requestMetadata,\n> -\t\t\t  CameraMetadata *resultMetadata)\n> +\t\t\t  Camera3RequestDescriptor *request)\n>  {\n>  \t/* Handle waiting on fences on the destination buffer. */\n>  \tint fence = camera3Dest.acquire_fence;\n> @@ -175,7 +174,7 @@ int CameraStream::process(const FrameBuffer &source,\n>  \t\treturn -EINVAL;\n>  \t}\n>\n> -\treturn postProcessor_->process(source, &dest, requestMetadata, resultMetadata);\n> +\treturn postProcessor_->process(source, &dest, request);\n>  }\n>\n>  FrameBuffer *CameraStream::getBuffer()\n> diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h\n> index 03ecfa94..405b232d 100644\n> --- a/src/android/camera_stream.h\n> +++ b/src/android/camera_stream.h\n> @@ -19,8 +19,8 @@\n>  #include <libcamera/geometry.h>\n>  #include <libcamera/pixel_format.h>\n>\n> +class Camera3RequestDescriptor;\n>  class CameraDevice;\n> -class CameraMetadata;\n>  class PostProcessor;\n>\n>  class CameraStream\n> @@ -120,8 +120,7 @@ public:\n>  \tint configure();\n>  \tint process(const libcamera::FrameBuffer &source,\n>  \t\t    camera3_stream_buffer_t &camera3Buffer,\n> -\t\t    const CameraMetadata &requestMetadata,\n> -\t\t    CameraMetadata *resultMetadata);\n> +\t\t    Camera3RequestDescriptor *request);\n>  \tlibcamera::FrameBuffer *getBuffer();\n>  \tvoid putBuffer(libcamera::FrameBuffer *buffer);\n>\n> diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp\n> index f6d47f63..699576ef 100644\n> --- a/src/android/jpeg/post_processor_jpeg.cpp\n> +++ b/src/android/jpeg/post_processor_jpeg.cpp\n> @@ -11,6 +11,7 @@\n>\n>  #include \"../camera_device.h\"\n>  #include \"../camera_metadata.h\"\n> +#include \"../camera_request.h\"\n>  #include \"encoder_libjpeg.h\"\n>  #include \"exif.h\"\n>\n> @@ -99,14 +100,15 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source,\n>\n>  int PostProcessorJpeg::process(const FrameBuffer &source,\n>  \t\t\t       CameraBuffer *destination,\n> -\t\t\t       const CameraMetadata &requestMetadata,\n> -\t\t\t       CameraMetadata *resultMetadata)\n> +\t\t\t       Camera3RequestDescriptor *request)\n>  {\n>  \tif (!encoder_)\n>  \t\treturn 0;\n>\n>  \tASSERT(destination->numPlanes() == 1);\n>\n> +\tconst CameraMetadata &requestMetadata = request->settings_;\n> +\tCameraMetadata *resultMetadata = request->resultMetadata_.get();\n>  \tcamera_metadata_ro_entry_t entry;\n>  \tint ret;\n>\n> diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h\n> index 6fd31022..0184d77e 100644\n> --- a/src/android/jpeg/post_processor_jpeg.h\n> +++ b/src/android/jpeg/post_processor_jpeg.h\n> @@ -24,8 +24,7 @@ public:\n>  \t\t      const libcamera::StreamConfiguration &outcfg) override;\n>  \tint process(const libcamera::FrameBuffer &source,\n>  \t\t    CameraBuffer *destination,\n> -\t\t    const CameraMetadata &requestMetadata,\n> -\t\t    CameraMetadata *resultMetadata) override;\n> +\t\t    Camera3RequestDescriptor *request) override;\n>\n>  private:\n>  \tvoid generateThumbnail(const libcamera::FrameBuffer &source,\n> diff --git a/src/android/post_processor.h b/src/android/post_processor.h\n> index ab2b2c60..27eaef88 100644\n> --- a/src/android/post_processor.h\n> +++ b/src/android/post_processor.h\n> @@ -12,7 +12,7 @@\n>\n>  #include \"camera_buffer.h\"\n>\n> -class CameraMetadata;\n> +class Camera3RequestDescriptor;\n>\n>  class PostProcessor\n>  {\n> @@ -23,8 +23,7 @@ public:\n>  \t\t\t      const libcamera::StreamConfiguration &outCfg) = 0;\n>  \tvirtual int process(const libcamera::FrameBuffer &source,\n>  \t\t\t    CameraBuffer *destination,\n> -\t\t\t    const CameraMetadata &requestMetadata,\n> -\t\t\t    CameraMetadata *resultMetadata) = 0;\n> +\t\t\t    Camera3RequestDescriptor *request) = 0;\n>  };\n>\n>  #endif /* __ANDROID_POST_PROCESSOR_H__ */\n> diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp\n> index 7b3b4960..8110a1f1 100644\n> --- a/src/android/yuv/post_processor_yuv.cpp\n> +++ b/src/android/yuv/post_processor_yuv.cpp\n> @@ -51,8 +51,7 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg,\n>\n>  int PostProcessorYuv::process(const FrameBuffer &source,\n>  \t\t\t      CameraBuffer *destination,\n> -\t\t\t      [[maybe_unused]] const CameraMetadata &requestMetadata,\n> -\t\t\t      [[maybe_unused]] CameraMetadata *metadata)\n> +\t\t\t      [[maybe_unused]] Camera3RequestDescriptor *request)\n>  {\n>  \tif (!isValidBuffers(source, *destination))\n>  \t\treturn -EINVAL;\n> diff --git a/src/android/yuv/post_processor_yuv.h b/src/android/yuv/post_processor_yuv.h\n> index 12f7af07..a4e0ff5d 100644\n> --- a/src/android/yuv/post_processor_yuv.h\n> +++ b/src/android/yuv/post_processor_yuv.h\n> @@ -20,8 +20,7 @@ public:\n>  \t\t      const libcamera::StreamConfiguration &outcfg) override;\n>  \tint process(const libcamera::FrameBuffer &source,\n>  \t\t    CameraBuffer *destination,\n> -\t\t    const CameraMetadata &requestMetadata,\n> -\t\t    CameraMetadata *metadata) override;\n> +\t\t    Camera3RequestDescriptor *request) override;\n>\n>  private:\n>  \tbool isValidBuffers(const libcamera::FrameBuffer &source,\n> --\n> 2.31.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 4DEF0C323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 18 Oct 2021 15:50:12 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B371668F59;\n\tMon, 18 Oct 2021 17:50:11 +0200 (CEST)","from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net\n\t[217.70.183.198])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 10E6368F56\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 18 Oct 2021 17:50:11 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay6-d.mail.gandi.net (Postfix) with ESMTPSA id 80B13C000B;\n\tMon, 18 Oct 2021 15:50:10 +0000 (UTC)"],"Date":"Mon, 18 Oct 2021 17:50:59 +0200","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<20211018155059.exgtw4pwsnftxr2r@uno.localdomain>","References":"<20211018132923.476242-1-umang.jain@ideasonboard.com>\n\t<20211018132923.476242-5-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211018132923.476242-5-umang.jain@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 04/11] android: camera_stream: Plumb\n\tprocess() with Camera3RequestDescriptor","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>"}},{"id":20290,"web_url":"https://patchwork.libcamera.org/comment/20290/","msgid":"<CAO5uPHPOw6_sZBfH-Gj9o3=od7SJ-HsbEOqJhzMxgYp9uv7z7w@mail.gmail.com>","date":"2021-10-19T04:42:47","subject":"Re: [libcamera-devel] [PATCH 04/11] android: camera_stream: Plumb\n\tprocess() with Camera3RequestDescriptor","submitter":{"id":63,"url":"https://patchwork.libcamera.org/api/people/63/","name":"Hirokazu Honda","email":"hiroh@chromium.org"},"content":"Hi Umang, thank you for the patch.\n\nOn Tue, Oct 19, 2021 at 12:50 AM Jacopo Mondi <jacopo@jmondi.org> wrote:\n>\n> Hi Uman,\n>\n> On Mon, Oct 18, 2021 at 06:59:16PM +0530, Umang Jain wrote:\n> > Data (or broader context) required for post processing of a camera request\n> > is saved via Camera3RequestDescriptor. Instead of passing individual\n> > arguments to CameraStream::process(), pass the Camera3RequestDescriptor\n> > pointer to it. All the arguments necessary to run the post-processor can\n> > be accessed from the descriptor.\n>\n> Seems like a really good idea ;)\n>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n>\n> Thanks\n>    j\n> >\n> > Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n\nReviewed-by: Hirokazu Honda <hiroh@chromium.org>\n> > ---\n> >  src/android/camera_device.cpp            | 5 ++---\n> >  src/android/camera_stream.cpp            | 5 ++---\n> >  src/android/camera_stream.h              | 5 ++---\n> >  src/android/jpeg/post_processor_jpeg.cpp | 6 ++++--\n> >  src/android/jpeg/post_processor_jpeg.h   | 3 +--\n> >  src/android/post_processor.h             | 5 ++---\n> >  src/android/yuv/post_processor_yuv.cpp   | 3 +--\n> >  src/android/yuv/post_processor_yuv.h     | 3 +--\n> >  8 files changed, 15 insertions(+), 20 deletions(-)\n> >\n> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> > index c6ae8930..3bddb292 100644\n> > --- a/src/android/camera_device.cpp\n> > +++ b/src/android/camera_device.cpp\n> > @@ -1176,9 +1176,8 @@ void CameraDevice::requestComplete(Request *request)\n> >                       continue;\n> >               }\n> >\n> > -             int ret = cameraStream->process(*src, buffer,\n> > -                                             descriptor->settings_,\n> > -                                             descriptor->resultMetadata_.get());\n> > +             int ret = cameraStream->process(*src, buffer, descriptor);\n> > +\n> >               /*\n> >                * Return the FrameBuffer to the CameraStream now that we're\n> >                * done processing it.\n> > diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp\n> > index 3b96d2e9..8f47e4d8 100644\n> > --- a/src/android/camera_stream.cpp\n> > +++ b/src/android/camera_stream.cpp\n> > @@ -144,8 +144,7 @@ int CameraStream::waitFence(int fence)\n> >\n> >  int CameraStream::process(const FrameBuffer &source,\n> >                         camera3_stream_buffer_t &camera3Dest,\n> > -                       const CameraMetadata &requestMetadata,\n> > -                       CameraMetadata *resultMetadata)\n> > +                       Camera3RequestDescriptor *request)\n> >  {\n> >       /* Handle waiting on fences on the destination buffer. */\n> >       int fence = camera3Dest.acquire_fence;\n> > @@ -175,7 +174,7 @@ int CameraStream::process(const FrameBuffer &source,\n> >               return -EINVAL;\n> >       }\n> >\n> > -     return postProcessor_->process(source, &dest, requestMetadata, resultMetadata);\n> > +     return postProcessor_->process(source, &dest, request);\n> >  }\n> >\n> >  FrameBuffer *CameraStream::getBuffer()\n> > diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h\n> > index 03ecfa94..405b232d 100644\n> > --- a/src/android/camera_stream.h\n> > +++ b/src/android/camera_stream.h\n> > @@ -19,8 +19,8 @@\n> >  #include <libcamera/geometry.h>\n> >  #include <libcamera/pixel_format.h>\n> >\n> > +class Camera3RequestDescriptor;\n> >  class CameraDevice;\n> > -class CameraMetadata;\n> >  class PostProcessor;\n> >\n> >  class CameraStream\n> > @@ -120,8 +120,7 @@ public:\n> >       int configure();\n> >       int process(const libcamera::FrameBuffer &source,\n> >                   camera3_stream_buffer_t &camera3Buffer,\n> > -                 const CameraMetadata &requestMetadata,\n> > -                 CameraMetadata *resultMetadata);\n> > +                 Camera3RequestDescriptor *request);\n> >       libcamera::FrameBuffer *getBuffer();\n> >       void putBuffer(libcamera::FrameBuffer *buffer);\n> >\n> > diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp\n> > index f6d47f63..699576ef 100644\n> > --- a/src/android/jpeg/post_processor_jpeg.cpp\n> > +++ b/src/android/jpeg/post_processor_jpeg.cpp\n> > @@ -11,6 +11,7 @@\n> >\n> >  #include \"../camera_device.h\"\n> >  #include \"../camera_metadata.h\"\n> > +#include \"../camera_request.h\"\n> >  #include \"encoder_libjpeg.h\"\n> >  #include \"exif.h\"\n> >\n> > @@ -99,14 +100,15 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source,\n> >\n> >  int PostProcessorJpeg::process(const FrameBuffer &source,\n> >                              CameraBuffer *destination,\n> > -                            const CameraMetadata &requestMetadata,\n> > -                            CameraMetadata *resultMetadata)\n> > +                            Camera3RequestDescriptor *request)\n> >  {\n> >       if (!encoder_)\n> >               return 0;\n> >\n> >       ASSERT(destination->numPlanes() == 1);\n> >\n> > +     const CameraMetadata &requestMetadata = request->settings_;\n> > +     CameraMetadata *resultMetadata = request->resultMetadata_.get();\n> >       camera_metadata_ro_entry_t entry;\n> >       int ret;\n> >\n> > diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h\n> > index 6fd31022..0184d77e 100644\n> > --- a/src/android/jpeg/post_processor_jpeg.h\n> > +++ b/src/android/jpeg/post_processor_jpeg.h\n> > @@ -24,8 +24,7 @@ public:\n> >                     const libcamera::StreamConfiguration &outcfg) override;\n> >       int process(const libcamera::FrameBuffer &source,\n> >                   CameraBuffer *destination,\n> > -                 const CameraMetadata &requestMetadata,\n> > -                 CameraMetadata *resultMetadata) override;\n> > +                 Camera3RequestDescriptor *request) override;\n> >\n> >  private:\n> >       void generateThumbnail(const libcamera::FrameBuffer &source,\n> > diff --git a/src/android/post_processor.h b/src/android/post_processor.h\n> > index ab2b2c60..27eaef88 100644\n> > --- a/src/android/post_processor.h\n> > +++ b/src/android/post_processor.h\n> > @@ -12,7 +12,7 @@\n> >\n> >  #include \"camera_buffer.h\"\n> >\n> > -class CameraMetadata;\n> > +class Camera3RequestDescriptor;\n> >\n> >  class PostProcessor\n> >  {\n> > @@ -23,8 +23,7 @@ public:\n> >                             const libcamera::StreamConfiguration &outCfg) = 0;\n> >       virtual int process(const libcamera::FrameBuffer &source,\n> >                           CameraBuffer *destination,\n> > -                         const CameraMetadata &requestMetadata,\n> > -                         CameraMetadata *resultMetadata) = 0;\n> > +                         Camera3RequestDescriptor *request) = 0;\n> >  };\n> >\n> >  #endif /* __ANDROID_POST_PROCESSOR_H__ */\n> > diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp\n> > index 7b3b4960..8110a1f1 100644\n> > --- a/src/android/yuv/post_processor_yuv.cpp\n> > +++ b/src/android/yuv/post_processor_yuv.cpp\n> > @@ -51,8 +51,7 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg,\n> >\n> >  int PostProcessorYuv::process(const FrameBuffer &source,\n> >                             CameraBuffer *destination,\n> > -                           [[maybe_unused]] const CameraMetadata &requestMetadata,\n> > -                           [[maybe_unused]] CameraMetadata *metadata)\n> > +                           [[maybe_unused]] Camera3RequestDescriptor *request)\n> >  {\n> >       if (!isValidBuffers(source, *destination))\n> >               return -EINVAL;\n> > diff --git a/src/android/yuv/post_processor_yuv.h b/src/android/yuv/post_processor_yuv.h\n> > index 12f7af07..a4e0ff5d 100644\n> > --- a/src/android/yuv/post_processor_yuv.h\n> > +++ b/src/android/yuv/post_processor_yuv.h\n> > @@ -20,8 +20,7 @@ public:\n> >                     const libcamera::StreamConfiguration &outcfg) override;\n> >       int process(const libcamera::FrameBuffer &source,\n> >                   CameraBuffer *destination,\n> > -                 const CameraMetadata &requestMetadata,\n> > -                 CameraMetadata *metadata) override;\n> > +                 Camera3RequestDescriptor *request) override;\n> >\n> >  private:\n> >       bool isValidBuffers(const libcamera::FrameBuffer &source,\n> > --\n> > 2.31.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 ED5D4C323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 19 Oct 2021 04:43:00 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B1D2968F5C;\n\tTue, 19 Oct 2021 06:43:00 +0200 (CEST)","from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com\n\t[IPv6:2a00:1450:4864:20::52d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0E54160126\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 19 Oct 2021 06:42:59 +0200 (CEST)","by mail-ed1-x52d.google.com with SMTP id g10so7712839edj.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 18 Oct 2021 21:42:59 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=chromium.org header.i=@chromium.org\n\theader.b=\"YGD3Gx/W\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; \n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=zzLG18UvIw1pJGlYfmZBUs4FDv3Qjq9Xab3YBXNpIi4=;\n\tb=YGD3Gx/W/0j6JTf/0BL4S2CrHy0Su3nSzoWix5YnDtPRXYaXYixDE9sJtZQW7EfyCo\n\tHHZhmo+9mmw7RJ+QAYDCvC9MqOrL+HLWbnOkl0oJ+q4l4M3bvGytzFvJW1upcubqUKmS\n\tG38ZilXuvZPantq/p22TrdMegCRDoWLYnFQyc=","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=zzLG18UvIw1pJGlYfmZBUs4FDv3Qjq9Xab3YBXNpIi4=;\n\tb=nBhOsROWLdqxMjrC+zt5dENXLHs48UnTJfU5f+rbAwlFgjCCR0+5ICEJ3/cLmwSp+P\n\tFBbcmHosb15YhKHTZ+1UVzfBkvMLWW0OURfguOkZUtrd+2PAYEyaMEPh8p+JCL1RoltS\n\thp91g7g7Z3QP0HKOkZ/1WngMHruXuy+yXkt5KjTffgbeZK9L6tV/3sgDnKXQT0N3xh39\n\tXJirzsRRHaPlO+uUt/l2N5jf/l3QOaFAS0kc1U45fOtjSsBjcisBE4D6ilo21Ya48j4X\n\t+bMr4qgzuQQ30w3wrR8MsiZZ2HsUT5FS3byKMzUZxtk6xxoJeYWj39Zn2oTYc0fqJeNE\n\tUsxg==","X-Gm-Message-State":"AOAM532D/KgW45cwcHkqkZryJBfhHjgoa1K++DPEC8eC50C2rxFf4rMC\n\ts8o2cQt6+H8YrpL40xxPXIQVbtOURNeSXJ3pxvwvtQ==","X-Google-Smtp-Source":"ABdhPJy970XZKP9PzNMJ5SUQr5jX3Mvz/GbhN/aX6ohE1VL/ufZFXMFG6opn9cBNO4X6NcBmTerEcrp9fbjr+f/uRng=","X-Received":"by 2002:a05:6402:40d0:: with SMTP id\n\tz16mr50642169edb.220.1634618578599; \n\tMon, 18 Oct 2021 21:42:58 -0700 (PDT)","MIME-Version":"1.0","References":"<20211018132923.476242-1-umang.jain@ideasonboard.com>\n\t<20211018132923.476242-5-umang.jain@ideasonboard.com>\n\t<20211018155059.exgtw4pwsnftxr2r@uno.localdomain>","In-Reply-To":"<20211018155059.exgtw4pwsnftxr2r@uno.localdomain>","From":"Hirokazu Honda <hiroh@chromium.org>","Date":"Tue, 19 Oct 2021 13:42:47 +0900","Message-ID":"<CAO5uPHPOw6_sZBfH-Gj9o3=od7SJ-HsbEOqJhzMxgYp9uv7z7w@mail.gmail.com>","To":"Jacopo Mondi <jacopo@jmondi.org>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH 04/11] android: camera_stream: Plumb\n\tprocess() with Camera3RequestDescriptor","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 <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]