summaryrefslogtreecommitdiff
path: root/src/libcamera/pipeline
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-01-23 20:11:34 +0100
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-02-06 07:41:51 +0200
commit5239f6e656d77bdbc66a93714b5a0b31a879c0cc (patch)
tree2d596c2d1a20c74959e7f3a4ae64c9e2cea22093 /src/libcamera/pipeline
parent5aef8257643bc2c70adaa59cc8ef0f2780595cbc (diff)
libcamera: pipeline_handler: Extend the interface to support capture
In order to support capture, the pipeline handler needs methods to allocate and free buffers, to start and stop the capture and to queue requests. Define those interfaces in the PipelineHandler class and implement them as stubs in the existing pipeline handlers. This initial implementation only considers the allocation of new buffers. Future work would need to expand this to also cover importing buffers from an external source. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/libcamera/pipeline')
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp34
-rw-r--r--src/libcamera/pipeline/uvcvideo.cpp34
-rw-r--r--src/libcamera/pipeline/vimc.cpp34
3 files changed, 102 insertions, 0 deletions
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index fa3c5224..3f096bf1 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -34,6 +34,14 @@ public:
int configureStreams(Camera *camera,
std::map<Stream *, StreamConfiguration> &config) override;
+ int allocateBuffers(Camera *camera, Stream *stream) override;
+ int freeBuffers(Camera *camera, Stream *stream) override;
+
+ int start(const Camera *camera) override;
+ void stop(const Camera *camera) override;
+
+ int queueRequest(const Camera *camera, Request *request) override;
+
bool match(DeviceEnumerator *enumerator);
private:
@@ -104,6 +112,32 @@ int PipelineHandlerIPU3::configureStreams(Camera *camera,
return 0;
}
+int PipelineHandlerIPU3::allocateBuffers(Camera *camera, Stream *stream)
+{
+ return -ENOTRECOVERABLE;
+}
+
+int PipelineHandlerIPU3::freeBuffers(Camera *camera, Stream *stream)
+{
+ return 0;
+}
+
+int PipelineHandlerIPU3::start(const Camera *camera)
+{
+ LOG(IPU3, Error) << "TODO: start camera";
+ return 0;
+}
+
+void PipelineHandlerIPU3::stop(const Camera *camera)
+{
+ LOG(IPU3, Error) << "TODO: stop camera";
+}
+
+int PipelineHandlerIPU3::queueRequest(const Camera *camera, Request *request)
+{
+ return 0;
+}
+
bool PipelineHandlerIPU3::match(DeviceEnumerator *enumerator)
{
DeviceMatch cio2_dm("ipu3-cio2");
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index ecec4e65..74bdf5c5 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -30,6 +30,14 @@ public:
int configureStreams(Camera *camera,
std::map<Stream *, StreamConfiguration> &config) override;
+ int allocateBuffers(Camera *camera, Stream *stream) override;
+ int freeBuffers(Camera *camera, Stream *stream) override;
+
+ int start(const Camera *camera) override;
+ void stop(const Camera *camera) override;
+
+ int queueRequest(const Camera *camera, Request *request) override;
+
bool match(DeviceEnumerator *enumerator);
private:
@@ -82,6 +90,32 @@ int PipelineHandlerUVC::configureStreams(Camera *camera,
return 0;
}
+int PipelineHandlerUVC::allocateBuffers(Camera *camera, Stream *stream)
+{
+ return -ENOTRECOVERABLE;
+}
+
+int PipelineHandlerUVC::freeBuffers(Camera *camera, Stream *stream)
+{
+ return 0;
+}
+
+int PipelineHandlerUVC::start(const Camera *camera)
+{
+ LOG(UVC, Error) << "TODO: start camera";
+ return 0;
+}
+
+void PipelineHandlerUVC::stop(const Camera *camera)
+{
+ LOG(UVC, Error) << "TODO: stop camera";
+}
+
+int PipelineHandlerUVC::queueRequest(const Camera *camera, Request *request)
+{
+ return 0;
+}
+
bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
{
DeviceMatch dm("uvcvideo");
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index 86a89c63..ea6f28c6 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -30,6 +30,14 @@ public:
int configureStreams(Camera *camera,
std::map<Stream *, StreamConfiguration> &config) override;
+ int allocateBuffers(Camera *camera, Stream *stream) override;
+ int freeBuffers(Camera *camera, Stream *stream) override;
+
+ int start(const Camera *camera) override;
+ void stop(const Camera *camera) override;
+
+ int queueRequest(const Camera *camera, Request *request) override;
+
bool match(DeviceEnumerator *enumerator);
private:
@@ -77,6 +85,32 @@ int PipeHandlerVimc::configureStreams(Camera *camera,
return 0;
}
+int PipeHandlerVimc::allocateBuffers(Camera *camera, Stream *stream)
+{
+ return -ENOTRECOVERABLE;
+}
+
+int PipeHandlerVimc::freeBuffers(Camera *camera, Stream *stream)
+{
+ return 0;
+}
+
+int PipeHandlerVimc::start(const Camera *camera)
+{
+ LOG(VIMC, Error) << "TODO: start camera";
+ return 0;
+}
+
+void PipeHandlerVimc::stop(const Camera *camera)
+{
+ LOG(VIMC, Error) << "TODO: stop camera";
+}
+
+int PipeHandlerVimc::queueRequest(const Camera *camera, Request *request)
+{
+ return 0;
+}
+
bool PipeHandlerVimc::match(DeviceEnumerator *enumerator)
{
DeviceMatch dm("vimc");