[libcamera-devel] [PATCH v2 3/3] DEMO: raspberrypi: Use custom parameters to init()
Paul Elder
paul.elder at ideasonboard.com
Mon Mar 8 08:48:28 CET 2021
This is just a demo to show custom parameters to init() with the
raspberrypi IPA interface.
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
include/libcamera/ipa/raspberrypi.mojom | 5 ++-
src/ipa/raspberrypi/raspberrypi.cpp | 44 ++++++++++---------
.../pipeline/raspberrypi/raspberrypi.cpp | 10 +++--
3 files changed, 32 insertions(+), 27 deletions(-)
diff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom
index f733a2cd..99a62c02 100644
--- a/include/libcamera/ipa/raspberrypi.mojom
+++ b/include/libcamera/ipa/raspberrypi.mojom
@@ -51,7 +51,8 @@ struct StartControls {
};
interface IPARPiInterface {
- init(IPASettings settings) => (int32 ret);
+ init(IPASettings settings, string sensorName)
+ => (int32 ret, bool metadataSupport);
start(StartControls controls) => (StartControls result);
stop();
@@ -77,7 +78,7 @@ interface IPARPiInterface {
map<uint32, IPAStream> streamConfig,
map<uint32, ControlInfoMap> entityControls,
ConfigInput ipaConfig)
- => (ConfigOutput results, int32 ret);
+ => (int32 ret, ConfigOutput results);
/**
* \fn mapBuffers()
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 6348d071..ac18dcbd 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -79,16 +79,17 @@ public:
munmap(lsTable_, ipa::RPi::MaxLsGridSize);
}
- int init(const IPASettings &settings) override;
+ int init(const IPASettings &settings, const std::string &sensorName,
+ bool *metadataSupport) override;
void start(const ipa::RPi::StartControls &data,
ipa::RPi::StartControls *result) override;
void stop() override {}
- void configure(const CameraSensorInfo &sensorInfo,
- const std::map<unsigned int, IPAStream> &streamConfig,
- const std::map<unsigned int, ControlInfoMap> &entityControls,
- const ipa::RPi::ConfigInput &data,
- ipa::RPi::ConfigOutput *response, int32_t *ret) override;
+ int configure(const CameraSensorInfo &sensorInfo,
+ const std::map<unsigned int, IPAStream> &streamConfig,
+ const std::map<unsigned int, ControlInfoMap> &entityControls,
+ const ipa::RPi::ConfigInput &data,
+ ipa::RPi::ConfigOutput *response) override;
void mapBuffers(const std::vector<IPABuffer> &buffers) override;
void unmapBuffers(const std::vector<unsigned int> &ids) override;
void signalStatReady(const uint32_t bufferId) override;
@@ -164,9 +165,14 @@ private:
double maxFrameDuration_;
};
-int IPARPi::init(const IPASettings &settings)
+int IPARPi::init(const IPASettings &settings, const std::string &sensorName,
+ bool *metadataSupport)
{
+ LOG(IPARPI, Debug) << "sensor name is " << sensorName;
+
tuningFile_ = settings.configurationFile;
+
+ *metadataSupport = true;
return 0;
}
@@ -290,16 +296,15 @@ void IPARPi::setMode(const CameraSensorInfo &sensorInfo)
mode_.max_frame_length = sensorInfo.maxFrameLength;
}
-void IPARPi::configure(const CameraSensorInfo &sensorInfo,
- [[maybe_unused]] const std::map<unsigned int, IPAStream> &streamConfig,
- const std::map<unsigned int, ControlInfoMap> &entityControls,
- const ipa::RPi::ConfigInput &ipaConfig,
- ipa::RPi::ConfigOutput *result, int32_t *ret)
+int IPARPi::configure(const CameraSensorInfo &sensorInfo,
+ [[maybe_unused]] const std::map<unsigned int, IPAStream> &streamConfig,
+ const std::map<unsigned int, ControlInfoMap> &entityControls,
+ const ipa::RPi::ConfigInput &ipaConfig,
+ ipa::RPi::ConfigOutput *result)
{
if (entityControls.size() != 2) {
LOG(IPARPI, Error) << "No ISP or sensor controls found.";
- *ret = -1;
- return;
+ return -1;
}
result->params = 0;
@@ -309,14 +314,12 @@ void IPARPi::configure(const CameraSensorInfo &sensorInfo,
if (!validateSensorControls()) {
LOG(IPARPI, Error) << "Sensor control validation failed.";
- *ret = -1;
- return;
+ return -1;
}
if (!validateIspControls()) {
LOG(IPARPI, Error) << "ISP control validation failed.";
- *ret = -1;
- return;
+ return -1;
}
/* Setup a metadata ControlList to output metadata. */
@@ -334,8 +337,7 @@ void IPARPi::configure(const CameraSensorInfo &sensorInfo,
if (!helper_) {
LOG(IPARPI, Error) << "Could not create camera helper for "
<< cameraName;
- *ret = -1;
- return;
+ return -1;
}
/*
@@ -403,7 +405,7 @@ void IPARPi::configure(const CameraSensorInfo &sensorInfo,
lastMode_ = mode_;
- *ret = 0;
+ return 0;
}
void IPARPi::mapBuffers(const std::vector<IPABuffer> &buffers)
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index db91f1b5..3ff0f1cd 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -1194,7 +1194,10 @@ int RPiCameraData::loadIPA()
IPASettings settings(ipa_->configurationFile(sensor_->model() + ".json"));
- return ipa_->init(settings);
+ bool metadataSupport;
+ int ret = ipa_->init(settings, "sensor name", &metadataSupport);
+ LOG(RPI, Debug) << "metadata support " << (metadataSupport ? "yes" : "no");
+ return ret;
}
int RPiCameraData::configureIPA(const CameraConfiguration *config)
@@ -1250,9 +1253,8 @@ int RPiCameraData::configureIPA(const CameraConfiguration *config)
/* Ready the IPA - it must know about the sensor resolution. */
ipa::RPi::ConfigOutput result;
- ipa_->configure(sensorInfo_, streamConfig, entityControls, ipaConfig,
- &result, &ret);
-
+ ret = ipa_->configure(sensorInfo_, streamConfig, entityControls, ipaConfig,
+ &result);
if (ret < 0) {
LOG(RPI, Error) << "IPA configuration failed!";
return -EPIPE;
--
2.27.0
More information about the libcamera-devel
mailing list