ipa: raspberrypi: Add lens position to DeviceStatus

Add the current frame's lens position (in dioptres) to the DeviceStatus
structure. This value is obtained from the AfAlgorithm::getLensPosition()
member function. Return this lens position back to the pipeline handler to
store in the metadata field of the request.

As a drive-by, fixup some inaccurate comments in the DeviceStatus structure.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Nick Hollinghurst nick.hollinghurst@raspberrypi.com
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Naushir Patuck 2023-01-23 15:49:32 +00:00 committed by Kieran Bingham
parent cc010b0c35
commit 9b0db2aa43
2 changed files with 9 additions and 2 deletions

View file

@ -32,9 +32,9 @@ struct DeviceStatus {
/* line length for the current frame */ /* line length for the current frame */
libcamera::utils::Duration lineLength; libcamera::utils::Duration lineLength;
double analogueGain; double analogueGain;
/* 1.0/distance-in-metres, or 0 if unknown */ /* 1.0/distance-in-metres */
std::optional<double> lensPosition; std::optional<double> lensPosition;
/* 1/f so that brightness quadruples when this doubles, or 0 if unknown */ /* 1/f so that brightness quadruples when this doubles */
std::optional<double> aperture; std::optional<double> aperture;
/* proportional to brightness with 0 = no flash, 1 = maximum flash */ /* proportional to brightness with 0 = no flash, 1 = maximum flash */
std::optional<double> flashIntensity; std::optional<double> flashIntensity;

View file

@ -586,6 +586,8 @@ void IPARPi::reportMetadata(unsigned int ipaContext)
helper_->exposure(deviceStatus->frameLength, deviceStatus->lineLength).get<std::micro>()); helper_->exposure(deviceStatus->frameLength, deviceStatus->lineLength).get<std::micro>());
if (deviceStatus->sensorTemperature) if (deviceStatus->sensorTemperature)
libcameraMetadata_.set(controls::SensorTemperature, *deviceStatus->sensorTemperature); libcameraMetadata_.set(controls::SensorTemperature, *deviceStatus->sensorTemperature);
if (deviceStatus->lensPosition)
libcameraMetadata_.set(controls::LensPosition, *deviceStatus->lensPosition);
} }
AgcStatus *agcStatus = rpiMetadata.getLocked<AgcStatus>("agc.status"); AgcStatus *agcStatus = rpiMetadata.getLocked<AgcStatus>("agc.status");
@ -1352,6 +1354,11 @@ void IPARPi::fillDeviceStatus(const ControlList &sensorControls, unsigned int ip
deviceStatus.analogueGain = helper_->gain(gainCode); deviceStatus.analogueGain = helper_->gain(gainCode);
deviceStatus.frameLength = mode_.height + vblank; deviceStatus.frameLength = mode_.height + vblank;
RPiController::AfAlgorithm *af = dynamic_cast<RPiController::AfAlgorithm *>(
controller_.getAlgorithm("af"));
if (af)
deviceStatus.lensPosition = af->getLensPosition();
LOG(IPARPI, Debug) << "Metadata - " << deviceStatus; LOG(IPARPI, Debug) << "Metadata - " << deviceStatus;
rpiMetadata_[ipaContext].set("device.status", deviceStatus); rpiMetadata_[ipaContext].set("device.status", deviceStatus);