[libcamera-devel] [PATCH 03/15] android: camera_stream: Delegate Encoder construction

Jacopo Mondi jacopo at jmondi.org
Tue Oct 6 13:21:02 CEST 2020


Hi Umang,

On Tue, Oct 06, 2020 at 04:37:45PM +0530, Umang Jain wrote:
> Hi Jacopo,
>
> On 10/5/20 4:16 PM, Laurent Pinchart wrote:
> > From: Jacopo Mondi <jacopo at jmondi.org>
> >
> > Delegate the construction of the encoder to the CameraStream class
> > for streams that need post-processing.
> >
> > Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> > ---
> >   src/android/camera_device.cpp | 23 ++++++++++-------------
> >   src/android/camera_stream.cpp | 17 ++++++++++++++---
> >   src/android/camera_stream.h   |  4 +++-
> >   3 files changed, 27 insertions(+), 17 deletions(-)
> >
> > diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> > index 0600ebc81c64..9c9a5cfa3c2f 100644
> > --- a/src/android/camera_device.cpp
> > +++ b/src/android/camera_device.cpp
> > @@ -1273,19 +1273,7 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
> >   		StreamConfiguration &cfg = config_->at(index);
> > -		/*
> > -		 * Construct a software encoder for the MJPEG streams from the
> > -		 * chosen libcamera source stream.
> > -		 */
> > -		Encoder *encoder = new EncoderLibJpeg();
> > -		int ret = encoder->configure(cfg);
> > -		if (ret) {
> > -			LOG(HAL, Error) << "Failed to configure encoder";
> > -			delete encoder;
> > -			return ret;
> > -		}
> > -
> > -		streams_.emplace_back(formats::MJPEG, cfg.size, type, index, encoder);
> > +		streams_.emplace_back(formats::MJPEG, cfg.size, type, index);
> >   		jpegStream->priv = static_cast<void *>(&streams_.back());
> >   	}
> > @@ -1306,11 +1294,20 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
> >   		return -EINVAL;
> >   	}
> > +	/*
> > +	 * Configure the HAL CameraStream instances using the associated
> > +	 * StreamConfiguration and set the number of required buffers in
> > +	 * the Android camera3_stream_t.
> > +	 */
> >   	for (unsigned int i = 0; i < stream_list->num_streams; ++i) {
> >   		camera3_stream_t *stream = stream_list->streams[i];
> >   		CameraStream *cameraStream = static_cast<CameraStream *>(stream->priv);
> >   		StreamConfiguration &cfg = config_->at(cameraStream->index());
> > +		int ret = cameraStream->configure(cfg);
> > +		if (ret)
> > +			return ret;
> > +
> >   		/* Use the bufferCount confirmed by the validation process. */
> >   		stream->max_buffers = cfg.bufferCount;
> >   	}
> > diff --git a/src/android/camera_stream.cpp b/src/android/camera_stream.cpp
> > index 585bf2b68f4f..5b2b625c563b 100644
> > --- a/src/android/camera_stream.cpp
> > +++ b/src/android/camera_stream.cpp
> > @@ -7,10 +7,21 @@
> >   #include "camera_stream.h"
> > +#include "jpeg/encoder_libjpeg.h"
> > +
> >   using namespace libcamera;
> > -CameraStream::CameraStream(PixelFormat format, Size size,
> > -			   Type type, unsigned int index, Encoder *encoder)
> > -	: format_(format), size_(size), type_(type), index_(index), encoder_(encoder)
> > +CameraStream::CameraStream(PixelFormat format, Size size, Type type, unsigned int index)
> > +	: format_(format), size_(size), type_(type), index_(index), encoder(nullptr)
> I think this should be s/encoder(nullptr)/encoder_(nullptr)/
>

Very very correct indeed!
in V2 encoder_ stays wrapped in a unique_ptr<> so this will be gone,
but thanks for spotting this!

> Reviewed-by: Umang Jain <email at uajain.com>

Thanks
  j

> >   {
> > +	if (type_ == Type::Internal || type_ == Type::Mapped)
> > +		encoder_.reset(new EncoderLibJpeg);
> > +}
> > +
> > +int CameraStream::configure(const libcamera::StreamConfiguration &cfg)
> > +{
> > +	if (encoder_)
> > +		return encoder_->configure(cfg);
> > +
> > +	return 0;
> >   }
> > diff --git a/src/android/camera_stream.h b/src/android/camera_stream.h
> > index 07c714e3a365..d0dc40d81151 100644
> > --- a/src/android/camera_stream.h
> > +++ b/src/android/camera_stream.h
> > @@ -100,7 +100,7 @@ public:
> >   		Mapped,
> >   	};
> >   	CameraStream(libcamera::PixelFormat format, libcamera::Size size,
> > -		     Type type, unsigned int index, Encoder *encoder = nullptr);
> > +		     Type type, unsigned int index);
> >   	const libcamera::PixelFormat &format() const { return format_; }
> >   	const libcamera::Size &size() const { return size_; }
> > @@ -108,6 +108,8 @@ public:
> >   	unsigned int index() const { return index_; }
> >   	Encoder *encoder() const { return encoder_.get(); }
> > +	int configure(const libcamera::StreamConfiguration &cfg);
> > +
> >   private:
> >   	libcamera::PixelFormat format_;
> >   	libcamera::Size size_;
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel


More information about the libcamera-devel mailing list