summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Plowman <david.plowman@raspberrypi.com>2022-04-21 16:11:17 +0100
committerKieran Bingham <kieran.bingham@ideasonboard.com>2022-05-10 14:24:45 +0100
commit065a9e6c050c7b4e922e4ac17a6d36097520e5e8 (patch)
tree7b9894a893a219d47edd257516eee42712ca8d5c /src
parent998d23c0a2255de092d6297d12600ffa1bfa3295 (diff)
libcamera: raspberrypi: Fetch correct value for SensorSensitivity
These changes retrieve the correct value for sensitivity of the mode selected for the sensor. This value is known to the CamHelper which passes it across to the pipeline handler so that it can be set correctly in the camera properties. Signed-off-by: David Plowman <david.plowman@raspberrypi.com> Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/ipa/raspberrypi/raspberrypi.cpp7
-rw-r--r--src/libcamera/pipeline/raspberrypi/raspberrypi.cpp12
2 files changed, 13 insertions, 6 deletions
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 05dc626a..3b126bb5 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -99,7 +99,7 @@ public:
const std::map<unsigned int, IPAStream> &streamConfig,
const std::map<unsigned int, ControlInfoMap> &entityControls,
const IPAConfig &data,
- ControlList *controls) override;
+ ControlList *controls, IPAConfigResult *result) 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;
@@ -344,7 +344,7 @@ int IPARPi::configure(const IPACameraSensorInfo &sensorInfo,
[[maybe_unused]] const std::map<unsigned int, IPAStream> &streamConfig,
const std::map<unsigned int, ControlInfoMap> &entityControls,
const IPAConfig &ipaConfig,
- ControlList *controls)
+ ControlList *controls, IPAConfigResult *result)
{
if (entityControls.size() != 2) {
LOG(IPARPI, Error) << "No ISP or sensor controls found.";
@@ -404,6 +404,9 @@ int IPARPi::configure(const IPACameraSensorInfo &sensorInfo,
*/
ControlList ctrls(sensorCtrls_);
+ /* The pipeline handler passes out the mode's sensitivity. */
+ result->modeSensitivity = mode_.sensitivity;
+
if (firstStart_) {
/* Supply initial values for frame durations. */
applyFrameDurations(defaultMinFrameDuration, defaultMaxFrameDuration);
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index e2ee7f1a..2636acb7 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -200,7 +200,7 @@ public:
void frameStarted(uint32_t sequence);
int loadIPA(ipa::RPi::SensorConfig *sensorConfig);
- int configureIPA(const CameraConfiguration *config);
+ int configureIPA(const CameraConfiguration *config, ipa::RPi::IPAConfigResult *result);
void enumerateVideoDevices(MediaLink *link);
@@ -898,7 +898,8 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
data->isp_[Isp::Input].dev()->setSelection(V4L2_SEL_TGT_CROP, &crop);
- ret = data->configureIPA(config);
+ ipa::RPi::IPAConfigResult result;
+ ret = data->configureIPA(config, &result);
if (ret)
LOG(RPI, Error) << "Failed to configure the IPA: " << ret;
@@ -937,6 +938,9 @@ int PipelineHandlerRPi::configure(Camera *camera, CameraConfiguration *config)
*/
data->properties_.set(properties::ScalerCropMaximum, data->sensorInfo_.analogCrop);
+ /* Store the mode sensitivity for the application. */
+ data->properties_.set(properties::SensorSensitivity, result.modeSensitivity);
+
/* Setup the Video Mux/Bridge entities. */
for (auto &[device, link] : data->bridgeDevices_) {
/*
@@ -1528,7 +1532,7 @@ int RPiCameraData::loadIPA(ipa::RPi::SensorConfig *sensorConfig)
return ipa_->init(settings, sensorConfig);
}
-int RPiCameraData::configureIPA(const CameraConfiguration *config)
+int RPiCameraData::configureIPA(const CameraConfiguration *config, ipa::RPi::IPAConfigResult *result)
{
std::map<unsigned int, IPAStream> streamConfig;
std::map<unsigned int, ControlInfoMap> entityControls;
@@ -1574,7 +1578,7 @@ int RPiCameraData::configureIPA(const CameraConfiguration *config)
/* Ready the IPA - it must know about the sensor resolution. */
ControlList controls;
ret = ipa_->configure(sensorInfo_, streamConfig, entityControls, ipaConfig,
- &controls);
+ &controls, result);
if (ret < 0) {
LOG(RPI, Error) << "IPA configuration failed!";
return -EPIPE;