From patchwork Tue Sep 29 01:43:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Niklas_S=C3=B6derlund?= X-Patchwork-Id: 9847 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 2FCD8C3B5B for ; Tue, 29 Sep 2020 01:43:53 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 09A4061FE5; Tue, 29 Sep 2020 03:43:53 +0200 (CEST) Received: from bin-mail-out-05.binero.net (bin-mail-out-05.binero.net [195.74.38.228]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 017056213B for ; Tue, 29 Sep 2020 03:43:50 +0200 (CEST) X-Halon-ID: 365502a1-01f5-11eb-b295-0050569116f7 Authorized-sender: niklas.soderlund@fsdn.se Received: from bismarck.berto.se (p54ac52a8.dip0.t-ipconnect.de [84.172.82.168]) by bin-vsp-out-03.atm.binero.net (Halon) with ESMTPA id 365502a1-01f5-11eb-b295-0050569116f7; Tue, 29 Sep 2020 03:43:47 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Tue, 29 Sep 2020 03:43:29 +0200 Message-Id: <20200929014334.49719-3-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200929014334.49719-1-niklas.soderlund@ragnatech.se> References: <20200929014334.49719-1-niklas.soderlund@ragnatech.se> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v4 2/7] libcamera: pipeline: rkisp1: Move path configuration to RkISP1Path 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" Move the path configuration to RkISP1Path to increase code reuse and make the V4L2 subdevice resizer private to the path. There is no functional change. Signed-off-by: Niklas Söderlund Reviewed-by: Laurent Pinchart --- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 55 ++----------------- src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 55 ++++++++++++++++++- src/libcamera/pipeline/rkisp1/rkisp1_path.h | 10 +++- 3 files changed, 68 insertions(+), 52 deletions(-) diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index 84b5164bd040e617..13e0666d80050b51 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -812,60 +812,17 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c) data->mainPathActive_ = false; data->selfPathActive_ = false; for (const StreamConfiguration &cfg : *config) { - V4L2SubdeviceFormat ispFormat = format; - V4L2Subdevice *resizer; - V4L2VideoDevice *video; - if (cfg.stream() == &data->mainPathStream_) { - resizer = mainPath_.resizer_; - video = mainPath_.video_; + ret = mainPath_.configure(cfg, format); + if (ret) + return ret; data->mainPathActive_ = true; } else { - resizer = selfPath_.resizer_; - video = selfPath_.video_; + ret = selfPath_.configure(cfg, format); + if (ret) + return ret; data->selfPathActive_ = true; } - - ret = resizer->setFormat(0, &ispFormat); - if (ret < 0) - return ret; - - const char *name = resizer == mainPath_.resizer_ ? "main" : "self"; - - LOG(RkISP1, Debug) - << "Configured " << name << " resizer input pad with " - << ispFormat.toString(); - - ispFormat.size = cfg.size; - - LOG(RkISP1, Debug) - << "Configuring " << name << " resizer output pad with " - << ispFormat.toString(); - - ret = resizer->setFormat(1, &ispFormat); - if (ret < 0) - return ret; - - LOG(RkISP1, Debug) - << "Configured " << name << " resizer output pad with " - << ispFormat.toString(); - - const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat); - V4L2DeviceFormat outputFormat = {}; - outputFormat.fourcc = video->toV4L2PixelFormat(cfg.pixelFormat); - outputFormat.size = cfg.size; - outputFormat.planesCount = info.numPlanes(); - - ret = video->setFormat(&outputFormat); - if (ret) - return ret; - - if (outputFormat.size != cfg.size || - outputFormat.fourcc != video->toV4L2PixelFormat(cfg.pixelFormat)) { - LOG(RkISP1, Error) - << "Unable to configure capture in " << cfg.toString(); - return -EINVAL; - } } V4L2DeviceFormat paramFormat = {}; diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp index 2eae42340c23783c..66b5eebdcb804e24 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp @@ -7,14 +7,18 @@ #include "rkisp1_path.h" +#include + #include "libcamera/internal/media_device.h" #include "libcamera/internal/v4l2_subdevice.h" #include "libcamera/internal/v4l2_videodevice.h" namespace libcamera { +LOG_DECLARE_CATEGORY(RkISP1) + RkISP1Path::RkISP1Path(const char *name) - : resizer_(nullptr), video_(nullptr), name_(name) + : video_(nullptr), name_(name), resizer_(nullptr) { } @@ -40,6 +44,55 @@ bool RkISP1Path::init(MediaDevice *media) return true; } +int RkISP1Path::configure(const StreamConfiguration &config, + const V4L2SubdeviceFormat &inputFormat) +{ + int ret; + + V4L2SubdeviceFormat ispFormat = inputFormat; + + ret = resizer_->setFormat(0, &ispFormat); + if (ret < 0) + return ret; + + LOG(RkISP1, Debug) + << "Configured " << name_ << " resizer input pad with " + << ispFormat.toString(); + + ispFormat.size = config.size; + + LOG(RkISP1, Debug) + << "Configuring " << name_ << " resizer output pad with " + << ispFormat.toString(); + + ret = resizer_->setFormat(1, &ispFormat); + if (ret < 0) + return ret; + + LOG(RkISP1, Debug) + << "Configured " << name_ << " resizer output pad with " + << ispFormat.toString(); + + const PixelFormatInfo &info = PixelFormatInfo::info(config.pixelFormat); + V4L2DeviceFormat outputFormat = {}; + outputFormat.fourcc = video_->toV4L2PixelFormat(config.pixelFormat); + outputFormat.size = config.size; + outputFormat.planesCount = info.numPlanes(); + + ret = video_->setFormat(&outputFormat); + if (ret) + return ret; + + if (outputFormat.size != config.size || + outputFormat.fourcc != video_->toV4L2PixelFormat(config.pixelFormat)) { + LOG(RkISP1, Error) + << "Unable to configure capture in " << config.toString(); + return -EINVAL; + } + + return 0; +} + RkISP1MainPath::RkISP1MainPath() : RkISP1Path("main") { diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.h b/src/libcamera/pipeline/rkisp1/rkisp1_path.h index d3172e228a3f67bf..6eb01529d2fddb1c 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.h +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.h @@ -12,6 +12,8 @@ namespace libcamera { class MediaDevice; class V4L2Subdevice; class V4L2VideoDevice; +struct StreamConfiguration; +struct V4L2SubdeviceFormat; class RkISP1Path { @@ -21,12 +23,16 @@ public: bool init(MediaDevice *media); - /* \todo Make resizer and video private. */ - V4L2Subdevice *resizer_; + int configure(const StreamConfiguration &config, + const V4L2SubdeviceFormat &inputFormat); + + /* \todo Make video private. */ V4L2VideoDevice *video_; private: const char *name_; + + V4L2Subdevice *resizer_; }; class RkISP1MainPath : public RkISP1Path