From patchwork Fri Sep 25 01:41:45 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: 9798 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 9B8BDC3B5C for ; Fri, 25 Sep 2020 01:42:42 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 0321962FF8; Fri, 25 Sep 2020 03:42:42 +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 4A55960576 for ; Fri, 25 Sep 2020 03:42:41 +0200 (CEST) X-Halon-ID: 599d7282-fed0-11ea-92dc-005056917a89 Authorized-sender: niklas.soderlund@fsdn.se Received: from bismarck.berto.se (p54ac52a8.dip0.t-ipconnect.de [84.172.82.168]) by bin-vsp-out-01.atm.binero.net (Halon) with ESMTPA id 599d7282-fed0-11ea-92dc-005056917a89; Fri, 25 Sep 2020 03:42:39 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Fri, 25 Sep 2020 03:41:45 +0200 Message-Id: <20200925014207.1455796-1-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.28.0 MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 00/22] libcamera: pipeline: rkisp1: Extend to support two streams 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" Hi, This series extends the RkISP1 pipeline handler to work with 2 streams. It allows cameras backed by this pipeline to expose a main path stream, same as the one before this series. And a new self path stream that can operate in addition or independently from the main path. In previous versions of this series RGB formats where added to the self path (new formats not supported by the main path) but further examination of those formats resulted in that the captured frames looks weird. Pending future investigation drop that work from this series. Furthermore this series does not extend support for RAW formats as this is such a special case for this pipeline. Only the main path may be active and no ISP parameters can be processed. This may be added on top but functionality have been proven as a prototype. New in this version are patches 15/22 to 21/22 that adds a new RkISP1Path class which abstracts the two paths into a single helper class with shared logic. The shared logic can then be leveraged to simplify the pipeline handler. Patch 22/22 is an attempt to use a lambda function to further simplify error logic in start(). It is primary provided as a proof-of-concept and should be regarded as RFC. To be able to use both main and self path simultaneously must run a kernel that includes [1]. The development of the series is tested on the media-tree [2] with out-of-tree DTS patches for the test Scarlet platform to enable the camera sensors. 1. 60e915354c270357 ("media: staging: rkisp1: cap: fix return values from pm functions") 2. f45882cfb152f5d3 ("media: camss: fix memory leaks on error handling paths in probe") Niklas Söderlund (22): libcamera: pipeline: rkisp1: Set number of planes based on format libcamera: pipeline: rkisp1: Remove redundant check of buffer in Request libcamera: pipeline: rkisp1: Breakout mainpath size and format constraints libcamera: pipeline: rkisp1: Setup links as part of configuration libcamera: pipeline: rkisp1: Prepare buffer ready handlers for multiple streams libcamera: pipeline: rkisp1: Create RkISP1Frames from camera data libcamera: pipeline: rkisp1: Export stream formats to applications libcamera: pipeline: rkisp1: Set the crop rectangle libcamera: pipeline: rkisp1: Prefix main path video and resizer libcamera: pipeline: rkisp1: Add self path devices libcamera: pipeline: rkisp1: Configure self path libcamera: pipeline: rkisp1: Track buffers for self path libcamera: pipeline: rkisp1: Add format validation for self path libcamera: pipeline: rkisp1: Expose self path stream libcamera: pipeline: rkisp1: Breakout basic path handling to own class libcamera: pipeline: rkisp1: Move path configuration to RkISP1Path libcamera: pipeline: rkisp1: Move path configuration generation and validation to RkISP1Path libcamera: pipeline: rkisp1: Add wrappers for accessing the path video device libcamera: pipeline: rkisp1: Move start and stop of path to RkISP1Path libcamera: pipeline: rkisp1: Move path link handling to RkISP1Path libcamera: pipeline: rkisp1: Use the media link to track if a path is enabled libcamera: pipeline: rkisp1: Use cleanup error paths for start() src/libcamera/pipeline/rkisp1/meson.build | 1 + src/libcamera/pipeline/rkisp1/rkisp1.cpp | 555 +++++++++++-------- src/libcamera/pipeline/rkisp1/rkisp1path.cpp | 237 ++++++++ src/libcamera/pipeline/rkisp1/rkisp1path.h | 83 +++ 4 files changed, 633 insertions(+), 243 deletions(-) create mode 100644 src/libcamera/pipeline/rkisp1/rkisp1path.cpp create mode 100644 src/libcamera/pipeline/rkisp1/rkisp1path.h