diff options
author | David Plowman <david.plowman@raspberrypi.com> | 2020-05-28 15:51:32 +0100 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-06-25 17:47:51 +0300 |
commit | 23e15e72f9745d4a11f41b366ff3c9e3dca51bf0 (patch) | |
tree | ab6b25be3144e0d5ea88b8993879735b6c764de8 /src/ipa/raspberrypi/controller/rpi | |
parent | 0952f2014d1f08d1e5228f90680af16cb66653a6 (diff) |
ipa: rpi: Add "focus" algorithm
Adds FocusStatus to the image metadata, containing contrast measurements
across the image. Optionally also prints a contrast measure to the
console, to aid in manual adjustment of the lens. Note that it is not an
actual auto-focus algorithm that can drive a lens!
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Signed-off-by: Naushir Patuck <naush@raspberrypi.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')
-rw-r--r-- | src/ipa/raspberrypi/controller/rpi/focus.cpp | 51 | ||||
-rw-r--r-- | src/ipa/raspberrypi/controller/rpi/focus.hpp | 31 |
2 files changed, 82 insertions, 0 deletions
diff --git a/src/ipa/raspberrypi/controller/rpi/focus.cpp b/src/ipa/raspberrypi/controller/rpi/focus.cpp new file mode 100644 index 00000000..1e2b6491 --- /dev/null +++ b/src/ipa/raspberrypi/controller/rpi/focus.cpp @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ +/* + * Copyright (C) 2020, Raspberry Pi (Trading) Limited + * + * focus.cpp - focus algorithm + */ +#include <stdint.h> + +#include "../focus_status.h" +#include "../logging.hpp" +#include "focus.hpp" + +using namespace RPi; + +#define NAME "rpi.focus" + +Focus::Focus(Controller *controller) + : Algorithm(controller) +{ +} + +char const *Focus::Name() const +{ + return NAME; +} + +void Focus::Read(boost::property_tree::ptree const ¶ms) +{ + print_ = params.get<int>("print", 0); +} + +void Focus::Process(StatisticsPtr &stats, Metadata *image_metadata) +{ + FocusStatus status; + unsigned int i; + for (i = 0; i < FOCUS_REGIONS; i++) + status.focus_measures[i] = stats->focus_stats[i].contrast_val[1][1] / 1000; + status.num = i; + image_metadata->Set("focus.status", status); + if (print_) { + uint32_t value = (status.focus_measures[5] + status.focus_measures[6]) / 10; + RPI_LOG("Focus contrast measure: " << value); + } +} + +/* Register algorithm with the system. */ +static Algorithm *Create(Controller *controller) +{ + return new Focus(controller); +} +static RegisterAlgorithm reg(NAME, &Create); diff --git a/src/ipa/raspberrypi/controller/rpi/focus.hpp b/src/ipa/raspberrypi/controller/rpi/focus.hpp new file mode 100644 index 00000000..d53401f7 --- /dev/null +++ b/src/ipa/raspberrypi/controller/rpi/focus.hpp @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ +/* + * Copyright (C) 2020, Raspberry Pi (Trading) Limited + * + * focus.hpp - focus algorithm + */ +#pragma once + +#include "../algorithm.hpp" +#include "../metadata.hpp" + +/* + * The "focus" algorithm. All it does it print out a version of the + * focus contrast measure; there is no actual auto-focus mechanism to + * control. + */ + +namespace RPi { + +class Focus : public Algorithm +{ +public: + Focus(Controller *controller); + char const *Name() const override; + void Read(boost::property_tree::ptree const ¶ms) override; + void Process(StatisticsPtr &stats, Metadata *image_metadata) override; +private: + bool print_; +}; + +} /* namespace RPi */ |