Message ID | 20250815113400.20623-4-laurent.pinchart@ideasonboard.com |
---|---|
State | New |
Headers | show |
Series |
|
Related | show |
2025. 08. 15. 13:33 keltezéssel, Laurent Pinchart írta: > Use utils::exit_scope in PipelineHandlerRkISP1::allocateBuffers() to > avoid gotos for error handling. > > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> > src/libcamera/pipeline/rkisp1/rkisp1.cpp | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp > index 81370f4cdcba..55d7d4442caf 100644 > --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp > +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp > @@ -1002,21 +1002,27 @@ int PipelineHandlerRkISP1::allocateBuffers(Camera *camera) > unsigned int ipaBufferId = 1; > int ret; > > + auto errorCleanup = utils::scope_exit{ [&]() { > + paramBuffers_.clear(); > + statBuffers_.clear(); > + mainPathBuffers_.clear(); > + } }; > + > if (!isRaw_) { > ret = param_->allocateBuffers(kRkISP1MinBufferCount, ¶mBuffers_); > if (ret < 0) > - goto error; > + return ret; > > ret = stat_->allocateBuffers(kRkISP1MinBufferCount, &statBuffers_); > if (ret < 0) > - goto error; > + return ret; > } > > /* If the dewarper is being used, allocate internal buffers for ISP. */ > if (useDewarper_) { > ret = mainPath_.exportBuffers(kRkISP1MinBufferCount, &mainPathBuffers_); > if (ret < 0) > - goto error; > + return ret; > > for (std::unique_ptr<FrameBuffer> &buffer : mainPathBuffers_) > availableMainPathBuffers_.push(buffer.get()); > @@ -1038,14 +1044,8 @@ int PipelineHandlerRkISP1::allocateBuffers(Camera *camera) > > data->ipa_->mapBuffers(data->ipaBuffers_); > > + errorCleanup.release(); > return 0; > - > -error: > - paramBuffers_.clear(); > - statBuffers_.clear(); > - mainPathBuffers_.clear(); > - > - return ret; > } > > int PipelineHandlerRkISP1::freeBuffers(Camera *camera)
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index 81370f4cdcba..55d7d4442caf 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -1002,21 +1002,27 @@ int PipelineHandlerRkISP1::allocateBuffers(Camera *camera) unsigned int ipaBufferId = 1; int ret; + auto errorCleanup = utils::scope_exit{ [&]() { + paramBuffers_.clear(); + statBuffers_.clear(); + mainPathBuffers_.clear(); + } }; + if (!isRaw_) { ret = param_->allocateBuffers(kRkISP1MinBufferCount, ¶mBuffers_); if (ret < 0) - goto error; + return ret; ret = stat_->allocateBuffers(kRkISP1MinBufferCount, &statBuffers_); if (ret < 0) - goto error; + return ret; } /* If the dewarper is being used, allocate internal buffers for ISP. */ if (useDewarper_) { ret = mainPath_.exportBuffers(kRkISP1MinBufferCount, &mainPathBuffers_); if (ret < 0) - goto error; + return ret; for (std::unique_ptr<FrameBuffer> &buffer : mainPathBuffers_) availableMainPathBuffers_.push(buffer.get()); @@ -1038,14 +1044,8 @@ int PipelineHandlerRkISP1::allocateBuffers(Camera *camera) data->ipa_->mapBuffers(data->ipaBuffers_); + errorCleanup.release(); return 0; - -error: - paramBuffers_.clear(); - statBuffers_.clear(); - mainPathBuffers_.clear(); - - return ret; } int PipelineHandlerRkISP1::freeBuffers(Camera *camera)
Use utils::exit_scope in PipelineHandlerRkISP1::allocateBuffers() to avoid gotos for error handling. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)