summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-10-08 02:45:25 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-10-10 21:39:53 +0300
commit8eec5712c0fa7b854e5280fc7526fb539bfd0cdd (patch)
tree17606fa25b2f5910ec97103227a3ac81756d8c3a
parent3a924ee250ade392643656eeef88f380bf519c2e (diff)
libcamera: pipeline: Move IPA from pipeline to camera data
The IPA acts on a camera and not on a pipeline which can expose more then one camera. Move the IPA reference to the CameraData. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/libcamera/include/pipeline_handler.h2
-rw-r--r--src/libcamera/pipeline/vimc.cpp12
-rw-r--r--src/libcamera/pipeline_handler.cpp8
3 files changed, 15 insertions, 7 deletions
diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h
index 1fdef9ce..42b90a4b 100644
--- a/src/libcamera/include/pipeline_handler.h
+++ b/src/libcamera/include/pipeline_handler.h
@@ -14,6 +14,7 @@
#include <string>
#include <vector>
+#include <ipa/ipa_interface.h>
#include <libcamera/controls.h>
#include <libcamera/stream.h>
@@ -43,6 +44,7 @@ public:
PipelineHandler *pipe_;
std::list<Request *> queuedRequests_;
ControlInfoMap controlInfo_;
+ std::unique_ptr<IPAInterface> ipa_;
private:
CameraData(const CameraData &) = delete;
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc.cpp
index 26477dcc..f1cfd0ed 100644
--- a/src/libcamera/pipeline/vimc.cpp
+++ b/src/libcamera/pipeline/vimc.cpp
@@ -101,8 +101,6 @@ private:
return static_cast<VimcCameraData *>(
PipelineHandler::cameraData(camera));
}
-
- std::unique_ptr<IPAInterface> ipa_;
};
VimcCameraConfiguration::VimcCameraConfiguration()
@@ -353,13 +351,13 @@ bool PipelineHandlerVimc::match(DeviceEnumerator *enumerator)
if (!media)
return false;
- ipa_ = IPAManager::instance()->createIPA(this, 0, 0);
- if (ipa_ == nullptr)
+ std::unique_ptr<VimcCameraData> data = utils::make_unique<VimcCameraData>(this);
+
+ data->ipa_ = IPAManager::instance()->createIPA(this, 0, 0);
+ if (data->ipa_ == nullptr)
LOG(VIMC, Warning) << "no matching IPA found";
else
- ipa_->init();
-
- std::unique_ptr<VimcCameraData> data = utils::make_unique<VimcCameraData>(this);
+ data->ipa_->init();
/* Locate and open the capture video node. */
if (data->init(media))
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index 3e54aa23..cb4337e5 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -97,6 +97,14 @@ LOG_DEFINE_CATEGORY(Pipeline)
*/
/**
+ * \var CameraData::ipa_
+ * \brief The IPA module used by the camera
+ *
+ * Reference to the Image Processing Algorithms (IPA) operating on the camera's
+ * stream(s). If no IPA exists for the camera, this field is set to nullptr.
+ */
+
+/**
* \class PipelineHandler
* \brief Create and manage cameras based on a set of media devices
*