[libcamera-devel] [RFC PATCH v2 5/5] libcamera: pipelines: uvcvideo: add IPAManager

Paul Elder paul.elder at ideasonboard.com
Thu May 23 18:42:10 CEST 2019


Make the UVC pipeline query for one of the test IPA modules.

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
Changes in v2:
- remove IPAManager from PipelineHandler::match parameter

This is a sample of how a IPAManager would be used.

 src/libcamera/pipeline/uvcvideo.cpp | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo.cpp
index 351712c..8275f5a 100644
--- a/src/libcamera/pipeline/uvcvideo.cpp
+++ b/src/libcamera/pipeline/uvcvideo.cpp
@@ -6,16 +6,20 @@
  */
 
 #include <libcamera/camera.h>
+#include <libcamera/ipa/ipa_module_info.h>
 #include <libcamera/request.h>
 #include <libcamera/stream.h>
 
 #include "device_enumerator.h"
+#include "ipa_manager.h"
 #include "log.h"
 #include "media_device.h"
 #include "pipeline_handler.h"
 #include "utils.h"
 #include "v4l2_device.h"
 
+#include <string.h>
+
 namespace libcamera {
 
 LOG_DEFINE_CATEGORY(UVC)
@@ -175,6 +179,16 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
 	if (!media)
 		return false;
 
+	IPAManager *ipaManager = IPAManager::instance();
+	ipaManager->addDir("test/ipa");
+	struct IPAModuleInfo info;
+	info.ipaAPIVersion = 1;
+	info.pipelineVersion = 8999;
+	strcpy(info.pipelineName, "bleep");
+	IPAModule *ipa = ipaManager->acquireIPA(info);
+	if (ipa == nullptr)
+		LOG(UVC, Warning) << "no matching IPA found";
+
 	std::unique_ptr<UVCCameraData> data = utils::make_unique<UVCCameraData>(this);
 
 	/* Locate and open the default video node. */
@@ -197,7 +211,7 @@ bool PipelineHandlerUVC::match(DeviceEnumerator *enumerator)
 
 	/* Create and register the camera. */
 	std::set<Stream *> streams{ &data->stream_ };
-	std::shared_ptr<Camera> camera = Camera::create(this, media->model(), streams);
+	std::shared_ptr<Camera> camera = Camera::create(this, media->model() + " " + (ipa == nullptr ? "" : ipa->info().name), streams);
 	registerCamera(std::move(camera), std::move(data));
 
 	/* Enable hot-unplug notifications. */
-- 
2.20.1



More information about the libcamera-devel mailing list