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>
This commit is contained in:
parent
02e387e7b6
commit
c13f86704b
1 changed files with 13 additions and 30 deletions
|
@ -5,6 +5,7 @@
|
||||||
* agc.cpp - AGC/AEC control algorithm
|
* agc.cpp - AGC/AEC control algorithm
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
|
@ -71,44 +72,26 @@ readMeteringModes(std::map<std::string, AgcMeteringMode> &metering_modes,
|
||||||
return { 0, first };
|
return { 0, first };
|
||||||
}
|
}
|
||||||
|
|
||||||
static int readList(std::vector<double> &list,
|
|
||||||
const libcamera::YamlObject ¶ms)
|
|
||||||
{
|
|
||||||
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 ¶ms)
|
|
||||||
{
|
|
||||||
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 ¶ms)
|
int AgcExposureMode::read(const libcamera::YamlObject ¶ms)
|
||||||
{
|
{
|
||||||
int numShutters = readList(shutter, params["shutter"]);
|
auto value = params["shutter"].getList<double>();
|
||||||
int numAgs = readList(gain, params["gain"]);
|
if (!value)
|
||||||
|
return -EINVAL;
|
||||||
|
std::transform(value->begin(), value->end(), std::back_inserter(shutter),
|
||||||
|
[](double v) { return v * 1us; });
|
||||||
|
|
||||||
if (numShutters < 2 || numAgs < 2) {
|
value = params["gain"].getList<double>();
|
||||||
|
if (!value)
|
||||||
|
return -EINVAL;
|
||||||
|
gain = std::move(*value);
|
||||||
|
|
||||||
|
if (shutter.size() < 2 || gain.size() < 2) {
|
||||||
LOG(RPiAgc, Error)
|
LOG(RPiAgc, Error)
|
||||||
<< "AgcExposureMode: must have at least two entries in exposure profile";
|
<< "AgcExposureMode: must have at least two entries in exposure profile";
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (numShutters != numAgs) {
|
if (shutter.size() != gain.size()) {
|
||||||
LOG(RPiAgc, Error)
|
LOG(RPiAgc, Error)
|
||||||
<< "AgcExposureMode: expect same number of exposure and gain entries in exposure profile";
|
<< "AgcExposureMode: expect same number of exposure and gain entries in exposure profile";
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue