diff options
author | Niklas Söderlund <niklas.soderlund@ragnatech.se> | 2019-10-08 02:45:25 +0200 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2019-10-10 21:39:53 +0300 |
commit | 8eec5712c0fa7b854e5280fc7526fb539bfd0cdd (patch) | |
tree | 17606fa25b2f5910ec97103227a3ac81756d8c3a | |
parent | 3a924ee250ade392643656eeef88f380bf519c2e (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.h | 2 | ||||
-rw-r--r-- | src/libcamera/pipeline/vimc.cpp | 12 | ||||
-rw-r--r-- | src/libcamera/pipeline_handler.cpp | 8 |
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 * |