[libcamera-devel] [IPU3-IPA PATCH] ipu3: Use ChromeOS tuning file paths

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Aug 6 14:20:13 CEST 2021


Hi Kieran,

On Fri, Aug 06, 2021 at 01:12:08PM +0100, Kieran Bingham wrote:
> On 06/08/2021 12:18, Laurent Pinchart wrote:
> > On Fri, Aug 06, 2021 at 12:07:11PM +0100, Kieran Bingham wrote:
> >> On 06/08/2021 11:42, Laurent Pinchart wrote:
> >>> On Fri, Aug 06, 2021 at 11:22:05AM +0100, Kieran Bingham wrote:
> >>>> During development, the IPA relied upon dupliated tuning file
> >>>
> >>> Did development run into a shortage of 'C's as well ? :-)
> >>>
> >>>> information to load as the aiqb.
> >>>>
> >>>> Use the ChromeOS files directly, and remove the libcamera dupliations.
> >>>
> >>> Same here.
> >>>
> >>> The commit message could be improved a bit, it's not clear what's
> >>> duplicated and why it should change.
> >>
> >> The tuning files are duplicated.
> >>
> >> The IPA relied upon duplicated tuning file information. Use the ChromeOS
> >> files directly and remove the libcamera duplications.
> >>
> >> What would you change to make it clearer? I can repeat the "tuning
> >> files" if you need?
> > 
> > During development, the IPA relied upon tuning database files copied
> > from Chrome OS, duplicated in this repository, and installed in a second
> > location on the target, in /usr/share/libcamera/ipa/ipu3/. Having two
> > copies of the same files on the target devices is not only pointless,
> > it also causes an issue with some Soraka models that use a different
> > sensor module, with a different tuning file.
> > 
> > Use the tuning files from Chrome OS directly and drop our copies.
> > 
> > 
> > 
> > And I think you can delete the copies in the same patch.
> 
> Sure - as stated below - I can do that - but not post it. Deleting the
> binary files generates a large binary diff in the patch, which doesn't
> need to hit the list.
> 
> >>>> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> >>>> ---
> >>>>
> >>>> A separate patch also deletes the duplicated tuning files from this
> >>>> repostiory, but as it's simply a remove of the unused files, and renders
> >>>> as a git-binary patch, I will not post it to the list, but simply apply
> >>>> it and remove the unused files if/when this patch is integrated.
> >>>
> >>> +1 for not carrying copies of the tuning files.
> >>
> >> Precisely, this was a development shortcut, and the time to remove them
> >> had evidently long passed :-)
> >>
> >>>>  data/meson.build | 12 ------------
> >>>>  ipu3.cpp         | 13 ++++++++-----
> >>>>  meson.build      |  1 -
> >>>>  3 files changed, 8 insertions(+), 18 deletions(-)
> >>>>  delete mode 100644 data/meson.build
> >>>>
> >>>> diff --git a/data/meson.build b/data/meson.build
> >>>> deleted file mode 100644
> >>>> index 3d6e5f56502a..000000000000
> >>>> --- a/data/meson.build
> >>>> +++ /dev/null
> >>>> @@ -1,12 +0,0 @@
> >>>> -# SPDX-License-Identifier: CC0-1.0
> >>>> -
> >>>> -ipa_data_dir = get_option('datadir') / 'libcamera' / 'ipa'
> >>>> -
> >>>> -ipu3_aiqb_data = files([
> >>>> -    '00ov13858.aiqb',
> >>>> -    '01ov5670.aiqb',
> >>>> -])
> >>>> -
> >>>> -install_data(ipu3_aiqb_data,
> >>>> -             install_dir : ipa_data_dir / 'ipu3')
> >>>> -
> >>>> diff --git a/ipu3.cpp b/ipu3.cpp
> >>>> index 4fce64785e3f..a9923fe7daf4 100644
> >>>> --- a/ipu3.cpp
> >>>> +++ b/ipu3.cpp
> >>>> @@ -94,9 +94,9 @@ int IPAIPU3::init(const IPASettings &settings)
> >>>>  	* or through the configuration interfaces perhaps.
> >>>>  	*/
> >>>>  	std::map<std::string, std::string> aiqb_paths = {
> >>>> -		{ "ov13858", "/usr/share/libcamera/ipa/ipu3/00ov13858.aiqb" },
> >>>> -		{ "ov5670", "/usr/share/libcamera/ipa/ipu3/01ov5670.aiqb" },
> >>>> -		{ "imx258", "/etc/camera/ipu3/00imx258.aiqb" },
> >>>> +		{ "ov13858", "00ov13858.aiqb" },
> >>>> +		{ "ov5670", "01ov5670.aiqb" },
> >>>> +		{ "imx258", "00imx258.aiqb" },
> >>>>  	};
> >>>>  
> >>>>  	LOG(IPAIPU3, Info) << "Initialising IPA IPU3 for "
> >>>> @@ -108,8 +108,11 @@ int IPAIPU3::init(const IPASettings &settings)
> >>>>  		return -EINVAL;
> >>>>  	}
> >>>>  
> >>>> -	LOG(IPAIPU3, Info) << "Using tuning file: " << it->second;
> >>>> -	ret = aiqb_.load(it->second.c_str());
> >>>> +	std::string tuningPath = "/etc/camera/ipu3/";
> >>>> +	std::string tuningFile = tuningPath + it->second;
> >>>
> >>> A comment to explain that the patch is specific to Chrome OS would be
> > 
> > I meant path, not patch.
> > 
> >>> nice, in case someone wants to use this on a different platform in the
> >>> future.
> >>
> >> There's actually already a comment above this block saying:
> >>
> >> 	/*
> >> 	* Temporary mapping of the sensor name to the AIQB data file.
> >> 	*
> >> 	* \todo: This mapping table should be handled more generically
> > 
> > s/://
> > 
> > (I seem to dislike colons these day)
> > 
> >> 	* or through the configuration interfaces perhaps.
> >> 	*/
> > 
> > Can you extend this to indicate that the /etc/camera/ipu3/ path is
> > specific to Chrome OS ?
> > 
> >>>> +
> >>>> +	LOG(IPAIPU3, Info) << "Using tuning file: " << tuningFile;
> >>>
> >>> s/://
> >>
> >> This would print
> >>
> >>  "Using tuning file /etc/camera/ipu3/00imx258.aiqb"
> >> as opposed to
> >>  "Using tuning file: /etc/camera/ipu3/00imx258.aiqb"
> > 
> > That's what I intended, yes :-)
> > 
> >> The colon is there as a clear demarcation of the separation between
> >> 'text' and 'filename'....
> > 
> > Probably a matter of personal preference then ? I think it reads better
> > with the colon.
> 
> ... Perhaps - And now I'm confused. I also think it reads better with
> the colon, that's why I put it there, and why I queried your suggested
> removal.
> 
> So I guess I can leave it there if you prefer it ?

Sorry, I meant without the colon :-) In my head it's like "I've painted
the bikeshed in red" vs. "I've painted the bikeshed in: red". The latter
doesn't have the same natural flow. It would be different for "Bikeshed
colour: red".

Feel free to keep or drop the colon, as you prefer.

> >>> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> >>>
> >>>> +	ret = aiqb_.load(tuningFile.c_str());
> >>>>  	if (ret) {
> >>>>  		LOG(IPAIPU3, Error) << "Failed to load AIQB";
> >>>>  		return -ENODATA;
> >>>> diff --git a/meson.build b/meson.build
> >>>> index e7d6c6b45208..6ea2793d92b8 100644
> >>>> --- a/meson.build
> >>>> +++ b/meson.build
> >>>> @@ -96,7 +96,6 @@ ipu3_ipa_deps = [
> >>>>  
> >>>>  subdir('aic')
> >>>>  subdir('aiq')
> >>>> -subdir('data')
> >>>>  subdir('src')
> >>>>  subdir('stats')
> >>>>  

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list