[libcamera-devel] [PATCH v2 2/4] pipeline: vimc: Allocate fake IPA buffers
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sat Aug 14 02:14:56 CEST 2021
Hi Umang,
Thank you for the patch.
On Fri, Aug 13, 2021 at 08:14:35PM +0530, Umang Jain wrote:
> VIMC is a virtual test driver that doesn't generate statistics or
> consume parameters buffers. Thus, create simple (single plane)
> dmabuf-backed FrameBuffers, which can act as fake IPA buffers and
> can be memory mapped(mmap) to VIMC IPA.
>
> To create these buffers, temporarily hijack the output video node
> and configure it with a V4L2DeviceFormat. Buffers then can be exported
> from the output video node using V4L2VideoDevice::exportBuffers().
> These buffers will be mimicked as IPA buffers in subsequent commits.
>
> Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
> ---
> src/libcamera/pipeline/vimc/vimc.cpp | 27 +++++++++++++++++++++++++++
> 1 file changed, 27 insertions(+)
>
> diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
> index 4c92729d..edf8c58e 100644
> --- a/src/libcamera/pipeline/vimc/vimc.cpp
> +++ b/src/libcamera/pipeline/vimc/vimc.cpp
> @@ -50,6 +50,7 @@ public:
> }
>
> int init();
> + int allocateMockIPABuffers();
> void bufferReady(FrameBuffer *buffer);
>
> MediaDevice *media_;
> @@ -61,6 +62,7 @@ public:
> Stream stream_;
>
> std::unique_ptr<ipa::vimc::IPAProxyVimc> ipa_;
> + std::vector<std::unique_ptr<FrameBuffer>> mockIPABufs_;
> };
>
> class VimcCameraConfiguration : public CameraConfiguration
> @@ -500,6 +502,12 @@ int VimcCameraData::init()
> if (raw_->open())
> return -ENODEV;
>
> + ret = allocateMockIPABuffers();
> + if (!ret) {
> + LOG(VIMC, Warning) << "Cannot allocate fake IPA buffers";
I'd replace "fake" with "mock", as they're real buffers :-) Even "mock"
may not be totally accurate, we could talk about "mock statistics
buffers" instead of "mock buffers", but that's bikeshedding.
> + /* \todo fail hard or continue? */
I don't see a reason why this should fail, so I'd make it a hard error.
> + }
> +
> /* Initialise the supported controls. */
> const ControlInfoMap &controls = sensor_->controls();
> ControlInfoMap::Map ctrls;
> @@ -548,6 +556,25 @@ void VimcCameraData::bufferReady(FrameBuffer *buffer)
> pipe_->completeRequest(request);
> }
>
> +int VimcCameraData::allocateMockIPABuffers()
> +{
> + unsigned int bufCount = 2;
constexpr unsigned int kBufCount = 2;
> +
> + V4L2DeviceFormat format;
> + format.fourcc = video_->toV4L2PixelFormat(formats::BGR888);
> + format.size = Size(160, 120);
> +
> + int ret = video_->tryFormat(&format);
> + if (ret < 0)
> + return ret;
No need to call tryFormat(), setFormat() is enough.
With these small issues fixed,
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> +
> + ret = video_->setFormat(&format);
> + if (ret < 0)
> + return ret;
> +
> + return video_->exportBuffers(bufCount, &mockIPABufs_);
> +}
> +
> REGISTER_PIPELINE_HANDLER(PipelineHandlerVimc)
>
> } /* namespace libcamera */
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list