[libcamera-devel] [PATCH v5 2/7] libcamera: camera: Propagate freeBuffers() error
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Apr 16 12:55:27 CEST 2019
Hello,
On Tue, Apr 16, 2019 at 01:43:28AM +0200, Niklas Söderlund wrote:
> On 2019-04-16 01:18:54 +0200, Jacopo Mondi wrote:
> > The error return code of PipelineHandler::freeBuffers() was not
> > propagate up to applications by the Camera class. Fix this by returning
> > the incremental error accumulated by multiple calls (one per Stream)
> > to freeBuffers().
> >
> > Do not return the error code of the call to freeBuffers() in the
> > allocateBuffers() method error path not to overwrite the original error
> > code returned from the allocation method.
> >
> > Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> > ---
> > src/libcamera/camera.cpp | 6 ++++--
> > 1 file changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp
> > index bdf14b31d8ee..7f2dc904df16 100644
> > --- a/src/libcamera/camera.cpp
> > +++ b/src/libcamera/camera.cpp
> > @@ -671,6 +671,8 @@ int Camera::allocateBuffers()
> > */
> > int Camera::freeBuffers()
> > {
> > + int ret = 0;
> > +
> > if (!stateIs(CameraPrepared))
> > return -EACCES;
> >
> > @@ -683,12 +685,12 @@ int Camera::freeBuffers()
> > * by the V4L2 device that has allocated them.
> > */
> > stream->bufferPool().destroyBuffers();
> > - pipe_->freeBuffers(this, stream);
> > + ret |= pipe_->freeBuffers(this, stream);
>
> Or:ing in errors here seems very strange as we are dealing with the
> standard error codes (EINVAL, EBUSY, etc). Would it not be saner to
> store and return the (potential) first error while still running
> freeBuffers() for all streams before returning?
>
> How about something like this
>
> int ret = 0;
>
> for (Stream *stream : activeStreams_) {
> int status = pipe_->freeBuffers(this, stream);
>
> if (!ret)
> ret = status;
> }
>
> return ret;
Or maybe merging this on top of the patch that refactors buffer
allocation ? The loop will then be gone.
> > }
> >
> > state_ = CameraConfigured;
> >
> > - return 0;
> > + return ret;
> > }
> >
> > /**
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list