[{"id":24183,"web_url":"https://patchwork.libcamera.org/comment/24183/","msgid":"<CAEmqJPov7JpP8uoAx-ftHMZUBMYscBO13ngS4tSiJ2BdA_sC3A@mail.gmail.com>","date":"2022-07-27T10:14:58","subject":"Re: [libcamera-devel] [PATCH v7 06/14] ipa: raspberrypi: Propagate\n\terrors from AGC metering tuning data read","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi Laurent,\n\nThank you for your patch.\n\nOn Wed, 27 Jul 2022 at 03:38, Laurent Pinchart <\nlaurent.pinchart@ideasonboard.com> wrote:\n\n> Update the AGC metering functions that deal with reading tuning data to\n> propagate errors to the caller, using std::tie and std::tuple to group\n> the error code and return value.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n\nReviewed-by: Naushir Patuck <naush@raspberrypi.com>\n\n\n> ---\n>  src/ipa/raspberrypi/controller/rpi/agc.cpp | 71 ++++++++++++++++------\n>  1 file changed, 54 insertions(+), 17 deletions(-)\n>\n> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> index 130c606d4136..93f966a1d5ce 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> +++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n> @@ -6,6 +6,7 @@\n>   */\n>\n>  #include <map>\n> +#include <tuple>\n>\n>  #include <linux/bcm2835-isp.h>\n>\n> @@ -43,19 +44,25 @@ int AgcMeteringMode::read(boost::property_tree::ptree\n> const &params)\n>         return 0;\n>  }\n>\n> -static std::string\n> +static std::tuple<int, std::string>\n>  readMeteringModes(std::map<std::string, AgcMeteringMode> &meteringModes,\n>                   boost::property_tree::ptree const &params)\n>  {\n>         std::string first;\n> +       int ret;\n> +\n>         for (auto &p : params) {\n>                 AgcMeteringMode meteringMode;\n> -               meteringMode.read(p.second);\n> +               ret = meteringMode.read(p.second);\n> +               if (ret)\n> +                       return { ret, {} };\n> +\n>                 meteringModes[p.first] = std::move(meteringMode);\n>                 if (first.empty())\n>                         first = p.first;\n>         }\n> -       return first;\n> +\n> +       return { 0, first };\n>  }\n>\n>  static int readList(std::vector<double> &list,\n> @@ -87,19 +94,25 @@ int AgcExposureMode::read(boost::property_tree::ptree\n> const &params)\n>         return 0;\n>  }\n>\n> -static std::string\n> +static std::tuple<int, std::string>\n>  readExposureModes(std::map<std::string, AgcExposureMode> &exposureModes,\n>                   boost::property_tree::ptree const &params)\n>  {\n>         std::string first;\n> +       int ret;\n> +\n>         for (auto &p : params) {\n>                 AgcExposureMode exposureMode;\n> -               exposureMode.read(p.second);\n> +               ret = exposureMode.read(p.second);\n> +               if (ret)\n> +                       return { ret, {} };\n> +\n>                 exposureModes[p.first] = std::move(exposureMode);\n>                 if (first.empty())\n>                         first = p.first;\n>         }\n> -       return first;\n> +\n> +       return { 0, first };\n>  }\n>\n>  int AgcConstraint::read(boost::property_tree::ptree const &params)\n> @@ -115,38 +128,62 @@ int AgcConstraint::read(boost::property_tree::ptree\n> const &params)\n>         return yTarget.read(params.get_child(\"y_target\"));\n>  }\n>\n> -static AgcConstraintMode\n> +static std::tuple<int, AgcConstraintMode>\n>  readConstraintMode(boost::property_tree::ptree const &params)\n>  {\n>         AgcConstraintMode mode;\n> +       int ret;\n> +\n>         for (auto &p : params) {\n>                 AgcConstraint constraint;\n> -               constraint.read(p.second);\n> +               ret = constraint.read(p.second);\n> +               if (ret)\n> +                       return { ret, {} };\n> +\n>                 mode.push_back(std::move(constraint));\n>         }\n> -       return mode;\n> +\n> +       return { 0, mode };\n>  }\n>\n> -static std::string readConstraintModes(std::map<std::string,\n> AgcConstraintMode> &constraintModes,\n> -                                      boost::property_tree::ptree const\n> &params)\n> +static std::tuple<int, std::string>\n> +readConstraintModes(std::map<std::string, AgcConstraintMode>\n> &constraintModes,\n> +                   boost::property_tree::ptree const &params)\n>  {\n>         std::string first;\n> +       int ret;\n> +\n>         for (auto &p : params) {\n> -               constraintModes[p.first] = readConstraintMode(p.second);\n> +               std::tie(ret, constraintModes[p.first]) =\n> readConstraintMode(p.second);\n> +               if (ret)\n> +                       return { ret, {} };\n> +\n>                 if (first.empty())\n>                         first = p.first;\n>         }\n> -       return first;\n> +\n> +       return { 0, first };\n>  }\n>\n>  int AgcConfig::read(boost::property_tree::ptree const &params)\n>  {\n>         LOG(RPiAgc, Debug) << \"AgcConfig\";\n> -       defaultMeteringMode = readMeteringModes(meteringModes,\n> params.get_child(\"metering_modes\"));\n> -       defaultExposureMode = readExposureModes(exposureModes,\n> params.get_child(\"exposure_modes\"));\n> -       defaultConstraintMode = readConstraintModes(constraintModes,\n> params.get_child(\"constraint_modes\"));\n> +       int ret;\n>\n> -       int ret = yTarget.read(params.get_child(\"y_target\"));\n> +       std::tie(ret, defaultMeteringMode) =\n> +               readMeteringModes(meteringModes,\n> params.get_child(\"metering_modes\"));\n> +       if (ret)\n> +               return ret;\n> +       std::tie(ret, defaultExposureMode) =\n> +               readExposureModes(exposureModes,\n> params.get_child(\"exposure_modes\"));\n> +       if (ret)\n> +               return ret;\n> +       std::tie(ret, defaultConstraintMode) =\n> +               readConstraintModes(constraintModes,\n> params.get_child(\"constraint_modes\"));\n> +       if (ret)\n> +               return ret;\n> +\n> +       ret = yTarget.read(params.get_child(\"y_target\"));\n>         if (ret)\n>                 return ret;\n>\n> --\n> Regards,\n>\n> Laurent Pinchart\n>\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 3F51DC3275\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 27 Jul 2022 10:15:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A16AF63314;\n\tWed, 27 Jul 2022 12:15:16 +0200 (CEST)","from mail-lj1-x22a.google.com (mail-lj1-x22a.google.com\n\t[IPv6:2a00:1450:4864:20::22a])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3C84763310\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 27 Jul 2022 12:15:15 +0200 (CEST)","by mail-lj1-x22a.google.com with SMTP id p21so11628709ljh.12\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 27 Jul 2022 03:15:15 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1658916916;\n\tbh=FRpbxCjb28bUuqJXDqZ/JUaZmrP4SO8QEgNAzuoBCKQ=;\n\th=References:In-Reply-To:Date:To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=SOWSwaJqmNZAPOINaRs1FraVsYJyC7EgEafzK825iOoWUoAluzk9MA/iafEgE1A3/\n\t5Bjpl6WlbjT1JKOc/O92A42C1nIY3HIU46n0YIKW08uw3uBESnVlOv84YCWyMfxY9+\n\tFmKxhHp4W1nNdIMoTZiqL2/IDyCzhnNpd+vdPJI5rcINQstulZHVZNubdVE5DVuxjm\n\tJa+u5YBZZm2v7oF61/R7gmkyU2cFvpcH6rCLWmhqWWbJ8zIGBKQfaufbk6j7c/p3ux\n\toGbvNtxE/LEMpsGiEV61dPNxImDZZ+qdsWjWC3wM9PKqOT9Ja1uVC2f8YKNX23fMWb\n\tVl4Nsnb7pg6rw==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=15JKEa0C+ecut00OLMnqYWwlis6TZpvNVcs3G6HADwE=;\n\tb=D1MkVckXGQVUo200OOIfALEnrb28lsJj+PuhI3BHCpObR5GjueVoRhF150tbaV2xMg\n\tDpndQCaeQUpE3fwgnItW1UFJ/ZCprE12h1ovBuAipsFB6Mc4pROtVCCS1HNN0RHQk6pS\n\ti5iOrkHRHX0U0yAGRR/n7rPSWPEUmwnrZ1M9QiUs5XJU7VUS/XuIy+yfYJGV5H66XczE\n\t+NvDcZ7vJgSmrGC4Tkt/It9hk0DQVAjb34O3NTZgdq15LtC3Z/c+U3PiF4eUeJ4lXri+\n\tB/+W4SQLXbDXWiUwswfXZUDeKhER2Ev0hLkhIfuA+E/ZqOihQDcLsitdfi3Nkvy30R/d\n\tCVIA=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"D1MkVckX\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=15JKEa0C+ecut00OLMnqYWwlis6TZpvNVcs3G6HADwE=;\n\tb=EENeeLXLEuHN5Z9/I+y601DySEh8Kxa1tsB2xekpTruZOpWmfp7ys83w2L/5DojTZB\n\tsul/qT0swrfdpHqzxSKv2j4RzNBu0uvbzvNekWpC5ZZK901p0CRE8c1610dLuDuLEj9c\n\tvg89injjwSR9fgVuaRdYg1VM6++JKW7GPh0f/sGVg4iQjhjO933/fljGByZA79apx2K/\n\t4iF9XJscScDgx13GHbUrfGsV1YO5tsVg1gsRrDThcKfV1g/ifgbPCssZlWdA/43Xy3tg\n\tirvQIKz4qDvk/vU8Fbpmm0XRBx481PViTNJXjWe76ibMUKN/u40sRZeeMPHzdhJhiuMR\n\tZe1g==","X-Gm-Message-State":"AJIora8DmwuAsB0McUYSxSn9ZmaIQw0Pyzy257XgFSrLPdd5C5cvuLMH\n\tfO4ab2NLnfU+h5ujeuIDEYGj4r0y+dhtBkSRQs2IS32uHf0=","X-Google-Smtp-Source":"AGRyM1s6Zij95mm+lyFGkEwy/E+dA8XXJ0X3KLQEvZ12ily1CBwcKBpPcJKHLbyRWvQ4IFUntHoWKu2Yh6zgRZBHFPk=","X-Received":"by 2002:a2e:9e52:0:b0:25e:3cd:30c3 with SMTP id\n\tg18-20020a2e9e52000000b0025e03cd30c3mr4924174ljk.306.1658916914390;\n\tWed, 27 Jul 2022 03:15:14 -0700 (PDT)","MIME-Version":"1.0","References":"<20220727023816.30008-1-laurent.pinchart@ideasonboard.com>\n\t<20220727023816.30008-7-laurent.pinchart@ideasonboard.com>","In-Reply-To":"<20220727023816.30008-7-laurent.pinchart@ideasonboard.com>","Date":"Wed, 27 Jul 2022 11:14:58 +0100","Message-ID":"<CAEmqJPov7JpP8uoAx-ftHMZUBMYscBO13ngS4tSiJ2BdA_sC3A@mail.gmail.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Content-Type":"multipart/alternative; boundary=\"00000000000064fcb205e4c6b1d1\"","Subject":"Re: [libcamera-devel] [PATCH v7 06/14] ipa: raspberrypi: Propagate\n\terrors from AGC metering tuning data read","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Naushir Patuck via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Naushir Patuck <naush@raspberrypi.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]