[libcamera-devel] [PATCH v7 06/14] ipa: raspberrypi: Propagate errors from AGC metering tuning data read
Naushir Patuck
naush at raspberrypi.com
Wed Jul 27 12:14:58 CEST 2022
Hi Laurent,
Thank you for your patch.
On Wed, 27 Jul 2022 at 03:38, Laurent Pinchart <
laurent.pinchart at ideasonboard.com> wrote:
> 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 at ideasonboard.com>
>
Reviewed-by: Naushir Patuck <naush at raspberrypi.com>
> ---
> src/ipa/raspberrypi/controller/rpi/agc.cpp | 71 ++++++++++++++++------
> 1 file changed, 54 insertions(+), 17 deletions(-)
>
> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp
> b/src/ipa/raspberrypi/controller/rpi/agc.cpp
> index 130c606d4136..93f966a1d5ce 100644
> --- a/src/ipa/raspberrypi/controller/rpi/agc.cpp
> +++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp
> @@ -6,6 +6,7 @@
> */
>
> #include <map>
> +#include <tuple>
>
> #include <linux/bcm2835-isp.h>
>
> @@ -43,19 +44,25 @@ int AgcMeteringMode::read(boost::property_tree::ptree
> const ¶ms)
> return 0;
> }
>
> -static std::string
> +static std::tuple<int, std::string>
> readMeteringModes(std::map<std::string, AgcMeteringMode> &meteringModes,
> boost::property_tree::ptree const ¶ms)
> {
> std::string first;
> + int ret;
> +
> for (auto &p : params) {
> AgcMeteringMode meteringMode;
> - meteringMode.read(p.second);
> + ret = meteringMode.read(p.second);
> + if (ret)
> + return { ret, {} };
> +
> meteringModes[p.first] = std::move(meteringMode);
> if (first.empty())
> first = p.first;
> }
> - return first;
> +
> + return { 0, first };
> }
>
> static int readList(std::vector<double> &list,
> @@ -87,19 +94,25 @@ int AgcExposureMode::read(boost::property_tree::ptree
> const ¶ms)
> return 0;
> }
>
> -static std::string
> +static std::tuple<int, std::string>
> readExposureModes(std::map<std::string, AgcExposureMode> &exposureModes,
> boost::property_tree::ptree const ¶ms)
> {
> std::string first;
> + int ret;
> +
> for (auto &p : params) {
> AgcExposureMode exposureMode;
> - exposureMode.read(p.second);
> + ret = exposureMode.read(p.second);
> + if (ret)
> + return { ret, {} };
> +
> exposureModes[p.first] = std::move(exposureMode);
> if (first.empty())
> first = p.first;
> }
> - return first;
> +
> + return { 0, first };
> }
>
> 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"));
> }
>
> -static AgcConstraintMode
> +static std::tuple<int, AgcConstraintMode>
> readConstraintMode(boost::property_tree::ptree const ¶ms)
> {
> AgcConstraintMode mode;
> + int ret;
> +
> for (auto &p : params) {
> AgcConstraint constraint;
> - constraint.read(p.second);
> + ret = constraint.read(p.second);
> + if (ret)
> + return { ret, {} };
> +
> mode.push_back(std::move(constraint));
> }
> - return mode;
> +
> + return { 0, mode };
> }
>
> -static std::string readConstraintModes(std::map<std::string,
> AgcConstraintMode> &constraintModes,
> - boost::property_tree::ptree const
> ¶ms)
> +static std::tuple<int, std::string>
> +readConstraintModes(std::map<std::string, AgcConstraintMode>
> &constraintModes,
> + boost::property_tree::ptree const ¶ms)
> {
> std::string first;
> + int ret;
> +
> 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())
> first = p.first;
> }
> - return first;
> +
> + return { 0, first };
> }
>
> int AgcConfig::read(boost::property_tree::ptree const ¶ms)
> {
> LOG(RPiAgc, Debug) << "AgcConfig";
> - defaultMeteringMode = readMeteringModes(meteringModes,
> params.get_child("metering_modes"));
> - defaultExposureMode = readExposureModes(exposureModes,
> params.get_child("exposure_modes"));
> - defaultConstraintMode = readConstraintModes(constraintModes,
> params.get_child("constraint_modes"));
> + int ret;
>
> - 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)
> return ret;
>
> --
> Regards,
>
> Laurent Pinchart
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20220727/6fa836a2/attachment.htm>
More information about the libcamera-devel
mailing list