From patchwork Mon Sep 20 17:37:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 13872 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 A4F97BF01C for ; Mon, 20 Sep 2021 17:38:18 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 6BCCD6919A; Mon, 20 Sep 2021 19:38:18 +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="WjTd72QG"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id B2C436918A for ; Mon, 20 Sep 2021 19:38:16 +0200 (CEST) Received: from perceval.ideasonboard.com (unknown [103.251.226.144]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id B39CE45E; Mon, 20 Sep 2021 19:38:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1632159496; bh=NodJbV49AofcC4UIUTM3F8u44WF85VPPDRG5zjG7GA4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WjTd72QGDgWqnGt9jQvwSkO+VqhfAGHJo4mM+tbTWztxiKKYng/2aTC6o1lbJEYUZ qozoWN6JvBJ852CbrOH778EuY+9cirbmOam1SeASl4cGRwjFEzkvVYIyL/yX1aW8nl peaM5KF/iMpU7H2QdlfZuxbaIqxPfQ0JvnLXZ+HY= From: Umang Jain To: libcamera-devel@lists.libcamera.org Date: Mon, 20 Sep 2021 23:07:50 +0530 Message-Id: <20210920173752.1346190-9-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 08/10] android: camera_stream: Drop return value for process() 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" CameraStream::process() is invoked by CameraDevice::requestComplete() in case any post-processing is required for the camera stream. The failure or success is checked via the value returned by CameraStream::process(). Now that the post-processor notifies about the post-processing completion operation and sets the ProcessStatus on the Camera3RequestDescriptor passed to it, we can drop the return value of CameraStream::process() in favour of reading the process status set on the descriptor in the PostProcessor::processComplete's slot. Signed-off-by: Umang Jain --- src/android/camera_device.cpp | 26 +++++++++++++----------- src/android/camera_stream.cpp | 12 +++++------ src/android/camera_stream.h | 6 +++--- src/android/jpeg/post_processor_jpeg.cpp | 12 +++++------ src/android/jpeg/post_processor_jpeg.h | 6 +++--- src/android/post_processor.h | 6 +++--- src/android/yuv/post_processor_yuv.cpp | 14 ++++++------- src/android/yuv/post_processor_yuv.h | 6 +++--- 8 files changed, 43 insertions(+), 45 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index e2de4012..4658e881 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -1158,7 +1158,7 @@ void CameraDevice::requestComplete(Request *request) descriptor->status_ = Camera3RequestDescriptor::ProcessStatus::Processing; - int ret = cameraStream->process(src, *buffer.buffer, descriptor); + cameraStream->process(src, *buffer.buffer, descriptor); /* * Return the FrameBuffer to the CameraStream now that we're @@ -1166,12 +1166,6 @@ void CameraDevice::requestComplete(Request *request) */ if (cameraStream->type() == CameraStream::Type::Internal) cameraStream->putBuffer(src); - - if (ret) { - buffer.status = CAMERA3_BUFFER_STATUS_ERROR; - notifyError(descriptor->frameNumber_, buffer.stream, - CAMERA3_MSG_ERROR_BUFFER); - } } captureResult.result = descriptor->resultMetadata_->get(); @@ -1182,12 +1176,20 @@ void CameraDevice::requestComplete(Request *request) void CameraDevice::streamProcessingComplete([[maybe_unused]] CameraStream *cameraStream, - [[maybe_unused]] Camera3RequestDescriptor *request) + Camera3RequestDescriptor *request) { - /* - * \todo Stream processing is completed hence, check for errors and - * if any, mark the corresponding buffer with CAMERA3_BUFFER_STATUS_ERROR. - */ + if (request->status_ == Camera3RequestDescriptor::ProcessStatus::Error) { + for (camera3_stream_buffer_t &buffer : request->buffers_) { + CameraStream *cs = static_cast(buffer.stream->priv); + + if (cs->camera3Stream().format != HAL_PIXEL_FORMAT_BLOB) + continue; + + buffer.status = CAMERA3_BUFFER_STATUS_ERROR; + notifyError(request->frameNumber_, buffer.stream, + CAMERA3_MSG_ERROR_BUFFER); + } + } } std::string CameraDevice::logPrefix() const diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp index 70471959..c18c7041 100644 --- a/src/android/camera_stream.cpp +++ b/src/android/camera_stream.cpp @@ -101,14 +101,14 @@ int CameraStream::configure() return 0; } -int CameraStream::process(const FrameBuffer *source, - buffer_handle_t camera3Dest, - Camera3RequestDescriptor *request) +void CameraStream::process(const FrameBuffer *source, + buffer_handle_t camera3Dest, + Camera3RequestDescriptor *request) { if (!postProcessor_) { request->status_ = Camera3RequestDescriptor::ProcessStatus::Error; handleProcessComplete(request); - return 0; + return; } /* @@ -122,10 +122,10 @@ int CameraStream::process(const FrameBuffer *source, LOG(HAL, Error) << "Failed to map android blob buffer"; request->status_ = Camera3RequestDescriptor::ProcessStatus::Error; handleProcessComplete(request); - return -EINVAL; + return; } - return postProcessor_->process(source, &dest, request); + postProcessor_->process(source, &dest, request); } void CameraStream::handleProcessComplete(Camera3RequestDescriptor *request) diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h index f8ad6245..d4ec5c25 100644 --- a/src/android/camera_stream.h +++ b/src/android/camera_stream.h @@ -120,9 +120,9 @@ public: libcamera::Stream *stream() const; int configure(); - int process(const libcamera::FrameBuffer *source, - buffer_handle_t camera3Dest, - Camera3RequestDescriptor *request); + void process(const libcamera::FrameBuffer *source, + buffer_handle_t camera3Dest, + 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 87252acd..19eb7983 100644 --- a/src/android/jpeg/post_processor_jpeg.cpp +++ b/src/android/jpeg/post_processor_jpeg.cpp @@ -97,14 +97,14 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer *source, } } -int PostProcessorJpeg::process(const FrameBuffer *source, - CameraBuffer *destination, - Camera3RequestDescriptor *request) +void PostProcessorJpeg::process(const FrameBuffer *source, + CameraBuffer *destination, + Camera3RequestDescriptor *request) { if (!encoder_) { request->status_ = Camera3RequestDescriptor::ProcessStatus::Error; processComplete.emit(request); - return 0; + return; } ASSERT(destination->numPlanes() == 1); @@ -202,7 +202,7 @@ int PostProcessorJpeg::process(const FrameBuffer *source, LOG(JPEG, Error) << "Failed to encode stream image"; request->status_ = Camera3RequestDescriptor::ProcessStatus::Error; processComplete.emit(request); - return jpeg_size; + return; } /* Fill in the JPEG blob header. */ @@ -218,6 +218,4 @@ int PostProcessorJpeg::process(const FrameBuffer *source, request->status_ = Camera3RequestDescriptor::ProcessStatus::Success; processComplete.emit(request); - - return 0; } diff --git a/src/android/jpeg/post_processor_jpeg.h b/src/android/jpeg/post_processor_jpeg.h index d49c8d2b..e9938919 100644 --- a/src/android/jpeg/post_processor_jpeg.h +++ b/src/android/jpeg/post_processor_jpeg.h @@ -22,9 +22,9 @@ public: int configure(const libcamera::StreamConfiguration &incfg, const libcamera::StreamConfiguration &outcfg) override; - int process(const libcamera::FrameBuffer *source, - CameraBuffer *destination, - Camera3RequestDescriptor *request) override; + void process(const libcamera::FrameBuffer *source, + CameraBuffer *destination, + 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 f639b237..48ddd8ac 100644 --- a/src/android/post_processor.h +++ b/src/android/post_processor.h @@ -25,9 +25,9 @@ public: virtual int configure(const libcamera::StreamConfiguration &inCfg, const libcamera::StreamConfiguration &outCfg) = 0; - virtual int process(const libcamera::FrameBuffer *source, - CameraBuffer *destination, - Camera3RequestDescriptor *request) = 0; + virtual void process(const libcamera::FrameBuffer *source, + CameraBuffer *destination, + Camera3RequestDescriptor *request) = 0; libcamera::Signal processComplete; }; diff --git a/src/android/yuv/post_processor_yuv.cpp b/src/android/yuv/post_processor_yuv.cpp index b144649a..09838aa5 100644 --- a/src/android/yuv/post_processor_yuv.cpp +++ b/src/android/yuv/post_processor_yuv.cpp @@ -51,14 +51,14 @@ int PostProcessorYuv::configure(const StreamConfiguration &inCfg, return 0; } -int PostProcessorYuv::process(const FrameBuffer *source, - CameraBuffer *destination, - Camera3RequestDescriptor *request) +void PostProcessorYuv::process(const FrameBuffer *source, + CameraBuffer *destination, + Camera3RequestDescriptor *request) { if (!isValidBuffers(source, *destination)) { request->status_ = Camera3RequestDescriptor::ProcessStatus::Error; processComplete.emit(request); - return -EINVAL; + return; } const MappedFrameBuffer sourceMapped(source, MappedFrameBuffer::MapFlag::Read); @@ -66,7 +66,7 @@ int PostProcessorYuv::process(const FrameBuffer *source, LOG(YUV, Error) << "Failed to mmap camera frame buffer"; request->status_ = Camera3RequestDescriptor::ProcessStatus::Error; processComplete.emit(request); - return -EINVAL; + return; } int ret = libyuv::NV12Scale(sourceMapped.planes()[0].data(), @@ -85,13 +85,11 @@ int PostProcessorYuv::process(const FrameBuffer *source, LOG(YUV, Error) << "Failed NV12 scaling: " << ret; request->status_ = Camera3RequestDescriptor::ProcessStatus::Error; processComplete.emit(request); - return -EINVAL; + return; } request->status_ = Camera3RequestDescriptor::ProcessStatus::Success; processComplete.emit(request); - - return 0; } bool PostProcessorYuv::isValidBuffers(const FrameBuffer *source, diff --git a/src/android/yuv/post_processor_yuv.h b/src/android/yuv/post_processor_yuv.h index eddd1086..32e5b60d 100644 --- a/src/android/yuv/post_processor_yuv.h +++ b/src/android/yuv/post_processor_yuv.h @@ -20,9 +20,9 @@ public: int configure(const libcamera::StreamConfiguration &incfg, const libcamera::StreamConfiguration &outcfg) override; - int process(const libcamera::FrameBuffer *source, - CameraBuffer *destination, - Camera3RequestDescriptor *context) override; + void process(const libcamera::FrameBuffer *source, + CameraBuffer *destination, + Camera3RequestDescriptor *context) override; private: bool isValidBuffers(const libcamera::FrameBuffer *source,