From patchwork Mon Sep 20 17:37:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 13870 X-Patchwork-Delegate: umang.jain@ideasonboard.com 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 BB2AFBF01C for ; Mon, 20 Sep 2021 17:38:15 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 71D376918F; Mon, 20 Sep 2021 19:38:15 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="YNG17aqv"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 2341C6918F for ; Mon, 20 Sep 2021 19:38:13 +0200 (CEST) Received: from perceval.ideasonboard.com (unknown [103.251.226.144]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id E80A345E; Mon, 20 Sep 2021 19:38:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1632159492; bh=MWmXhXrT2ZZjg1SG7A81WLvgNDlDwkV89K89gzYaHwE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YNG17aqvCr0iZN1BXcIZXASbM1YYI6qogoSqYnxH9tIZiX1/+Lh3N50tS9WctkIHE 17Y0UM3x1E4Y4n0z3BVdBQIsoPE84H1cABdzZDyck8ugQAKpDwPedlrvpb38jvji67 cJQ7oaCMEm3tYM1A+LKRIhKlTLDVhMfn7DCzhIzY= From: Umang Jain To: libcamera-devel@lists.libcamera.org Date: Mon, 20 Sep 2021 23:07:48 +0530 Message-Id: <20210920173752.1346190-7-umang.jain@ideasonboard.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210920173752.1346190-1-umang.jain@ideasonboard.com> References: <20210920173752.1346190-1-umang.jain@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 06/10] android: camera_stream: Plumb process() with Camera3RequestDescriptor 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" Data (or broader context) required for post processing of a camera request is saved via Camera3RequestDescriptor. Instead of passing individual arguments to CameraStream::process(), pass the Camera3RequestDescriptor pointer to it. All the arguments necessary to run the post-processor can be accessed from the descriptor. In subsequent commits, we will prepare the post-processor to run asynchronously. Hence, it will require the Camera3RequestDescriptor pointer to be emitted back in the post-processing completion handler to finally complete the request (i.e. sending the capture results back to the framework). Signed-off-by: Umang Jain Reviewed-by: Laurent Pinchart Reviewed-by: Laurent Pinchart Reviewed-by: Hirokazu Honda --- src/android/camera_device.cpp | 5 ++--- src/android/camera_stream.cpp | 5 ++--- src/android/camera_stream.h | 5 +++-- src/android/jpeg/post_processor_jpeg.cpp | 5 +++-- src/android/jpeg/post_processor_jpeg.h | 3 +-- src/android/post_processor.h | 5 +++-- src/android/yuv/post_processor_yuv.cpp | 3 +-- src/android/yuv/post_processor_yuv.h | 3 +-- 8 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 1ae4ac73..fa462368 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -1150,9 +1150,8 @@ void CameraDevice::requestComplete(Request *request) continue; } - int ret = cameraStream->process(src, *buffer.buffer, - descriptor->settings_, - descriptor->resultMetadata_.get()); + int ret = cameraStream->process(src, *buffer.buffer, descriptor); + /* * Return the FrameBuffer to the CameraStream now that we're * done processing it. diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp index 0fed5382..d494f5d5 100644 --- a/src/android/camera_stream.cpp +++ b/src/android/camera_stream.cpp @@ -100,8 +100,7 @@ int CameraStream::configure() int CameraStream::process(const FrameBuffer *source, buffer_handle_t camera3Dest, - const CameraMetadata &requestMetadata, - CameraMetadata *resultMetadata) + Camera3RequestDescriptor *request) { if (!postProcessor_) return 0; @@ -118,7 +117,7 @@ int CameraStream::process(const FrameBuffer *source, return -EINVAL; } - return postProcessor_->process(source, &dest, requestMetadata, resultMetadata); + return postProcessor_->process(source, &dest, request); } FrameBuffer *CameraStream::getBuffer() diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h index 5c232cb6..68789700 100644 --- a/src/android/camera_stream.h +++ b/src/android/camera_stream.h @@ -23,6 +23,8 @@ class CameraDevice; class CameraMetadata; class PostProcessor; +struct Camera3RequestDescriptor; + class CameraStream { public: @@ -120,8 +122,7 @@ public: int configure(); int process(const libcamera::FrameBuffer *source, buffer_handle_t camera3Dest, - const CameraMetadata &requestMetadata, - CameraMetadata *resultMetadata); + Camera3RequestDescriptor *request); libcamera::FrameBuffer *getBuffer(); void putBuffer(libcamera::FrameBuffer *buffer); diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp index cb45f86b..31f68330 100644 --- a/src/android/jpeg/post_processor_jpeg.cpp +++ b/src/android/jpeg/post_processor_jpeg.cpp @@ -99,14 +99,15 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer *source, int PostProcessorJpeg::process(const FrameBuffer *source, CameraBuffer *destination, - const CameraMetadata &requestMetadata, - CameraMetadata *resultMetadata) + Camera3RequestDescriptor *request) { if (!encoder_) return 0; ASSERT(destination->numPlanes() == 1); + const CameraMetadata &requestMetadata = request->settings_; + CameraMetadata *resultMetadata = request->resultMetadata_.get(); camera_metadata_ro_entry_t entry; int ret; diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h index c4b2e9ef..d49c8d2b 100644 --- a/src/android/jpeg/post_processor_jpeg.h +++ b/src/android/jpeg/post_processor_jpeg.h @@ -24,8 +24,7 @@ public: const libcamera::StreamConfiguration &outcfg) override; int process(const libcamera::FrameBuffer *source, CameraBuffer *destination, - const CameraMetadata &requestMetadata, - CameraMetadata *resultMetadata) override; + Camera3RequestDescriptor *request) override; private: void generateThumbnail(const libcamera::FrameBuffer *source, diff --git a/src/android/post_processor.h b/src/android/post_processor.h index 61dfb6d4..bdd6afe7 100644 --- a/src/android/post_processor.h +++ b/src/android/post_processor.h @@ -14,6 +14,8 @@ class CameraMetadata; +struct Camera3RequestDescriptor; + class PostProcessor { public: @@ -23,8 +25,7 @@ public: const libcamera::StreamConfiguration &outCfg) = 0; virtual int process(const libcamera::FrameBuffer *source, CameraBuffer *destination, - const CameraMetadata &requestMetadata, - CameraMetadata *resultMetadata) = 0; + Camera3RequestDescriptor *request) = 0; }; #endif /* __ANDROID_POST_PROCESSOR_H__ */ diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp index 0a874886..5e18caee 100644 --- a/src/android/yuv/post_processor_yuv.cpp +++ b/src/android/yuv/post_processor_yuv.cpp @@ -51,8 +51,7 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg, int PostProcessorYuv::process(const FrameBuffer *source, CameraBuffer *destination, - [[maybe_unused]] const CameraMetadata &requestMetadata, - [[maybe_unused]] CameraMetadata *metadata) + [[maybe_unused]] Camera3RequestDescriptor *request) { if (!isValidBuffers(source, *destination)) return -EINVAL; diff --git a/src/android/yuv/post_processor_yuv.h b/src/android/yuv/post_processor_yuv.h index 44a04113..eddd1086 100644 --- a/src/android/yuv/post_processor_yuv.h +++ b/src/android/yuv/post_processor_yuv.h @@ -22,8 +22,7 @@ public: const libcamera::StreamConfiguration &outcfg) override; int process(const libcamera::FrameBuffer *source, CameraBuffer *destination, - const CameraMetadata &requestMetadata, - CameraMetadata *metadata) override; + Camera3RequestDescriptor *context) override; private: bool isValidBuffers(const libcamera::FrameBuffer *source,