From patchwork Fri Sep 25 01:42:07 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: 9820 X-Patchwork-Delegate: niklas.soderlund@ragnatech.se 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 77DF8C3B5F for ; Fri, 25 Sep 2020 01:43:04 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 1CA6463019; Fri, 25 Sep 2020 03:43:04 +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 6072063034 for ; Fri, 25 Sep 2020 03:42:58 +0200 (CEST) X-Halon-ID: 6fca2bdb-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 6fca2bdb-fed0-11ea-92dc-005056917a89; Fri, 25 Sep 2020 03:42:57 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Fri, 25 Sep 2020 03:42:07 +0200 Message-Id: <20200925014207.1455796-23-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200925014207.1455796-1-niklas.soderlund@ragnatech.se> References: <20200925014207.1455796-1-niklas.soderlund@ragnatech.se> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 22/22] libcamera: pipeline: rkisp1: Use cleanup error paths for start() 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" Use a lambda function to make the error paths a bit cleaner in start(), no functional change. Signed-off-by: Niklas Söderlund --- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 98 ++++++++++++------------ 1 file changed, 51 insertions(+), 47 deletions(-) diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index c6c2e3aa3dc6d0dc..34196af3057b14bb 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -827,58 +827,62 @@ int PipelineHandlerRkISP1::start(Camera *camera) RkISP1CameraData *data = cameraData(camera); int ret; - /* Allocate buffers for internal pipeline usage. */ - ret = allocateBuffers(camera); - if (ret) - return ret; - - ret = data->ipa_->start(); - if (ret) { - freeBuffers(camera); - LOG(RkISP1, Error) - << "Failed to start IPA " << camera->id(); - return ret; - } - - data->frame_ = 0; - - ret = param_->streamOn(); - if (ret) { - data->ipa_->stop(); - freeBuffers(camera); - LOG(RkISP1, Error) - << "Failed to start parameters " << camera->id(); - return ret; - } - - ret = stat_->streamOn(); - if (ret) { - param_->streamOff(); - data->ipa_->stop(); - freeBuffers(camera); - LOG(RkISP1, Error) - << "Failed to start statistics " << camera->id(); - return ret; - } - - ret = mainPath_.start(); - if (ret) { - param_->streamOff(); - stat_->streamOff(); - data->ipa_->stop(); - freeBuffers(camera); - return ret; - } - - ret = selfPath_.start(); - if (ret) { + auto startDevices = [this](Camera *camera, RkISP1CameraData *data) { + int ret; + + /* Allocate buffers for internal pipeline usage. */ + ret = allocateBuffers(camera); + if (ret) + return ret; + + ret = data->ipa_->start(); + if (ret) { + LOG(RkISP1, Error) + << "Failed to start IPA " << camera->id(); + goto err_allocate; + } + + data->frame_ = 0; + + ret = param_->streamOn(); + if (ret) { + LOG(RkISP1, Error) + << "Failed to start parameters " << camera->id(); + goto err_ipa; + } + + ret = stat_->streamOn(); + if (ret) { + LOG(RkISP1, Error) + << "Failed to start statistics " << camera->id(); + goto err_param; + } + + ret = mainPath_.start(); + if (ret) + goto err_stat; + + ret = selfPath_.start(); + if (ret) + goto err_main; + + return 0; + err_main: mainPath_.stop(); - param_->streamOff(); + err_stat: stat_->streamOff(); + err_param: + param_->streamOff(); + err_ipa: data->ipa_->stop(); + err_allocate: freeBuffers(camera); return ret; - } + }; + + ret = startDevices(camera, data); + if (ret) + return ret; activeCamera_ = camera;