[libcamera-devel,v3,1/9] ipa: move libipa::Algorithm to ipa/ipu3/algorithms
diff mbox series

Message ID 20210818155403.268694-2-jeanmichel.hautbois@ideasonboard.com
State Superseded
Headers show
Series
  • IPU3: Introduce modularity for algorithms
Related show

Commit Message

Jean-Michel Hautbois Aug. 18, 2021, 3:53 p.m. UTC
The abstract Algorithm class was originally placed in libipa as an attempt to
define a generic algorithm container.
This was a little optimistic and pushed a bit far too early.

Move the Algorithm class into the IPU3 which is the only user of the class,
as we adapt it to support modular algorithm components for the IPU3.

Not documenting the namespace may cause issues with Doxygen in libipa.
The file libipa.cpp is thus created as an empty file for now, but we can
leverage it in the future to add more global libipa documentation, and possibly
code too.

Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham kieran.bingham@ideasonboard.com
---
 .../{libipa => ipu3/algorithms}/algorithm.cpp | 17 ++++---------
 src/ipa/ipu3/algorithms/algorithm.h           | 24 +++++++++++++++++++
 src/ipa/ipu3/algorithms/meson.build           |  5 ++++
 src/ipa/ipu3/ipu3_agc.h                       |  2 +-
 src/ipa/ipu3/ipu3_awb.h                       |  2 +-
 src/ipa/ipu3/meson.build                      |  4 ++++
 src/ipa/libipa/algorithm.h                    | 24 -------------------
 src/ipa/libipa/libipa.cpp                     | 22 +++++++++++++++++
 src/ipa/libipa/meson.build                    |  5 ++--
 9 files changed, 63 insertions(+), 42 deletions(-)
 rename src/ipa/{libipa => ipu3/algorithms}/algorithm.cpp (55%)
 create mode 100644 src/ipa/ipu3/algorithms/algorithm.h
 create mode 100644 src/ipa/ipu3/algorithms/meson.build
 delete mode 100644 src/ipa/libipa/algorithm.h
 create mode 100644 src/ipa/libipa/libipa.cpp

Comments

Laurent Pinchart Aug. 18, 2021, 6:52 p.m. UTC | #1
On Wed, Aug 18, 2021 at 05:53:55PM +0200, Jean-Michel Hautbois wrote:
> The abstract Algorithm class was originally placed in libipa as an attempt to
> define a generic algorithm container.
> This was a little optimistic and pushed a bit far too early.
> 
> Move the Algorithm class into the IPU3 which is the only user of the class,
> as we adapt it to support modular algorithm components for the IPU3.
> 
> Not documenting the namespace may cause issues with Doxygen in libipa.
> The file libipa.cpp is thus created as an empty file for now, but we can
> leverage it in the future to add more global libipa documentation, and possibly
> code too.

Please reflow the commit message to 72 columns. Isn't that the default
btw, or do I have a local configuration that I have forgotten about ?

> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
> Reviewed-by: Kieran Bingham kieran.bingham@ideasonboard.com
> ---
>  .../{libipa => ipu3/algorithms}/algorithm.cpp | 17 ++++---------
>  src/ipa/ipu3/algorithms/algorithm.h           | 24 +++++++++++++++++++
>  src/ipa/ipu3/algorithms/meson.build           |  5 ++++
>  src/ipa/ipu3/ipu3_agc.h                       |  2 +-
>  src/ipa/ipu3/ipu3_awb.h                       |  2 +-
>  src/ipa/ipu3/meson.build                      |  4 ++++
>  src/ipa/libipa/algorithm.h                    | 24 -------------------
>  src/ipa/libipa/libipa.cpp                     | 22 +++++++++++++++++
>  src/ipa/libipa/meson.build                    |  5 ++--
>  9 files changed, 63 insertions(+), 42 deletions(-)
>  rename src/ipa/{libipa => ipu3/algorithms}/algorithm.cpp (55%)
>  create mode 100644 src/ipa/ipu3/algorithms/algorithm.h
>  create mode 100644 src/ipa/ipu3/algorithms/meson.build
>  delete mode 100644 src/ipa/libipa/algorithm.h
>  create mode 100644 src/ipa/libipa/libipa.cpp
> 
> diff --git a/src/ipa/libipa/algorithm.cpp b/src/ipa/ipu3/algorithms/algorithm.cpp
> similarity index 55%
> rename from src/ipa/libipa/algorithm.cpp
> rename to src/ipa/ipu3/algorithms/algorithm.cpp
> index 930f9353..325d34f0 100644
> --- a/src/ipa/libipa/algorithm.cpp
> +++ b/src/ipa/ipu3/algorithms/algorithm.cpp
> @@ -2,7 +2,7 @@
>  /*
>   * Copyright (C) 2021, Ideas On Board
>   *
> - * algorithm.cpp - ISP control algorithms
> + * algorithm.h - IPU3 control algorithm interface

s/algorithm.h/algorithm.cpp/

>   */
>  
>  #include "algorithm.h"
> @@ -14,26 +14,17 @@
>  
>  namespace libcamera {
>  
> -/**
> - * \brief The IPA namespace
> - *
> - * The IPA namespace groups all types specific to IPA modules. It serves as the
> - * top-level namespace for the IPA library libipa, and also contains
> - * module-specific namespaces for IPA modules.
> - */
> -namespace ipa {
> +namespace ipa::ipu3 {
>  
>  /**
>   * \class Algorithm
> - * \brief The base class for all IPA algorithms
> + * \brief The base class for all IPU3 algorithms
>   *
>   * The Algorithm class defines a standard interface for IPA algorithms. By
>   * abstracting algorithms, it makes possible the implementation of generic code
>   * to manage algorithms regardless of their specific type.
>   */
>  
> -Algorithm::~Algorithm() = default;
> -
> -} /* namespace ipa */
> +} /* namespace ipa::ipu3 */
>  
>  } /* namespace libcamera */
> diff --git a/src/ipa/ipu3/algorithms/algorithm.h b/src/ipa/ipu3/algorithms/algorithm.h
> new file mode 100644
> index 00000000..072f01c4
> --- /dev/null
> +++ b/src/ipa/ipu3/algorithms/algorithm.h
> @@ -0,0 +1,24 @@
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> +/*
> + * Copyright (C) 2021, Ideas On Board
> + *
> + * algorithm.h - IPU3 control algorithm interface
> + */
> +#ifndef __LIBCAMERA_IPA_IPU3_ALGORITHM_H__
> +#define __LIBCAMERA_IPA_IPU3_ALGORITHM_H__
> +
> +namespace libcamera {
> +
> +namespace ipa::ipu3 {
> +
> +class Algorithm
> +{
> +public:
> +	virtual ~Algorithm() {}
> +};
> +
> +} /* namespace ipa::ipu3 */
> +
> +} /* namespace libcamera */
> +
> +#endif /* __LIBCAMERA_IPA_IPU3_ALGORITHM_H__ */
> diff --git a/src/ipa/ipu3/algorithms/meson.build b/src/ipa/ipu3/algorithms/meson.build
> new file mode 100644
> index 00000000..dc538b79
> --- /dev/null
> +++ b/src/ipa/ipu3/algorithms/meson.build
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: CC0-1.0
> +
> +ipu3_ipa_algorithms = files([
> +    'algorithm.cpp',
> +])

We may need to also track headers, in order to rebuild the documentation
when they change (doxygen doesn't need an explicit list of headers, but
meson needs to know about the dependency of the documentation to the
headers). This can be handled later, when plumbing this with doxygen.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> diff --git a/src/ipa/ipu3/ipu3_agc.h b/src/ipa/ipu3/ipu3_agc.h
> index 9f3d4257..f00b98d6 100644
> --- a/src/ipa/ipu3/ipu3_agc.h
> +++ b/src/ipa/ipu3/ipu3_agc.h
> @@ -13,7 +13,7 @@
>  
>  #include <libcamera/geometry.h>
>  
> -#include "libipa/algorithm.h"
> +#include "algorithms/algorithm.h"
>  
>  namespace libcamera {
>  
> diff --git a/src/ipa/ipu3/ipu3_awb.h b/src/ipa/ipu3/ipu3_awb.h
> index 122cf68c..ea2d4320 100644
> --- a/src/ipa/ipu3/ipu3_awb.h
> +++ b/src/ipa/ipu3/ipu3_awb.h
> @@ -13,7 +13,7 @@
>  
>  #include <libcamera/geometry.h>
>  
> -#include "libipa/algorithm.h"
> +#include "algorithms/algorithm.h"
>  
>  namespace libcamera {
>  
> diff --git a/src/ipa/ipu3/meson.build b/src/ipa/ipu3/meson.build
> index b6364190..fcb27d68 100644
> --- a/src/ipa/ipu3/meson.build
> +++ b/src/ipa/ipu3/meson.build
> @@ -1,5 +1,7 @@
>  # SPDX-License-Identifier: CC0-1.0
>  
> +subdir('algorithms')
> +
>  ipa_name = 'ipa_ipu3'
>  
>  ipu3_ipa_sources = files([
> @@ -8,6 +10,8 @@ ipu3_ipa_sources = files([
>      'ipu3_awb.cpp',
>  ])
>  
> +ipu3_ipa_sources += ipu3_ipa_algorithms
> +
>  mod = shared_module(ipa_name,
>                      [ipu3_ipa_sources, libcamera_generated_ipa_headers],
>                      name_prefix : '',
> diff --git a/src/ipa/libipa/algorithm.h b/src/ipa/libipa/algorithm.h
> deleted file mode 100644
> index 89cee4c4..00000000
> --- a/src/ipa/libipa/algorithm.h
> +++ /dev/null
> @@ -1,24 +0,0 @@
> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
> -/*
> - * Copyright (C) 2021, Ideas On Board
> - *
> - * algorithm.h - ISP control algorithm interface
> - */
> -#ifndef __LIBCAMERA_IPA_LIBIPA_ALGORITHM_H__
> -#define __LIBCAMERA_IPA_LIBIPA_ALGORITHM_H__
> -
> -namespace libcamera {
> -
> -namespace ipa {
> -
> -class Algorithm
> -{
> -public:
> -	virtual ~Algorithm();
> -};
> -
> -} /* namespace ipa */
> -
> -} /* namespace libcamera */
> -
> -#endif /* __LIBCAMERA_IPA_LIBIPA_ALGORITHM_H__ */
> diff --git a/src/ipa/libipa/libipa.cpp b/src/ipa/libipa/libipa.cpp
> new file mode 100644
> index 00000000..08bc3541
> --- /dev/null
> +++ b/src/ipa/libipa/libipa.cpp
> @@ -0,0 +1,22 @@
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> +/*
> + * Copyright (C) 2021, Ideas On Board
> + *
> + * libipa.cpp - libipa interface
> + */
> +
> +namespace libcamera {
> +
> +/**
> + * \brief The IPA namespace
> + *
> + * The IPA namespace groups all types specific to IPA modules. It serves as the
> + * top-level namespace for the IPA library libipa, and also contains
> + * module-specific namespaces for IPA modules.
> + */
> +namespace ipa {
> +
> +} /* namespace ipa */
> +
> +} /* namespace libcamera */
> +
> diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build
> index 3fda7c00..4d073a03 100644
> --- a/src/ipa/libipa/meson.build
> +++ b/src/ipa/libipa/meson.build
> @@ -1,15 +1,14 @@
>  # SPDX-License-Identifier: CC0-1.0
>  
>  libipa_headers = files([
> -    'algorithm.h',
>      'camera_sensor_helper.h',
>      'histogram.h'
>  ])
>  
>  libipa_sources = files([
> -    'algorithm.cpp',
>      'camera_sensor_helper.cpp',
> -    'histogram.cpp'
> +    'histogram.cpp',
> +    'libipa.cpp',
>  ])
>  
>  libipa_includes = include_directories('..')
Jean-Michel Hautbois Aug. 18, 2021, 7:09 p.m. UTC | #2
On 18/08/2021 20:52, Laurent Pinchart wrote:
> On Wed, Aug 18, 2021 at 05:53:55PM +0200, Jean-Michel Hautbois wrote:
>> The abstract Algorithm class was originally placed in libipa as an attempt to
>> define a generic algorithm container.
>> This was a little optimistic and pushed a bit far too early.
>>
>> Move the Algorithm class into the IPU3 which is the only user of the class,
>> as we adapt it to support modular algorithm components for the IPU3.
>>
>> Not documenting the namespace may cause issues with Doxygen in libipa.
>> The file libipa.cpp is thus created as an empty file for now, but we can
>> leverage it in the future to add more global libipa documentation, and possibly
>> code too.
> 
> Please reflow the commit message to 72 columns. Isn't that the default
> btw, or do I have a local configuration that I have forgotten about ?

It is the default, but I noticed that when I go inside a line to modify
it it may not wrap properly, while typing the sentence entirely works
fine...

>> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
>> Reviewed-by: Kieran Bingham kieran.bingham@ideasonboard.com
>> ---
>>  .../{libipa => ipu3/algorithms}/algorithm.cpp | 17 ++++---------
>>  src/ipa/ipu3/algorithms/algorithm.h           | 24 +++++++++++++++++++
>>  src/ipa/ipu3/algorithms/meson.build           |  5 ++++
>>  src/ipa/ipu3/ipu3_agc.h                       |  2 +-
>>  src/ipa/ipu3/ipu3_awb.h                       |  2 +-
>>  src/ipa/ipu3/meson.build                      |  4 ++++
>>  src/ipa/libipa/algorithm.h                    | 24 -------------------
>>  src/ipa/libipa/libipa.cpp                     | 22 +++++++++++++++++
>>  src/ipa/libipa/meson.build                    |  5 ++--
>>  9 files changed, 63 insertions(+), 42 deletions(-)
>>  rename src/ipa/{libipa => ipu3/algorithms}/algorithm.cpp (55%)
>>  create mode 100644 src/ipa/ipu3/algorithms/algorithm.h
>>  create mode 100644 src/ipa/ipu3/algorithms/meson.build
>>  delete mode 100644 src/ipa/libipa/algorithm.h
>>  create mode 100644 src/ipa/libipa/libipa.cpp
>>
>> diff --git a/src/ipa/libipa/algorithm.cpp b/src/ipa/ipu3/algorithms/algorithm.cpp
>> similarity index 55%
>> rename from src/ipa/libipa/algorithm.cpp
>> rename to src/ipa/ipu3/algorithms/algorithm.cpp
>> index 930f9353..325d34f0 100644
>> --- a/src/ipa/libipa/algorithm.cpp
>> +++ b/src/ipa/ipu3/algorithms/algorithm.cpp
>> @@ -2,7 +2,7 @@
>>  /*
>>   * Copyright (C) 2021, Ideas On Board
>>   *
>> - * algorithm.cpp - ISP control algorithms
>> + * algorithm.h - IPU3 control algorithm interface
> 
> s/algorithm.h/algorithm.cpp/
> 

Oh, how did I let that one !

>>   */
>>  
>>  #include "algorithm.h"
>> @@ -14,26 +14,17 @@
>>  
>>  namespace libcamera {
>>  
>> -/**
>> - * \brief The IPA namespace
>> - *
>> - * The IPA namespace groups all types specific to IPA modules. It serves as the
>> - * top-level namespace for the IPA library libipa, and also contains
>> - * module-specific namespaces for IPA modules.
>> - */
>> -namespace ipa {
>> +namespace ipa::ipu3 {
>>  
>>  /**
>>   * \class Algorithm
>> - * \brief The base class for all IPA algorithms
>> + * \brief The base class for all IPU3 algorithms
>>   *
>>   * The Algorithm class defines a standard interface for IPA algorithms. By
>>   * abstracting algorithms, it makes possible the implementation of generic code
>>   * to manage algorithms regardless of their specific type.
>>   */
>>  
>> -Algorithm::~Algorithm() = default;
>> -
>> -} /* namespace ipa */
>> +} /* namespace ipa::ipu3 */
>>  
>>  } /* namespace libcamera */
>> diff --git a/src/ipa/ipu3/algorithms/algorithm.h b/src/ipa/ipu3/algorithms/algorithm.h
>> new file mode 100644
>> index 00000000..072f01c4
>> --- /dev/null
>> +++ b/src/ipa/ipu3/algorithms/algorithm.h
>> @@ -0,0 +1,24 @@
>> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
>> +/*
>> + * Copyright (C) 2021, Ideas On Board
>> + *
>> + * algorithm.h - IPU3 control algorithm interface
>> + */
>> +#ifndef __LIBCAMERA_IPA_IPU3_ALGORITHM_H__
>> +#define __LIBCAMERA_IPA_IPU3_ALGORITHM_H__
>> +
>> +namespace libcamera {
>> +
>> +namespace ipa::ipu3 {
>> +
>> +class Algorithm
>> +{
>> +public:
>> +	virtual ~Algorithm() {}
>> +};
>> +
>> +} /* namespace ipa::ipu3 */
>> +
>> +} /* namespace libcamera */
>> +
>> +#endif /* __LIBCAMERA_IPA_IPU3_ALGORITHM_H__ */
>> diff --git a/src/ipa/ipu3/algorithms/meson.build b/src/ipa/ipu3/algorithms/meson.build
>> new file mode 100644
>> index 00000000..dc538b79
>> --- /dev/null
>> +++ b/src/ipa/ipu3/algorithms/meson.build
>> @@ -0,0 +1,5 @@
>> +# SPDX-License-Identifier: CC0-1.0
>> +
>> +ipu3_ipa_algorithms = files([
>> +    'algorithm.cpp',
>> +])
> 
> We may need to also track headers, in order to rebuild the documentation
> when they change (doxygen doesn't need an explicit list of headers, but
> meson needs to know about the dependency of the documentation to the
> headers). This can be handled later, when plumbing this with doxygen.
> 

Yes, I hesitated, but could not foresee a need for it now.

> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Thx :-)
> 
>> diff --git a/src/ipa/ipu3/ipu3_agc.h b/src/ipa/ipu3/ipu3_agc.h
>> index 9f3d4257..f00b98d6 100644
>> --- a/src/ipa/ipu3/ipu3_agc.h
>> +++ b/src/ipa/ipu3/ipu3_agc.h
>> @@ -13,7 +13,7 @@
>>  
>>  #include <libcamera/geometry.h>
>>  
>> -#include "libipa/algorithm.h"
>> +#include "algorithms/algorithm.h"
>>  
>>  namespace libcamera {
>>  
>> diff --git a/src/ipa/ipu3/ipu3_awb.h b/src/ipa/ipu3/ipu3_awb.h
>> index 122cf68c..ea2d4320 100644
>> --- a/src/ipa/ipu3/ipu3_awb.h
>> +++ b/src/ipa/ipu3/ipu3_awb.h
>> @@ -13,7 +13,7 @@
>>  
>>  #include <libcamera/geometry.h>
>>  
>> -#include "libipa/algorithm.h"
>> +#include "algorithms/algorithm.h"
>>  
>>  namespace libcamera {
>>  
>> diff --git a/src/ipa/ipu3/meson.build b/src/ipa/ipu3/meson.build
>> index b6364190..fcb27d68 100644
>> --- a/src/ipa/ipu3/meson.build
>> +++ b/src/ipa/ipu3/meson.build
>> @@ -1,5 +1,7 @@
>>  # SPDX-License-Identifier: CC0-1.0
>>  
>> +subdir('algorithms')
>> +
>>  ipa_name = 'ipa_ipu3'
>>  
>>  ipu3_ipa_sources = files([
>> @@ -8,6 +10,8 @@ ipu3_ipa_sources = files([
>>      'ipu3_awb.cpp',
>>  ])
>>  
>> +ipu3_ipa_sources += ipu3_ipa_algorithms
>> +
>>  mod = shared_module(ipa_name,
>>                      [ipu3_ipa_sources, libcamera_generated_ipa_headers],
>>                      name_prefix : '',
>> diff --git a/src/ipa/libipa/algorithm.h b/src/ipa/libipa/algorithm.h
>> deleted file mode 100644
>> index 89cee4c4..00000000
>> --- a/src/ipa/libipa/algorithm.h
>> +++ /dev/null
>> @@ -1,24 +0,0 @@
>> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
>> -/*
>> - * Copyright (C) 2021, Ideas On Board
>> - *
>> - * algorithm.h - ISP control algorithm interface
>> - */
>> -#ifndef __LIBCAMERA_IPA_LIBIPA_ALGORITHM_H__
>> -#define __LIBCAMERA_IPA_LIBIPA_ALGORITHM_H__
>> -
>> -namespace libcamera {
>> -
>> -namespace ipa {
>> -
>> -class Algorithm
>> -{
>> -public:
>> -	virtual ~Algorithm();
>> -};
>> -
>> -} /* namespace ipa */
>> -
>> -} /* namespace libcamera */
>> -
>> -#endif /* __LIBCAMERA_IPA_LIBIPA_ALGORITHM_H__ */
>> diff --git a/src/ipa/libipa/libipa.cpp b/src/ipa/libipa/libipa.cpp
>> new file mode 100644
>> index 00000000..08bc3541
>> --- /dev/null
>> +++ b/src/ipa/libipa/libipa.cpp
>> @@ -0,0 +1,22 @@
>> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
>> +/*
>> + * Copyright (C) 2021, Ideas On Board
>> + *
>> + * libipa.cpp - libipa interface
>> + */
>> +
>> +namespace libcamera {
>> +
>> +/**
>> + * \brief The IPA namespace
>> + *
>> + * The IPA namespace groups all types specific to IPA modules. It serves as the
>> + * top-level namespace for the IPA library libipa, and also contains
>> + * module-specific namespaces for IPA modules.
>> + */
>> +namespace ipa {
>> +
>> +} /* namespace ipa */
>> +
>> +} /* namespace libcamera */
>> +
>> diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build
>> index 3fda7c00..4d073a03 100644
>> --- a/src/ipa/libipa/meson.build
>> +++ b/src/ipa/libipa/meson.build
>> @@ -1,15 +1,14 @@
>>  # SPDX-License-Identifier: CC0-1.0
>>  
>>  libipa_headers = files([
>> -    'algorithm.h',
>>      'camera_sensor_helper.h',
>>      'histogram.h'
>>  ])
>>  
>>  libipa_sources = files([
>> -    'algorithm.cpp',
>>      'camera_sensor_helper.cpp',
>> -    'histogram.cpp'
>> +    'histogram.cpp',
>> +    'libipa.cpp',
>>  ])
>>  
>>  libipa_includes = include_directories('..')
>
Kieran Bingham Aug. 18, 2021, 7:34 p.m. UTC | #3
On 18/08/2021 20:09, Jean-Michel Hautbois wrote:
> 
> On 18/08/2021 20:52, Laurent Pinchart wrote:
>> On Wed, Aug 18, 2021 at 05:53:55PM +0200, Jean-Michel Hautbois wrote:
>>> The abstract Algorithm class was originally placed in libipa as an attempt to
>>> define a generic algorithm container.
>>> This was a little optimistic and pushed a bit far too early.
>>>
>>> Move the Algorithm class into the IPU3 which is the only user of the class,
>>> as we adapt it to support modular algorithm components for the IPU3.
>>>
>>> Not documenting the namespace may cause issues with Doxygen in libipa.
>>> The file libipa.cpp is thus created as an empty file for now, but we can
>>> leverage it in the future to add more global libipa documentation, and possibly
>>> code too.
>>
>> Please reflow the commit message to 72 columns. Isn't that the default
>> btw, or do I have a local configuration that I have forgotten about ?
> 
> It is the default, but I noticed that when I go inside a line to modify
> it it may not wrap properly, while typing the sentence entirely works
> fine...

Are you using vim ?

If so - when you've updated a paragraph - you can reflow with

<esc> gqip

--
Kieran

Patch
diff mbox series

diff --git a/src/ipa/libipa/algorithm.cpp b/src/ipa/ipu3/algorithms/algorithm.cpp
similarity index 55%
rename from src/ipa/libipa/algorithm.cpp
rename to src/ipa/ipu3/algorithms/algorithm.cpp
index 930f9353..325d34f0 100644
--- a/src/ipa/libipa/algorithm.cpp
+++ b/src/ipa/ipu3/algorithms/algorithm.cpp
@@ -2,7 +2,7 @@ 
 /*
  * Copyright (C) 2021, Ideas On Board
  *
- * algorithm.cpp - ISP control algorithms
+ * algorithm.h - IPU3 control algorithm interface
  */
 
 #include "algorithm.h"
@@ -14,26 +14,17 @@ 
 
 namespace libcamera {
 
-/**
- * \brief The IPA namespace
- *
- * The IPA namespace groups all types specific to IPA modules. It serves as the
- * top-level namespace for the IPA library libipa, and also contains
- * module-specific namespaces for IPA modules.
- */
-namespace ipa {
+namespace ipa::ipu3 {
 
 /**
  * \class Algorithm
- * \brief The base class for all IPA algorithms
+ * \brief The base class for all IPU3 algorithms
  *
  * The Algorithm class defines a standard interface for IPA algorithms. By
  * abstracting algorithms, it makes possible the implementation of generic code
  * to manage algorithms regardless of their specific type.
  */
 
-Algorithm::~Algorithm() = default;
-
-} /* namespace ipa */
+} /* namespace ipa::ipu3 */
 
 } /* namespace libcamera */
diff --git a/src/ipa/ipu3/algorithms/algorithm.h b/src/ipa/ipu3/algorithms/algorithm.h
new file mode 100644
index 00000000..072f01c4
--- /dev/null
+++ b/src/ipa/ipu3/algorithms/algorithm.h
@@ -0,0 +1,24 @@ 
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2021, Ideas On Board
+ *
+ * algorithm.h - IPU3 control algorithm interface
+ */
+#ifndef __LIBCAMERA_IPA_IPU3_ALGORITHM_H__
+#define __LIBCAMERA_IPA_IPU3_ALGORITHM_H__
+
+namespace libcamera {
+
+namespace ipa::ipu3 {
+
+class Algorithm
+{
+public:
+	virtual ~Algorithm() {}
+};
+
+} /* namespace ipa::ipu3 */
+
+} /* namespace libcamera */
+
+#endif /* __LIBCAMERA_IPA_IPU3_ALGORITHM_H__ */
diff --git a/src/ipa/ipu3/algorithms/meson.build b/src/ipa/ipu3/algorithms/meson.build
new file mode 100644
index 00000000..dc538b79
--- /dev/null
+++ b/src/ipa/ipu3/algorithms/meson.build
@@ -0,0 +1,5 @@ 
+# SPDX-License-Identifier: CC0-1.0
+
+ipu3_ipa_algorithms = files([
+    'algorithm.cpp',
+])
diff --git a/src/ipa/ipu3/ipu3_agc.h b/src/ipa/ipu3/ipu3_agc.h
index 9f3d4257..f00b98d6 100644
--- a/src/ipa/ipu3/ipu3_agc.h
+++ b/src/ipa/ipu3/ipu3_agc.h
@@ -13,7 +13,7 @@ 
 
 #include <libcamera/geometry.h>
 
-#include "libipa/algorithm.h"
+#include "algorithms/algorithm.h"
 
 namespace libcamera {
 
diff --git a/src/ipa/ipu3/ipu3_awb.h b/src/ipa/ipu3/ipu3_awb.h
index 122cf68c..ea2d4320 100644
--- a/src/ipa/ipu3/ipu3_awb.h
+++ b/src/ipa/ipu3/ipu3_awb.h
@@ -13,7 +13,7 @@ 
 
 #include <libcamera/geometry.h>
 
-#include "libipa/algorithm.h"
+#include "algorithms/algorithm.h"
 
 namespace libcamera {
 
diff --git a/src/ipa/ipu3/meson.build b/src/ipa/ipu3/meson.build
index b6364190..fcb27d68 100644
--- a/src/ipa/ipu3/meson.build
+++ b/src/ipa/ipu3/meson.build
@@ -1,5 +1,7 @@ 
 # SPDX-License-Identifier: CC0-1.0
 
+subdir('algorithms')
+
 ipa_name = 'ipa_ipu3'
 
 ipu3_ipa_sources = files([
@@ -8,6 +10,8 @@  ipu3_ipa_sources = files([
     'ipu3_awb.cpp',
 ])
 
+ipu3_ipa_sources += ipu3_ipa_algorithms
+
 mod = shared_module(ipa_name,
                     [ipu3_ipa_sources, libcamera_generated_ipa_headers],
                     name_prefix : '',
diff --git a/src/ipa/libipa/algorithm.h b/src/ipa/libipa/algorithm.h
deleted file mode 100644
index 89cee4c4..00000000
--- a/src/ipa/libipa/algorithm.h
+++ /dev/null
@@ -1,24 +0,0 @@ 
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2021, Ideas On Board
- *
- * algorithm.h - ISP control algorithm interface
- */
-#ifndef __LIBCAMERA_IPA_LIBIPA_ALGORITHM_H__
-#define __LIBCAMERA_IPA_LIBIPA_ALGORITHM_H__
-
-namespace libcamera {
-
-namespace ipa {
-
-class Algorithm
-{
-public:
-	virtual ~Algorithm();
-};
-
-} /* namespace ipa */
-
-} /* namespace libcamera */
-
-#endif /* __LIBCAMERA_IPA_LIBIPA_ALGORITHM_H__ */
diff --git a/src/ipa/libipa/libipa.cpp b/src/ipa/libipa/libipa.cpp
new file mode 100644
index 00000000..08bc3541
--- /dev/null
+++ b/src/ipa/libipa/libipa.cpp
@@ -0,0 +1,22 @@ 
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2021, Ideas On Board
+ *
+ * libipa.cpp - libipa interface
+ */
+
+namespace libcamera {
+
+/**
+ * \brief The IPA namespace
+ *
+ * The IPA namespace groups all types specific to IPA modules. It serves as the
+ * top-level namespace for the IPA library libipa, and also contains
+ * module-specific namespaces for IPA modules.
+ */
+namespace ipa {
+
+} /* namespace ipa */
+
+} /* namespace libcamera */
+
diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build
index 3fda7c00..4d073a03 100644
--- a/src/ipa/libipa/meson.build
+++ b/src/ipa/libipa/meson.build
@@ -1,15 +1,14 @@ 
 # SPDX-License-Identifier: CC0-1.0
 
 libipa_headers = files([
-    'algorithm.h',
     'camera_sensor_helper.h',
     'histogram.h'
 ])
 
 libipa_sources = files([
-    'algorithm.cpp',
     'camera_sensor_helper.cpp',
-    'histogram.cpp'
+    'histogram.cpp',
+    'libipa.cpp',
 ])
 
 libipa_includes = include_directories('..')