From patchwork Fri Oct 9 13:39:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 10040 X-Patchwork-Delegate: jacopo@jmondi.org 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 DAF57BEEE0 for ; Fri, 9 Oct 2020 13:36:31 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id B83136073B; Fri, 9 Oct 2020 15:36:31 +0200 (CEST) Received: from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net [217.70.183.199]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id C39FA6081E for ; Fri, 9 Oct 2020 15:36:29 +0200 (CEST) X-Originating-IP: 93.34.118.233 Received: from uno.lan (93-34-118-233.ip49.fastwebnet.it [93.34.118.233]) (Authenticated sender: jacopo@jmondi.org) by relay9-d.mail.gandi.net (Postfix) with ESMTPSA id 47EEEFF817; Fri, 9 Oct 2020 13:36:29 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Fri, 9 Oct 2020 15:39:56 +0200 Message-Id: <20201009133956.77396-3-jacopo@jmondi.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201009133956.77396-1-jacopo@jmondi.org> References: <20201009133956.77396-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 2/2] android: camera_device: Queue request to Worker 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" Add a CameraWorker class member to the CameraDevice class and queue capture requests to it to delegate fence handling and capture requests queueing to the camera. Signed-off-by: Jacopo Mondi Reviewed-by: Laurent Pinchart --- src/android/camera_device.cpp | 19 +++++++++---------- src/android/camera_device.h | 3 +++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 0a94c1ae17ac..0e42e2e194d8 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -194,8 +194,8 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor() */ CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr &camera) - : id_(id), running_(false), camera_(camera), staticMetadata_(nullptr), - facing_(CAMERA_FACING_FRONT), orientation_(0) + : id_(id), worker_(camera), running_(false), camera_(camera), + staticMetadata_(nullptr), facing_(CAMERA_FACING_FRONT), orientation_(0) { camera_->requestCompleted.connect(this, &CameraDevice::requestComplete); @@ -519,6 +519,7 @@ void CameraDevice::close() { streams_.clear(); + worker_.stop(); camera_->stop(); camera_->release(); @@ -1356,6 +1357,8 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques return ret; } + worker_.start(); + running_ = true; } @@ -1377,6 +1380,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques Request *request = camera_->createRequest(reinterpret_cast(descriptor)); + std::unique_ptr captureRequest = std::make_unique(request); LOG(HAL, Debug) << "Queueing Request to libcamera with " << descriptor->numBuffers << " HAL streams"; @@ -1445,16 +1449,11 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques return -ENOMEM; } - request->addBuffer(cameraStream->stream(), buffer); + captureRequest->addBuffer(cameraStream->stream(), buffer, + camera3Buffers[i].acquire_fence); } - int ret = camera_->queueRequest(request); - if (ret) { - LOG(HAL, Error) << "Failed to queue request"; - delete request; - delete descriptor; - return ret; - } + worker_.queueRequest(std::move(captureRequest)); return 0; } diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 777d1a35e801..b4b32f77a29a 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -25,6 +25,7 @@ #include "libcamera/internal/message.h" #include "camera_stream.h" +#include "camera_worker.h" #include "jpeg/encoder.h" class CameraMetadata; @@ -108,6 +109,8 @@ private: unsigned int id_; camera3_device_t camera3Device_; + CameraWorker worker_; + bool running_; std::shared_ptr camera_; std::unique_ptr config_;