[libcamera-devel] [PATCH v2 05/11] libcamera: ipu3: cio2: Generate start of frame event
Niklas Söderlund
niklas.soderlund at ragnatech.se
Tue Dec 29 17:03:12 CET 2020
Propagate the frameStart event whenever the CSI-2 receiver in the CIO2
pipeline generates one.
Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart at 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(-)
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();
--
2.29.2
More information about the libcamera-devel
mailing list