[libcamera-devel] [PATCH 06/11] libcamera: ipu3: cio2: Generate start of frame event
Kieran Bingham
kieran.bingham at ideasonboard.com
Thu Nov 5 12:39:19 CET 2020
Hi Niklas,
On 05/11/2020 00:15, Niklas Söderlund wrote:
> Propagate the frameStart event whenever the CSI-2 receiver in the CIO2
> pipeline generates one.
>
I kinda like how these signals are quite flexible.
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> src/libcamera/pipeline/ipu3/cio2.cpp | 18 +++++++++++++++---
> src/libcamera/pipeline/ipu3/cio2.h | 3 ++-
> 2 files changed, 17 insertions(+), 4 deletions(-)
>
> diff --git a/src/libcamera/pipeline/ipu3/cio2.cpp b/src/libcamera/pipeline/ipu3/cio2.cpp
> index 1c7b9676f52abdb6..1eca674da339b8e0 100644
> --- a/src/libcamera/pipeline/ipu3/cio2.cpp
> +++ b/src/libcamera/pipeline/ipu3/cio2.cpp
> @@ -247,15 +247,27 @@ int CIO2Device::start()
> availableBuffers_.push(buffer.get());
>
> ret = output_->streamOn();
> - if (ret)
> + if (ret) {
> freeBuffers();
> + return ret;
> + }
>
> - return ret;
> + ret = csi2_->setFrameStartEnabled(true);
> + if (ret) {
> + stop();
> + return ret;
> + }
> +
> + return 0;
> }
>
> int CIO2Device::stop()
> {
> - int ret = output_->streamOff();
> + int ret;
> +
> + csi2_->setFrameStartEnabled(false);
> +
> + ret = output_->streamOff();
>
> freeBuffers();
>
> diff --git a/src/libcamera/pipeline/ipu3/cio2.h b/src/libcamera/pipeline/ipu3/cio2.h
> index e8b491a0c104a3e2..67fede4e3b4e9fb6 100644
> --- a/src/libcamera/pipeline/ipu3/cio2.h
> +++ b/src/libcamera/pipeline/ipu3/cio2.h
> @@ -13,6 +13,7 @@
>
> #include <libcamera/signal.h>
>
> +#include "libcamera/internal/v4l2_subdevice.h"
> #include "libcamera/internal/v4l2_videodevice.h"
>
> namespace libcamera {
> @@ -24,7 +25,6 @@ class PixelFormat;
> class Request;
> class Size;
> class SizeRange;
> -class V4L2Subdevice;
> struct StreamConfiguration;
>
> class CIO2Device
> @@ -56,6 +56,7 @@ public:
> void tryReturnBuffer(FrameBuffer *buffer);
> Signal<FrameBuffer *> &bufferReady() { return output_->bufferReady; }
>
> + Signal<uint32_t> &frameStart() { return csi2_->frameStart; }
> private:
> void freeBuffers();
>
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list