<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 ¶ms)<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 ¶ms)<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 ¶ms)<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>