summaryrefslogtreecommitdiff
path: root/src/ipa/raspberrypi/controller/rpi/lux.cpp
diff options
context:
space:
mode:
authorNaushir Patuck <naush@raspberrypi.com>2023-05-03 13:20:27 +0100
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2023-05-04 20:47:40 +0300
commit726e9274ea95fa46352556d340c5793a8da51fcd (patch)
tree80f6adcdbf744f9317e09eff3e80c602b384a753 /src/ipa/raspberrypi/controller/rpi/lux.cpp
parent46aefed208fef4bc8d6f6e8882b92b9af710a60b (diff)
pipeline: ipa: raspberrypi: Refactor and move the Raspberry Pi code
Split the Raspberry Pi pipeline handler and IPA source code into common and VC4/BCM2835 specific file structures. For the pipeline handler, the common code files now live in src/libcamera/pipeline/rpi/common/ and the VC4-specific files in src/libcamera/pipeline/rpi/vc4/. For the IPA, the common code files now live in src/ipa/rpi/{cam_helper,controller}/ and the vc4 specific files in src/ipa/rpi/vc4/. With this change, the camera tuning files are now installed under share/libcamera/ipa/rpi/vc4/. To build the pipeline and IPA, the meson configuration options have now changed from "raspberrypi" to "rpi/vc4": meson setup build -Dipas=rpi/vc4 -Dpipelines=rpi/vc4 Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/ipa/raspberrypi/controller/rpi/lux.cpp')
-rw-r--r--src/ipa/raspberrypi/controller/rpi/lux.cpp115
1 files changed, 0 insertions, 115 deletions
diff --git a/src/ipa/raspberrypi/controller/rpi/lux.cpp b/src/ipa/raspberrypi/controller/rpi/lux.cpp
deleted file mode 100644
index 06625f3a..00000000
--- a/src/ipa/raspberrypi/controller/rpi/lux.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/* SPDX-License-Identifier: BSD-2-Clause */
-/*
- * Copyright (C) 2019, Raspberry Pi Ltd
- *
- * lux.cpp - Lux control algorithm
- */
-#include <math.h>
-
-#include <libcamera/base/log.h>
-
-#include "../device_status.h"
-
-#include "lux.h"
-
-using namespace RPiController;
-using namespace libcamera;
-using namespace std::literals::chrono_literals;
-
-LOG_DEFINE_CATEGORY(RPiLux)
-
-#define NAME "rpi.lux"
-
-Lux::Lux(Controller *controller)
- : Algorithm(controller)
-{
- /*
- * Put in some defaults as there will be no meaningful values until
- * Process has run.
- */
- status_.aperture = 1.0;
- status_.lux = 400;
-}
-
-char const *Lux::name() const
-{
- return NAME;
-}
-
-int Lux::read(const libcamera::YamlObject &params)
-{
- auto value = params["reference_shutter_speed"].get<double>();
- if (!value)
- return -EINVAL;
- referenceShutterSpeed_ = *value * 1.0us;
-
- value = params["reference_gain"].get<double>();
- if (!value)
- return -EINVAL;
- referenceGain_ = *value;
-
- referenceAperture_ = params["reference_aperture"].get<double>(1.0);
-
- value = params["reference_Y"].get<double>();
- if (!value)
- return -EINVAL;
- referenceY_ = *value;
-
- value = params["reference_lux"].get<double>();
- if (!value)
- return -EINVAL;
- referenceLux_ = *value;
-
- currentAperture_ = referenceAperture_;
- return 0;
-}
-
-void Lux::setCurrentAperture(double aperture)
-{
- currentAperture_ = aperture;
-}
-
-void Lux::prepare(Metadata *imageMetadata)
-{
- std::unique_lock<std::mutex> lock(mutex_);
- imageMetadata->set("lux.status", status_);
-}
-
-void Lux::process(StatisticsPtr &stats, Metadata *imageMetadata)
-{
- DeviceStatus deviceStatus;
- if (imageMetadata->get("device.status", deviceStatus) == 0) {
- double currentGain = deviceStatus.analogueGain;
- double currentAperture = deviceStatus.aperture.value_or(currentAperture_);
- double currentY = stats->yHist.interQuantileMean(0, 1);
- double gainRatio = referenceGain_ / currentGain;
- double shutterSpeedRatio =
- referenceShutterSpeed_ / deviceStatus.shutterSpeed;
- double apertureRatio = referenceAperture_ / currentAperture;
- double yRatio = currentY * (65536 / stats->yHist.bins()) / referenceY_;
- double estimatedLux = shutterSpeedRatio * gainRatio *
- apertureRatio * apertureRatio *
- yRatio * referenceLux_;
- LuxStatus status;
- status.lux = estimatedLux;
- status.aperture = currentAperture;
- LOG(RPiLux, Debug) << ": estimated lux " << estimatedLux;
- {
- std::unique_lock<std::mutex> lock(mutex_);
- status_ = status;
- }
- /*
- * Overwrite the metadata here as well, so that downstream
- * algorithms get the latest value.
- */
- imageMetadata->set("lux.status", status);
- } else
- LOG(RPiLux, Warning) << ": no device metadata";
-}
-
-/* Register algorithm with the system. */
-static Algorithm *create(Controller *controller)
-{
- return (Algorithm *)new Lux(controller);
-}
-static RegisterAlgorithm reg(NAME, &create);