<div dir="ltr"><div dir="ltr">Hi Laurent,<div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 27 Jul 2022 at 03:38, Laurent Pinchart <<a href="mailto:laurent.pinchart@ideasonboard.com">laurent.pinchart@ideasonboard.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Replace the manual implementation of the readList() functions with<br>
YamlObject::getList().<br>
<br>
Signed-off-by: Laurent Pinchart <<a href="mailto:laurent.pinchart@ideasonboard.com" target="_blank">laurent.pinchart@ideasonboard.com</a>><br></blockquote><div><br></div><div>This is a nice improvement!</div><div><br></div><div>Reviewed-by: Naushir Patuck <<a href="mailto:naush@raspberrypi.com">naush@raspberrypi.com</a>></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
---<br>
 src/ipa/raspberrypi/controller/rpi/agc.cpp | 43 +++++++---------------<br>
 1 file changed, 13 insertions(+), 30 deletions(-)<br>
<br>
diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp b/src/ipa/raspberrypi/controller/rpi/agc.cpp<br>
index 9fd339c6904e..b8eb5bc605a1 100644<br>
--- a/src/ipa/raspberrypi/controller/rpi/agc.cpp<br>
+++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp<br>
@@ -5,6 +5,7 @@<br>
  * agc.cpp - AGC/AEC control algorithm<br>
  */<br>
<br>
+#include <algorithm><br>
 #include <map><br>
 #include <tuple><br>
<br>
@@ -71,44 +72,26 @@ readMeteringModes(std::map<std::string, AgcMeteringMode> &metering_modes,<br>
        return { 0, first };<br>
 }<br>
<br>
-static int readList(std::vector<double> &list,<br>
-                   const libcamera::YamlObject &params)<br>
-{<br>
-       for (const auto &p : params.asList()) {<br>
-               auto value = p.get<double>();<br>
-               if (!value)<br>
-                       return -EINVAL;<br>
-               list.push_back(*value);<br>
-       }<br>
-<br>
-       return list.size();<br>
-}<br>
-<br>
-static int readList(std::vector<Duration> &list,<br>
-                   const libcamera::YamlObject &params)<br>
-{<br>
-       for (const auto &p : params.asList()) {<br>
-               auto value = p.get<double>();<br>
-               if (!value)<br>
-                       return -EINVAL;<br>
-               list.push_back(*value * 1us);<br>
-       }<br>
-<br>
-       return list.size();<br>
-}<br>
-<br>
 int AgcExposureMode::read(const libcamera::YamlObject &params)<br>
 {<br>
-       int numShutters = readList(shutter, params["shutter"]);<br>
-       int numAgs = readList(gain, params["gain"]);<br>
+       auto value = params["shutter"].getList<double>();<br>
+       if (!value)<br>
+               return -EINVAL;<br>
+       std::transform(value->begin(), value->end(), std::back_inserter(shutter),<br>
+                      [](double v) { return v * 1us; });<br>
<br>
-       if (numShutters < 2 || numAgs < 2) {<br>
+       value = params["gain"].getList<double>();<br>
+       if (!value)<br>
+               return -EINVAL;<br>
+       gain = std::move(*value);<br>
+<br>
+       if (shutter.size() < 2 || gain.size() < 2) {<br>
                LOG(RPiAgc, Error)<br>
                        << "AgcExposureMode: must have at least two entries in exposure profile";<br>
                return -EINVAL;<br>
        }<br>
<br>
-       if (numShutters != numAgs) {<br>
+       if (shutter.size() != gain.size()) {<br>
                LOG(RPiAgc, Error)<br>
                        << "AgcExposureMode: expect same number of exposure and gain entries in exposure profile";<br>
                return -EINVAL;<br>
-- <br>
Regards,<br>
<br>
Laurent Pinchart<br>
<br>
</blockquote></div></div>