[libcamera-devel,v2,05/11] libcamera: ipu3: cio2: Generate start of frame event
diff mbox series

Message ID 20201229160318.77536-6-niklas.soderlund@ragnatech.se
State Superseded
Delegated to: Niklas Söderlund
Headers show
Series
  • libcamera: ipu3: Attach to an skeleton IPA
Related show

Commit Message

Niklas Söderlund Dec. 29, 2020, 4:03 p.m. UTC
Propagate the frameStart event whenever the CSI-2 receiver in the CIO2
pipeline generates one.

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
* Changes since v1
- Move blank lines.
---
 src/libcamera/pipeline/ipu3/cio2.cpp | 18 +++++++++++++++---
 src/libcamera/pipeline/ipu3/cio2.h   |  3 ++-
 2 files changed, 17 insertions(+), 4 deletions(-)

Patch
diff mbox series

diff --git a/src/libcamera/pipeline/ipu3/cio2.cpp b/src/libcamera/pipeline/ipu3/cio2.cpp
index f76c6675b0f448fe..25946fd420db6853 100644
--- a/src/libcamera/pipeline/ipu3/cio2.cpp
+++ b/src/libcamera/pipeline/ipu3/cio2.cpp
@@ -239,15 +239,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 dca4d40e4c32e8b2..5ecc4f47bb3cdb3f 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
@@ -54,6 +54,7 @@  public:
 	FrameBuffer *queueBuffer(Request *request, FrameBuffer *rawBuffer);
 	void tryReturnBuffer(FrameBuffer *buffer);
 	Signal<FrameBuffer *> &bufferReady() { return output_->bufferReady; }
+	Signal<uint32_t> &frameStart() { return csi2_->frameStart; }
 
 private:
 	void freeBuffers();