[libcamera-devel] [PATCH v3 4/8] android: camera_device: Clear allocator at configureStream

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Oct 2 04:00:40 CEST 2020


Hi Jacopo,

On Wed, Sep 30, 2020 at 01:04:53PM +0200, Jacopo Mondi wrote:
> On Tue, Sep 29, 2020 at 04:53:31AM +0300, Laurent Pinchart wrote:
> > On Tue, Sep 29, 2020 at 04:51:32AM +0300, Laurent Pinchart wrote:
> > > On Tue, Sep 22, 2020 at 11:47:34AM +0200, Jacopo Mondi wrote:
> > > > The configureStream operation might be called by the Android framework
> > > > in two successive capture session without going through a close().
> > >
> > > With s/session/sessions/,
> > >
> > > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> >
> > Not necessarily for this patch, but shouldn't we also free buffers (and
> > probably clear streams_ too) in CameraDevice::close() ?
> 
> I guess it doesn't hurt, indeed. When the camera is closed it's
> indeed relevant to release all the allocated buffers, even if any new
> allocation happens at configureStream() time, where we already call
> freeAll().

If the camera is closed the buffers will remain there until the camera
is used again. It's not a memory leak as such as they will eventually be
freed, but we will hold on large pieces of memory that are completely
unused. Not very nice :-)

> Regarding streams_, being that internal memory released at
> configureStream() time before any other CameraStream is created, I
> think it's less relevant... I can make a separate patch to do so on
> top of this one.

streams_ is less of an issue as it's a fairly small amount of memory,
but I think cleaning up properly at close() time would be a good idea.

A separate patch is totally fine.

> > > > Clear all the allocated buffers before configuring the camera streams.
> > > >
> > > > Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> > > > Reviewed-by: Hirokazu Honda <hiroh at chromium.org>
> > > > Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> > > > ---
> > > >  src/android/camera_device.cpp | 7 ++++---
> > > >  1 file changed, 4 insertions(+), 3 deletions(-)
> > > >
> > > > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> > > > index 98b8159ebd8c..42fb9ea4e113 100644
> > > > --- a/src/android/camera_device.cpp
> > > > +++ b/src/android/camera_device.cpp
> > > > @@ -1182,12 +1182,13 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
> > > >  	}
> > > >
> > > >  	/*
> > > > -	 * Clear and remove any existing configuration from previous calls, and
> > > > -	 * ensure the required entries are available without further
> > > > -	 * reallocation.
> > > > +	 * Clear and remove any existing configuration and memory allocated from
> > > > +	 * previous calls, and ensure the required entries are available without
> > > > +	 * further reallocation.
> > > >  	 */
> > > >  	streams_.clear();
> > > >  	streams_.reserve(stream_list->num_streams);
> > > > +	allocator_.clear();
> > > >
> > > >  	/* First handle all non-MJPEG streams. */
> > > >  	camera3_stream_t *jpegStream = nullptr;

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list