[libcamera-devel] [PATCH v3 3/5] ipa: rkisp1: Add Yaml tuning file support
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Sun Jun 19 17:47:42 CEST 2022
Hi Florian,
Another question.
On Fri, Jun 17, 2022 at 08:39:10PM +0300, Laurent Pinchart via libcamera-devel wrote:
> On Fri, Jun 17, 2022 at 11:23:13AM +0200, Florian Sylvestre wrote:
> > Retrieve root node in Yaml tuning file and provide to
> > each algorithm this YamlObject to allow them to grab their default
> > parameters by calling init() function.
> >
> > Signed-off-by: Florian Sylvestre <fsylvestre at baylibre.com>
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> > ---
> > src/ipa/rkisp1/rkisp1.cpp | 34 ++++++++++++++++++++++++++++++++++
> > 1 file changed, 34 insertions(+)
> >
> > diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
> > index 61a3bab9..5eb23669 100644
> > --- a/src/ipa/rkisp1/rkisp1.cpp
> > +++ b/src/ipa/rkisp1/rkisp1.cpp
> > @@ -14,6 +14,7 @@
> > #include <linux/rkisp1-config.h>
> > #include <linux/v4l2-controls.h>
> >
> > +#include <libcamera/base/file.h>
> > #include <libcamera/base/log.h>
> >
> > #include <libcamera/control_ids.h>
> > @@ -24,6 +25,7 @@
> > #include <libcamera/request.h>
> >
> > #include "libcamera/internal/mapped_framebuffer.h"
> > +#include "libcamera/internal/yaml_parser.h"
> >
> > #include "algorithms/agc.h"
> > #include "algorithms/algorithm.h"
> > @@ -61,6 +63,7 @@ public:
> > private:
> > void setControls(unsigned int frame);
> > void prepareMetadata(unsigned int frame, unsigned int aeState);
> > + int parseConfigurationFile(File &file);
> >
> > std::map<unsigned int, FrameBuffer> buffers_;
> > std::map<unsigned int, MappedFrameBuffer> mappedBuffers_;
> > @@ -126,6 +129,37 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision)
> > algorithms_.push_back(std::make_unique<algorithms::Awb>());
> > algorithms_.push_back(std::make_unique<algorithms::BlackLevelCorrection>());
> >
> > + /* Load the tuning file for this sensor. */
> > + File file(settings.configurationFile.c_str());
> > + if (!file.open(File::OpenModeFlag::ReadOnly)) {
> > + int ret = file.error();
> > + LOG(IPARkISP1, Error)
> > + << "Failed to open configuration file "
> > + << settings.configurationFile << ": " << strerror(-ret);
Let's add quotes here, as otherwise when the file doesn't exist the
error message isn't very clear:
[0:41:48.257336778] [318] ERROR IPARkISP1 rkisp1.cpp:136 Failed to open configuration file : No such file or directory
LOG(IPARkISP1, Error)
<< "Failed to open configuration file '"
<< settings.configurationFile << "': "
<< strerror(-ret);
> > + return ret;
This introduces a regression as all platforms that currently work with
the rkisp1 pipeline handler will fail here.
I wonder how we should handle this, both short term and long term. In
the short term we could treat this as a warning and use defaults for the
algorithms (or just disable them). In the long term, do we want to make
the tuning file mandatory ?
> > + }
> > +
> > + return parseConfigurationFile(file);
> > +}
> > +
> > +int IPARkISP1::parseConfigurationFile(File &file)
> > +{
> > + std::unique_ptr<libcamera::YamlObject> root = YamlParser::parse(file);
> > + if (!root)
> > + return -EINVAL;
> > +
> > + const YamlObject &algoObject = (*root)["algorithms"];
> > +
> > + if (!algoObject["algorithms"].isDictionary())
> > + return -EINVAL;
>
> I'm surprised that we go past this, as the tuning data file now has a
> list for the algorithms element, not a dictionary. I'll test this.
>
> This makes me realize that my suggestion of using a list will also cause
> other issues. I'll experiment a bit. Do you mind if I take over and send
> a v4, in case that's easier than explaining my findings and asking you
> to implement them ?
>
> > +
> > + /* Allow each algo to get parameters from configuration file. */
> > + for (auto const &algo : algorithms_) {
> > + int ret = algo->init(context_, algoObject);
> > + if (ret)
> > + return ret;
> > + }
> > +
> > return 0;
> > }
> >
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list