From patchwork Sun Jan 31 22:46:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 11095 X-Patchwork-Delegate: laurent.pinchart@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 A0C63BD808 for ; Sun, 31 Jan 2021 22:47:44 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 64E5D683F0; Sun, 31 Jan 2021 23:47:44 +0100 (CET) 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="DnljjMWc"; 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 68D8E683E0 for ; Sun, 31 Jan 2021 23:47:34 +0100 (CET) Received: from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id E6832E04; Sun, 31 Jan 2021 23:47:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1612133254; bh=68rngc+q0/iNYmw88fLcyYaXd5/7OCNEnogt2/chMEo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DnljjMWcOg8kGWeJfD6fkiE9TD4060iLCTWptBuiDGaCadrJ4iHh+QQBnnMzkpK/v w8FqNwwEFc9zL8HHQXRdJNG1TSHWpmzgHsI9DKaAzMj8HRNOSvNHrSf8dsVEtgliEy 2wOEbckMPd3Hz/l4YDw1hvTxHGwncEl8R97e+8Ao= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Mon, 1 Feb 2021 00:46:58 +0200 Message-Id: <20210131224702.8838-17-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20210131224702.8838-1-laurent.pinchart@ideasonboard.com> References: <20210131224702.8838-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 16/20] libcamera: pipeline: simple: Move converter data to camera data 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: , Cc: Phi-Bang Nguyen Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Converter usage is a per-camera property, move its data to the SimpleCameraData class. Signed-off-by: Laurent Pinchart Reviewed-by: Paul Elder Reviewed-by: Kieran Bingham --- src/libcamera/pipeline/simple/simple.cpp | 46 ++++++++++++------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index 6a8253101a61..9dffe64ee870 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -170,6 +170,10 @@ public: std::vector configs_; std::map formats_; + + std::vector> converterBuffers_; + bool useConverter_; + std::queue converterQueue_; }; class SimpleCameraConfiguration : public CameraConfiguration @@ -239,9 +243,6 @@ private: std::map subdevs_; std::unique_ptr converter_; - bool useConverter_; - std::vector> converterBuffers_; - std::queue converterQueue_; Camera *activeCamera_; }; @@ -692,9 +693,8 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c) } /* Configure the converter if required. */ - useConverter_ = config->needConversion(); - - if (useConverter_) { + data->useConverter_ = config->needConversion(); + if (data->useConverter_) { StreamConfiguration inputCfg; inputCfg.pixelFormat = pipeConfig->captureFormat; inputCfg.size = pipeConfig->captureSize; @@ -726,7 +726,7 @@ int SimplePipelineHandler::exportFrameBuffers(Camera *camera, Stream *stream, * Export buffers on the converter or capture video node, depending on * whether the converter is used or not. */ - if (useConverter_) + if (data->useConverter_) return converter_->exportBuffers(0, count, buffers); else return data->video_->exportBuffers(count, buffers); @@ -739,8 +739,8 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] ControlList *c unsigned int count = data->streams_[0].configuration().bufferCount; int ret; - if (useConverter_) - ret = video->allocateBuffers(count, &converterBuffers_); + if (data->useConverter_) + ret = video->allocateBuffers(count, &data->converterBuffers_); else ret = video->importBuffers(count); if (ret < 0) @@ -752,7 +752,7 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] ControlList *c return ret; } - if (useConverter_) { + if (data->useConverter_) { ret = converter_->start(); if (ret < 0) { stop(camera); @@ -760,7 +760,7 @@ int SimplePipelineHandler::start(Camera *camera, [[maybe_unused]] ControlList *c } /* Queue all internal buffers for capture. */ - for (std::unique_ptr &buffer : converterBuffers_) + for (std::unique_ptr &buffer : data->converterBuffers_) video->queueBuffer(buffer.get()); } @@ -774,13 +774,13 @@ void SimplePipelineHandler::stop(Camera *camera) SimpleCameraData *data = cameraData(camera); V4L2VideoDevice *video = data->video_; - if (useConverter_) + if (data->useConverter_) converter_->stop(); video->streamOff(); video->releaseBuffers(); - converterBuffers_.clear(); + data->converterBuffers_.clear(); activeCamera_ = nullptr; } @@ -800,8 +800,8 @@ int SimplePipelineHandler::queueRequestDevice(Camera *camera, Request *request) * If conversion is needed, push the buffer to the converter queue, it * will be handed to the converter in the capture completion handler. */ - if (useConverter_) { - converterQueue_.push(buffer); + if (data->useConverter_) { + data->converterQueue_.push(buffer); return 0; } @@ -977,7 +977,7 @@ void SimplePipelineHandler::bufferReady(FrameBuffer *buffer) * point converting an erroneous buffer. */ if (buffer->metadata().status != FrameMetadata::FrameSuccess) { - if (useConverter_) { + if (data->useConverter_) { /* Requeue the buffer for capture. */ data->video_->queueBuffer(buffer); @@ -985,11 +985,11 @@ void SimplePipelineHandler::bufferReady(FrameBuffer *buffer) * Get the next user-facing buffer to complete the * request. */ - if (converterQueue_.empty()) + if (data->converterQueue_.empty()) return; - buffer = converterQueue_.front(); - converterQueue_.pop(); + buffer = data->converterQueue_.front(); + data->converterQueue_.pop(); } Request *request = buffer->request(); @@ -1003,14 +1003,14 @@ void SimplePipelineHandler::bufferReady(FrameBuffer *buffer) * conversion is needed. If there's no queued request, just requeue the * captured buffer for capture. */ - if (useConverter_) { - if (converterQueue_.empty()) { + if (data->useConverter_) { + if (data->converterQueue_.empty()) { data->video_->queueBuffer(buffer); return; } - FrameBuffer *output = converterQueue_.front(); - converterQueue_.pop(); + FrameBuffer *output = data->converterQueue_.front(); + data->converterQueue_.pop(); converter_->queueBuffers(buffer, { { 0, output } }); return;