[RFC PATCH 5/6] libcamera: converter_v4l2_m2m: Add helper to apply controls

Jacopo Mondi jacopo.mondi at ideasonboard.com
Wed Jul 24 15:30:22 CEST 2024


Hi Umang

On Fri, Jul 12, 2024 at 10:59:19AM GMT, Umang Jain wrote:
> Add applyControls() helper to apply controls for a stream.

This assumes controls are applied on the capture queue. Isn't there a
use case for applying controls to the output queue ?

>
> Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
> ---
>  .../internal/converter/converter_v4l2_m2m.h    |  5 +++++
>  src/libcamera/converter/converter_v4l2_m2m.cpp | 18 ++++++++++++++++++
>  2 files changed, 23 insertions(+)
>
> diff --git a/include/libcamera/internal/converter/converter_v4l2_m2m.h b/include/libcamera/internal/converter/converter_v4l2_m2m.h
> index f61beef8..9d3d62d6 100644
> --- a/include/libcamera/internal/converter/converter_v4l2_m2m.h
> +++ b/include/libcamera/internal/converter/converter_v4l2_m2m.h
> @@ -24,6 +24,7 @@
>
>  namespace libcamera {
>
> +class ControlList;
>  class FrameBuffer;
>  class MediaDevice;
>  class Size;
> @@ -61,6 +62,8 @@ public:
>  	int setCrop(const Stream *stream, Rectangle *rect);
>  	std::pair<Rectangle, Rectangle> getCropBounds(const Stream *stream);
>
> +	int applyControls(const Stream *stream, ControlList &ctrls);
> +
>  protected:
>  	class Mapping
>  	{
> @@ -97,6 +100,8 @@ private:
>  		int start();
>  		void stop();
>
> +		int applyControls(ControlList &ctrls);
> +
>  		int queueBuffers(FrameBuffer *input, FrameBuffer *output);
>
>  		int setSelection(unsigned int target, Rectangle *rect);
> diff --git a/src/libcamera/converter/converter_v4l2_m2m.cpp b/src/libcamera/converter/converter_v4l2_m2m.cpp
> index 9752a23e..9ff5102a 100644
> --- a/src/libcamera/converter/converter_v4l2_m2m.cpp
> +++ b/src/libcamera/converter/converter_v4l2_m2m.cpp
> @@ -15,6 +15,7 @@
>  #include <libcamera/base/signal.h>
>  #include <libcamera/base/utils.h>
>
> +#include <libcamera/controls.h>
>  #include <libcamera/framebuffer.h>
>  #include <libcamera/geometry.h>
>  #include <libcamera/stream.h>
> @@ -186,6 +187,11 @@ void V4L2M2MConverter::V4L2M2MStream::captureBufferReady(FrameBuffer *buffer)
>  	converter_->outputBufferReady.emit(buffer);
>  }
>
> +int V4L2M2MConverter::V4L2M2MStream::applyControls(ControlList &ctrls)
> +{
> +	return m2m_->capture()->setControls(&ctrls);
> +};
> +
>  /* -----------------------------------------------------------------------------
>   * V4L2M2MConverter
>   */
> @@ -532,6 +538,18 @@ int V4L2M2MConverter::queueBuffers(FrameBuffer *input,
>  	return 0;
>  }
>
> +/**
> + * libcamera::Converter::applyControls
> + */
> +int V4L2M2MConverter::applyControls(const Stream *stream, ControlList &ctrls)
> +{
> +	auto iter = streams_.find(stream);
> +	if (iter == streams_.end())
> +		return -EINVAL;
> +
> +	return iter->second->applyControls(ctrls);
> +}
> +
>  /*
>   * \todo: This should be extended to include Feature::Flag to denote
>   * what each converter supports feature-wise.
> --
> 2.45.0
>


More information about the libcamera-devel mailing list