ipa: raspberrypi: Propagate errors from AGC metering tuning data read
Update the AGC metering functions that deal with reading tuning data to propagate errors to the caller, using std::tie and std::tuple to group the error code and return value. 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
f357b1bf6e
commit
0821497ddd
1 changed files with 54 additions and 17 deletions
|
@ -6,6 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <tuple>
|
||||||
|
|
||||||
#include <linux/bcm2835-isp.h>
|
#include <linux/bcm2835-isp.h>
|
||||||
|
|
||||||
|
@ -43,19 +44,25 @@ int AgcMeteringMode::read(boost::property_tree::ptree const ¶ms)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string
|
static std::tuple<int, std::string>
|
||||||
readMeteringModes(std::map<std::string, AgcMeteringMode> &meteringModes,
|
readMeteringModes(std::map<std::string, AgcMeteringMode> &meteringModes,
|
||||||
boost::property_tree::ptree const ¶ms)
|
boost::property_tree::ptree const ¶ms)
|
||||||
{
|
{
|
||||||
std::string first;
|
std::string first;
|
||||||
|
int ret;
|
||||||
|
|
||||||
for (auto &p : params) {
|
for (auto &p : params) {
|
||||||
AgcMeteringMode meteringMode;
|
AgcMeteringMode meteringMode;
|
||||||
meteringMode.read(p.second);
|
ret = meteringMode.read(p.second);
|
||||||
|
if (ret)
|
||||||
|
return { ret, {} };
|
||||||
|
|
||||||
meteringModes[p.first] = std::move(meteringMode);
|
meteringModes[p.first] = std::move(meteringMode);
|
||||||
if (first.empty())
|
if (first.empty())
|
||||||
first = p.first;
|
first = p.first;
|
||||||
}
|
}
|
||||||
return first;
|
|
||||||
|
return { 0, first };
|
||||||
}
|
}
|
||||||
|
|
||||||
static int readList(std::vector<double> &list,
|
static int readList(std::vector<double> &list,
|
||||||
|
@ -87,19 +94,25 @@ int AgcExposureMode::read(boost::property_tree::ptree const ¶ms)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string
|
static std::tuple<int, std::string>
|
||||||
readExposureModes(std::map<std::string, AgcExposureMode> &exposureModes,
|
readExposureModes(std::map<std::string, AgcExposureMode> &exposureModes,
|
||||||
boost::property_tree::ptree const ¶ms)
|
boost::property_tree::ptree const ¶ms)
|
||||||
{
|
{
|
||||||
std::string first;
|
std::string first;
|
||||||
|
int ret;
|
||||||
|
|
||||||
for (auto &p : params) {
|
for (auto &p : params) {
|
||||||
AgcExposureMode exposureMode;
|
AgcExposureMode exposureMode;
|
||||||
exposureMode.read(p.second);
|
ret = exposureMode.read(p.second);
|
||||||
|
if (ret)
|
||||||
|
return { ret, {} };
|
||||||
|
|
||||||
exposureModes[p.first] = std::move(exposureMode);
|
exposureModes[p.first] = std::move(exposureMode);
|
||||||
if (first.empty())
|
if (first.empty())
|
||||||
first = p.first;
|
first = p.first;
|
||||||
}
|
}
|
||||||
return first;
|
|
||||||
|
return { 0, first };
|
||||||
}
|
}
|
||||||
|
|
||||||
int AgcConstraint::read(boost::property_tree::ptree const ¶ms)
|
int AgcConstraint::read(boost::property_tree::ptree const ¶ms)
|
||||||
|
@ -115,38 +128,62 @@ int AgcConstraint::read(boost::property_tree::ptree const ¶ms)
|
||||||
return yTarget.read(params.get_child("y_target"));
|
return yTarget.read(params.get_child("y_target"));
|
||||||
}
|
}
|
||||||
|
|
||||||
static AgcConstraintMode
|
static std::tuple<int, AgcConstraintMode>
|
||||||
readConstraintMode(boost::property_tree::ptree const ¶ms)
|
readConstraintMode(boost::property_tree::ptree const ¶ms)
|
||||||
{
|
{
|
||||||
AgcConstraintMode mode;
|
AgcConstraintMode mode;
|
||||||
|
int ret;
|
||||||
|
|
||||||
for (auto &p : params) {
|
for (auto &p : params) {
|
||||||
AgcConstraint constraint;
|
AgcConstraint constraint;
|
||||||
constraint.read(p.second);
|
ret = constraint.read(p.second);
|
||||||
|
if (ret)
|
||||||
|
return { ret, {} };
|
||||||
|
|
||||||
mode.push_back(std::move(constraint));
|
mode.push_back(std::move(constraint));
|
||||||
}
|
}
|
||||||
return mode;
|
|
||||||
|
return { 0, mode };
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string readConstraintModes(std::map<std::string, AgcConstraintMode> &constraintModes,
|
static std::tuple<int, std::string>
|
||||||
|
readConstraintModes(std::map<std::string, AgcConstraintMode> &constraintModes,
|
||||||
boost::property_tree::ptree const ¶ms)
|
boost::property_tree::ptree const ¶ms)
|
||||||
{
|
{
|
||||||
std::string first;
|
std::string first;
|
||||||
|
int ret;
|
||||||
|
|
||||||
for (auto &p : params) {
|
for (auto &p : params) {
|
||||||
constraintModes[p.first] = readConstraintMode(p.second);
|
std::tie(ret, constraintModes[p.first]) = readConstraintMode(p.second);
|
||||||
|
if (ret)
|
||||||
|
return { ret, {} };
|
||||||
|
|
||||||
if (first.empty())
|
if (first.empty())
|
||||||
first = p.first;
|
first = p.first;
|
||||||
}
|
}
|
||||||
return first;
|
|
||||||
|
return { 0, first };
|
||||||
}
|
}
|
||||||
|
|
||||||
int AgcConfig::read(boost::property_tree::ptree const ¶ms)
|
int AgcConfig::read(boost::property_tree::ptree const ¶ms)
|
||||||
{
|
{
|
||||||
LOG(RPiAgc, Debug) << "AgcConfig";
|
LOG(RPiAgc, Debug) << "AgcConfig";
|
||||||
defaultMeteringMode = readMeteringModes(meteringModes, params.get_child("metering_modes"));
|
int ret;
|
||||||
defaultExposureMode = readExposureModes(exposureModes, params.get_child("exposure_modes"));
|
|
||||||
defaultConstraintMode = readConstraintModes(constraintModes, params.get_child("constraint_modes"));
|
|
||||||
|
|
||||||
int ret = yTarget.read(params.get_child("y_target"));
|
std::tie(ret, defaultMeteringMode) =
|
||||||
|
readMeteringModes(meteringModes, params.get_child("metering_modes"));
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
std::tie(ret, defaultExposureMode) =
|
||||||
|
readExposureModes(exposureModes, params.get_child("exposure_modes"));
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
std::tie(ret, defaultConstraintMode) =
|
||||||
|
readConstraintModes(constraintModes, params.get_child("constraint_modes"));
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = yTarget.read(params.get_child("y_target"));
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue