summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-07-26 05:46:40 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-07-28 13:48:54 +0300
commitc13f86704b129636bb6d84f8b8ca37826ded3238 (patch)
treeead58c0ad5a80aca9a5c14f3d5d789bdbc41ff35 /src
parent02e387e7b65252a9cd15b672a87f3bcc6be26399 (diff)
ipa: raspberrypi: agc: Use YamlObject::getList()
Replace the manual implementation of the readList() functions with YamlObject::getList(). Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Naushir Patuck <naush@raspberrypi.com> Tested-by: Naushir Patuck <naush@raspberrypi.com>
Diffstat (limited to 'src')
-rw-r--r--src/ipa/raspberrypi/controller/rpi/agc.cpp43
1 files changed, 13 insertions, 30 deletions
diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp b/src/ipa/raspberrypi/controller/rpi/agc.cpp
index 5037f900..bd54a639 100644
--- a/src/ipa/raspberrypi/controller/rpi/agc.cpp
+++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp
@@ -5,6 +5,7 @@
* agc.cpp - AGC/AEC control algorithm
*/
+#include <algorithm>
#include <map>
#include <tuple>
@@ -71,44 +72,26 @@ readMeteringModes(std::map<std::string, AgcMeteringMode> &metering_modes,
return { 0, first };
}
-static int readList(std::vector<double> &list,
- const libcamera::YamlObject &params)
-{
- for (const auto &p : params.asList()) {
- auto value = p.get<double>();
- if (!value)
- return -EINVAL;
- list.push_back(*value);
- }
-
- return list.size();
-}
-
-static int readList(std::vector<Duration> &list,
- const libcamera::YamlObject &params)
-{
- for (const auto &p : params.asList()) {
- auto value = p.get<double>();
- if (!value)
- return -EINVAL;
- list.push_back(*value * 1us);
- }
-
- return list.size();
-}
-
int AgcExposureMode::read(const libcamera::YamlObject &params)
{
- int numShutters = readList(shutter, params["shutter"]);
- int numAgs = readList(gain, params["gain"]);
+ auto value = params["shutter"].getList<double>();
+ if (!value)
+ return -EINVAL;
+ std::transform(value->begin(), value->end(), std::back_inserter(shutter),
+ [](double v) { return v * 1us; });
+
+ value = params["gain"].getList<double>();
+ if (!value)
+ return -EINVAL;
+ gain = std::move(*value);
- if (numShutters < 2 || numAgs < 2) {
+ if (shutter.size() < 2 || gain.size() < 2) {
LOG(RPiAgc, Error)
<< "AgcExposureMode: must have at least two entries in exposure profile";
return -EINVAL;
}
- if (numShutters != numAgs) {
+ if (shutter.size() != gain.size()) {
LOG(RPiAgc, Error)
<< "AgcExposureMode: expect same number of exposure and gain entries in exposure profile";
return -EINVAL;