[libcamera-devel] [PATCH 13/14] libcamera: pipeline: rkisp1: Factorize errors handling path on start()

Xavier Roumegue xavier.roumegue at oss.nxp.com
Thu Sep 8 20:48:49 CEST 2022


Signed-off-by: Xavier Roumegue <xavier.roumegue at oss.nxp.com>
---
 src/libcamera/pipeline/rkisp1/rkisp1.cpp | 45 +++++++++++-------------
 1 file changed, 21 insertions(+), 24 deletions(-)

diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 25fbf9f1..c1522ca6 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -828,59 +828,56 @@ int PipelineHandlerRkISP1::start(Camera *camera, [[maybe_unused]] const ControlL
 
 	ret = data->ipa_->start();
 	if (ret) {
-		freeBuffers(camera);
 		LOG(RkISP1, Error)
 			<< "Failed to start IPA " << camera->id();
-		return ret;
+		goto ipa_err;
 	}
 
 	data->frame_ = 0;
 
 	ret = param_->streamOn();
 	if (ret) {
-		data->ipa_->stop();
-		freeBuffers(camera);
 		LOG(RkISP1, Error)
 			<< "Failed to start parameters " << camera->id();
-		return ret;
+		goto param_err;
 	}
 
 	ret = stat_->streamOn();
 	if (ret) {
-		param_->streamOff();
-		data->ipa_->stop();
-		freeBuffers(camera);
 		LOG(RkISP1, Error)
 			<< "Failed to start statistics " << camera->id();
-		return ret;
+		goto stat_err;
 	}
 
 	if (data->mainPath_->isEnabled()) {
 		ret = mainPath_.start();
-		if (ret) {
-			param_->streamOff();
-			stat_->streamOff();
-			data->ipa_->stop();
-			freeBuffers(camera);
-			return ret;
-		}
+		if (ret)
+			goto main_err;
 	}
 
 	if (hasSelfPath_ && data->selfPath_->isEnabled()) {
 		ret = selfPath_.start();
-		if (ret) {
-			mainPath_.stop();
-			param_->streamOff();
-			stat_->streamOff();
-			data->ipa_->stop();
-			freeBuffers(camera);
-			return ret;
-		}
+		if (ret)
+			goto self_err;
 	}
 
 	isp_->setFrameStartEnabled(true);
 
 	activeCamera_ = camera;
+	goto no_err;
+
+self_err:
+	if (data->mainPath_->isEnabled())
+		mainPath_.stop();
+main_err:
+	stat_->streamOff();
+stat_err:
+	param_->streamOff();
+param_err:
+	data->ipa_->stop();
+ipa_err:
+	freeBuffers(camera);
+no_err:
 	return ret;
 }
 
-- 
2.37.3



More information about the libcamera-devel mailing list