[{"id":26955,"web_url":"https://patchwork.libcamera.org/comment/26955/","msgid":"<lh26ememontf65bupv356nz6gw2ycyyuwpy2754rp7p5eprlb6@6ctzre77l3h5>","date":"2023-04-27T08:29:13","subject":"Re: [libcamera-devel] [PATCH 04/13] ipa: raspberrypi: Refactor and\n\tmove IPA code","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Naush\n\nOn Wed, Apr 26, 2023 at 02:10:48PM +0100, Naushir Patuck via libcamera-devel wrote:\n> Split the Raspberry Pi IPA code into common and VC4/BCM2835 specific\n> file structures.\n>\n> The common code files now live in src/ipa/rpi/{cam_helper,controller}/\n> and the vc4 specific files in src/ipa/rpi/vc4/.\n>\n> To build the IPA, the meson configuration option to select\n> the Raspberry Pi IPA has now changed from \"raspberrypi\" to\n> \"rpi/vc4\":\n>\n> meson setup build --Dipas=rpi/vc4\n>\n> With this change, the camera tuning files are now installed under\n> share/libcamera/ipa/rpi/vc4/\n>\n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n\nLooks good\nReviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nThanks\n  j\n\n> ---\n>  Documentation/environment_variables.rst       |  2 +-\n>  meson_options.txt                             |  2 +-\n>  src/ipa/meson.build                           | 10 +++\n>  src/ipa/raspberrypi/meson.build               | 66 -------------------\n>  src/ipa/{raspberrypi => rpi}/README.md        |  0\n>  .../cam_helper}/cam_helper.cpp                |  0\n>  .../cam_helper}/cam_helper.h                  |  2 +-\n>  .../cam_helper}/cam_helper_imx219.cpp         |  0\n>  .../cam_helper}/cam_helper_imx290.cpp         |  0\n>  .../cam_helper}/cam_helper_imx296.cpp         |  0\n>  .../cam_helper}/cam_helper_imx477.cpp         |  0\n>  .../cam_helper}/cam_helper_imx519.cpp         |  0\n>  .../cam_helper}/cam_helper_imx708.cpp         |  0\n>  .../cam_helper}/cam_helper_ov5647.cpp         |  0\n>  .../cam_helper}/cam_helper_ov9281.cpp         |  0\n>  .../cam_helper}/md_parser.h                   |  0\n>  .../cam_helper}/md_parser_smia.cpp            |  0\n>  src/ipa/rpi/cam_helper/meson.build            | 14 ++++\n>  .../controller/af_algorithm.h                 |  0\n>  .../controller/af_status.h                    |  0\n>  .../controller/agc_algorithm.h                |  0\n>  .../controller/agc_status.h                   |  0\n>  .../controller/algorithm.cpp                  |  0\n>  .../controller/algorithm.h                    |  0\n>  .../controller/alsc_status.h                  |  0\n>  .../controller/awb_algorithm.h                |  0\n>  .../controller/awb_status.h                   |  0\n>  .../controller/black_level_status.h           |  0\n>  .../controller/camera_mode.h                  |  0\n>  .../controller/ccm_algorithm.h                |  0\n>  .../controller/ccm_status.h                   |  0\n>  .../controller/contrast_algorithm.h           |  0\n>  .../controller/contrast_status.h              |  0\n>  .../controller/controller.cpp                 |  0\n>  .../controller/controller.h                   |  0\n>  .../controller/denoise_algorithm.h            |  0\n>  .../controller/denoise_status.h               |  0\n>  .../controller/device_status.cpp              |  0\n>  .../controller/device_status.h                |  0\n>  .../controller/dpc_status.h                   |  0\n>  .../controller/geq_status.h                   |  0\n>  .../controller/histogram.cpp                  |  0\n>  .../controller/histogram.h                    |  0\n>  .../controller/lux_status.h                   |  0\n>  src/ipa/rpi/controller/meson.build            | 22 +++++++\n>  .../controller/metadata.h                     |  0\n>  .../controller/noise_status.h                 |  0\n>  .../controller/pdaf_data.h                    |  0\n>  .../{raspberrypi => rpi}/controller/pwl.cpp   |  0\n>  src/ipa/{raspberrypi => rpi}/controller/pwl.h |  0\n>  .../controller/region_stats.h                 |  0\n>  .../controller/rpi/af.cpp                     |  0\n>  .../{raspberrypi => rpi}/controller/rpi/af.h  |  0\n>  .../controller/rpi/agc.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/agc.h |  0\n>  .../controller/rpi/alsc.cpp                   |  0\n>  .../controller/rpi/alsc.h                     |  0\n>  .../controller/rpi/awb.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/awb.h |  0\n>  .../controller/rpi/black_level.cpp            |  0\n>  .../controller/rpi/black_level.h              |  0\n>  .../controller/rpi/ccm.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/ccm.h |  0\n>  .../controller/rpi/contrast.cpp               |  0\n>  .../controller/rpi/contrast.h                 |  0\n>  .../controller/rpi/dpc.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/dpc.h |  0\n>  .../controller/rpi/focus.h                    |  0\n>  .../controller/rpi/geq.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/geq.h |  0\n>  .../controller/rpi/lux.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/lux.h |  0\n>  .../controller/rpi/noise.cpp                  |  0\n>  .../controller/rpi/noise.h                    |  0\n>  .../controller/rpi/sdn.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/sdn.h |  0\n>  .../controller/rpi/sharpen.cpp                |  0\n>  .../controller/rpi/sharpen.h                  |  0\n>  .../controller/sharpen_algorithm.h            |  0\n>  .../controller/sharpen_status.h               |  0\n>  .../controller}/statistics.h                  |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx219.json |  0\n>  .../vc4}/data/imx219_noir.json                |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx290.json |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx296.json |  0\n>  .../vc4}/data/imx296_mono.json                |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx378.json |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx477.json |  0\n>  .../vc4}/data/imx477_noir.json                |  0\n>  .../vc4}/data/imx477_scientific.json          |  0\n>  .../vc4}/data/imx477_v1.json                  |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx519.json |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx708.json |  0\n>  .../vc4}/data/imx708_noir.json                |  0\n>  .../vc4}/data/imx708_wide.json                |  0\n>  .../vc4}/data/imx708_wide_noir.json           |  0\n>  .../{raspberrypi => rpi/vc4}/data/meson.build |  2 +-\n>  .../{raspberrypi => rpi/vc4}/data/ov5647.json |  0\n>  .../vc4}/data/ov5647_noir.json                |  0\n>  .../vc4}/data/ov9281_mono.json                |  0\n>  .../vc4}/data/se327m12.json                   |  0\n>  .../vc4}/data/uncalibrated.json               |  0\n>  src/ipa/rpi/vc4/meson.build                   | 40 +++++++++++\n>  .../{raspberrypi => rpi/vc4}/raspberrypi.cpp  | 48 +++++++-------\n>  .../pipeline/rpi/vc4/raspberrypi.cpp          |  2 +-\n>  105 files changed, 115 insertions(+), 95 deletions(-)\n>  delete mode 100644 src/ipa/raspberrypi/meson.build\n>  rename src/ipa/{raspberrypi => rpi}/README.md (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper.h (99%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx219.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx290.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx296.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx477.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx519.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx708.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_ov5647.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_ov9281.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/md_parser.h (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/md_parser_smia.cpp (100%)\n>  create mode 100644 src/ipa/rpi/cam_helper/meson.build\n>  rename src/ipa/{raspberrypi => rpi}/controller/af_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/af_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/agc_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/agc_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/algorithm.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/alsc_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/awb_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/awb_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/black_level_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/camera_mode.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/ccm_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/ccm_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/contrast_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/contrast_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/controller.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/controller.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/denoise_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/denoise_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/device_status.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/device_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/dpc_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/geq_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/histogram.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/histogram.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/lux_status.h (100%)\n>  create mode 100644 src/ipa/rpi/controller/meson.build\n>  rename src/ipa/{raspberrypi => rpi}/controller/metadata.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/noise_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/pdaf_data.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/pwl.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/pwl.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/region_stats.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/af.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/af.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/agc.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/agc.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/alsc.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/alsc.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/awb.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/awb.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/black_level.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/black_level.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/ccm.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/ccm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/contrast.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/contrast.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/dpc.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/dpc.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/focus.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/geq.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/geq.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/lux.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/lux.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/noise.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/noise.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sdn.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sdn.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sharpen.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sharpen.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/sharpen_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/sharpen_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi/controller}/statistics.h (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx219.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx219_noir.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx290.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx296.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx296_mono.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx378.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_noir.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_scientific.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_v1.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx519.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_noir.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_wide.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_wide_noir.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/meson.build (89%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/ov5647.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/ov5647_noir.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/ov9281_mono.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/se327m12.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/uncalibrated.json (100%)\n>  create mode 100644 src/ipa/rpi/vc4/meson.build\n>  rename src/ipa/{raspberrypi => rpi/vc4}/raspberrypi.cpp (98%)\n>\n> diff --git a/Documentation/environment_variables.rst b/Documentation/environment_variables.rst\n> index 4bf38b877897..888707785ee1 100644\n> --- a/Documentation/environment_variables.rst\n> +++ b/Documentation/environment_variables.rst\n> @@ -143,7 +143,7 @@ contain tuning parameters for the algorithms, in JSON format.\n>  The ``LIBCAMERA_IPA_CONFIG_PATH`` variable can be used to specify custom\n>  storage locations to search for those configuration files.\n>\n> -`Examples <https://git.libcamera.org/libcamera/libcamera.git/tree/src/ipa/raspberrypi/data>`__\n> +`Examples <https://git.libcamera.org/libcamera/libcamera.git/tree/src/ipa/rpi/data>`__\n>\n>  IPA module\n>  ~~~~~~~~~~\n> diff --git a/meson_options.txt b/meson_options.txt\n> index e1f4c205aa94..596f813ea5e5 100644\n> --- a/meson_options.txt\n> +++ b/meson_options.txt\n> @@ -27,7 +27,7 @@ option('gstreamer',\n>\n>  option('ipas',\n>          type : 'array',\n> -        choices : ['ipu3', 'raspberrypi', 'rkisp1', 'vimc'],\n> +        choices : ['ipu3', 'rpi/vc4', 'rkisp1', 'vimc'],\n>          description : 'Select which IPA modules to build')\n>\n>  option('lc-compliance',\n> diff --git a/src/ipa/meson.build b/src/ipa/meson.build\n> index 76ad5b445601..10d3b44ca7b6 100644\n> --- a/src/ipa/meson.build\n> +++ b/src/ipa/meson.build\n> @@ -37,6 +37,16 @@ endif\n>\n>  enabled_ipa_modules = []\n>\n> +# If the Raspberry Pi VC4 IPA is enabled, ensure we include the  rpi/cam_helper\n> +# and rpi/controller subdirectories in the build.\n> +#\n> +# This is done here and not within rpi/vc4/meson.build as meson does not\n> +# allow the subdir command to traverse up the directory tree.\n> +if pipelines.contains('rpi/vc4')\n> +    subdir('rpi/cam_helper')\n> +    subdir('rpi/controller')\n> +endif\n> +\n>  # The ipa-sign-install.sh script which uses the ipa_names variable will itself\n>  # prepend MESON_INSTALL_DESTDIR_PREFIX to each ipa module name, therefore we\n>  # must not include the prefix string here.\n> diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build\n> deleted file mode 100644\n> index de78cbd80f9c..000000000000\n> --- a/src/ipa/raspberrypi/meson.build\n> +++ /dev/null\n> @@ -1,66 +0,0 @@\n> -# SPDX-License-Identifier: CC0-1.0\n> -\n> -ipa_name = 'ipa_rpi'\n> -\n> -rpi_ipa_deps = [\n> -    libcamera_private,\n> -    libatomic,\n> -]\n> -\n> -rpi_ipa_includes = [\n> -    ipa_includes,\n> -    libipa_includes,\n> -    include_directories('controller')\n> -]\n> -\n> -rpi_ipa_sources = files([\n> -    'raspberrypi.cpp',\n> -    'md_parser_smia.cpp',\n> -    'cam_helper.cpp',\n> -    'cam_helper_ov5647.cpp',\n> -    'cam_helper_imx219.cpp',\n> -    'cam_helper_imx290.cpp',\n> -    'cam_helper_imx296.cpp',\n> -    'cam_helper_imx477.cpp',\n> -    'cam_helper_imx519.cpp',\n> -    'cam_helper_imx708.cpp',\n> -    'cam_helper_ov9281.cpp',\n> -    'controller/controller.cpp',\n> -    'controller/histogram.cpp',\n> -    'controller/algorithm.cpp',\n> -    'controller/rpi/af.cpp',\n> -    'controller/rpi/alsc.cpp',\n> -    'controller/rpi/awb.cpp',\n> -    'controller/rpi/sharpen.cpp',\n> -    'controller/rpi/black_level.cpp',\n> -    'controller/rpi/geq.cpp',\n> -    'controller/rpi/noise.cpp',\n> -    'controller/rpi/lux.cpp',\n> -    'controller/rpi/agc.cpp',\n> -    'controller/rpi/dpc.cpp',\n> -    'controller/rpi/ccm.cpp',\n> -    'controller/rpi/contrast.cpp',\n> -    'controller/rpi/sdn.cpp',\n> -    'controller/pwl.cpp',\n> -    'controller/device_status.cpp',\n> -])\n> -\n> -mod = shared_module(ipa_name,\n> -                    [rpi_ipa_sources, libcamera_generated_ipa_headers],\n> -                    name_prefix : '',\n> -                    include_directories : rpi_ipa_includes,\n> -                    dependencies : rpi_ipa_deps,\n> -                    link_with : libipa,\n> -                    install : true,\n> -                    install_dir : ipa_install_dir)\n> -\n> -if ipa_sign_module\n> -    custom_target(ipa_name + '.so.sign',\n> -                  input : mod,\n> -                  output : ipa_name + '.so.sign',\n> -                  command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],\n> -                  install : false,\n> -                  build_by_default : true)\n> -endif\n> -\n> -subdir('data')\n> diff --git a/src/ipa/raspberrypi/README.md b/src/ipa/rpi/README.md\n> similarity index 100%\n> rename from src/ipa/raspberrypi/README.md\n> rename to src/ipa/rpi/README.md\n> diff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/rpi/cam_helper/cam_helper.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper.h b/src/ipa/rpi/cam_helper/cam_helper.h\n> similarity index 99%\n> rename from src/ipa/raspberrypi/cam_helper.h\n> rename to src/ipa/rpi/cam_helper/cam_helper.h\n> index b3f8c9803094..58a4b202d5a8 100644\n> --- a/src/ipa/raspberrypi/cam_helper.h\n> +++ b/src/ipa/rpi/cam_helper/cam_helper.h\n> @@ -13,7 +13,7 @@\n>  #include <libcamera/base/span.h>\n>  #include <libcamera/base/utils.h>\n>\n> -#include \"camera_mode.h\"\n> +#include \"controller/camera_mode.h\"\n>  #include \"controller/controller.h\"\n>  #include \"controller/metadata.h\"\n>  #include \"md_parser.h\"\n> diff --git a/src/ipa/raspberrypi/cam_helper_imx219.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx219.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_imx219.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_imx219.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_imx290.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx290.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_imx290.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_imx290.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_imx296.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_imx296.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_imx296.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_imx477.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_imx477.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_imx477.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_imx519.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_imx519.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_imx519.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_imx708.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_imx708.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_imx708.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_ov5647.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_ov5647.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_ov9281.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_ov9281.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp\n> diff --git a/src/ipa/raspberrypi/md_parser.h b/src/ipa/rpi/cam_helper/md_parser.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/md_parser.h\n> rename to src/ipa/rpi/cam_helper/md_parser.h\n> diff --git a/src/ipa/raspberrypi/md_parser_smia.cpp b/src/ipa/rpi/cam_helper/md_parser_smia.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/md_parser_smia.cpp\n> rename to src/ipa/rpi/cam_helper/md_parser_smia.cpp\n> diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build\n> new file mode 100644\n> index 000000000000..aa42ae91f69d\n> --- /dev/null\n> +++ b/src/ipa/rpi/cam_helper/meson.build\n> @@ -0,0 +1,14 @@\n> +# SPDX-License-Identifier: CC0-1.0\n> +\n> +rpi_ipa_cam_helper_sources = files([\n> +    'cam_helper.cpp',\n> +    'cam_helper_ov5647.cpp',\n> +    'cam_helper_imx219.cpp',\n> +    'cam_helper_imx290.cpp',\n> +    'cam_helper_imx296.cpp',\n> +    'cam_helper_imx477.cpp',\n> +    'cam_helper_imx519.cpp',\n> +    'cam_helper_imx708.cpp',\n> +    'cam_helper_ov9281.cpp',\n> +    'md_parser_smia.cpp',\n> +])\n> diff --git a/src/ipa/raspberrypi/controller/af_algorithm.h b/src/ipa/rpi/controller/af_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/af_algorithm.h\n> rename to src/ipa/rpi/controller/af_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/af_status.h b/src/ipa/rpi/controller/af_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/af_status.h\n> rename to src/ipa/rpi/controller/af_status.h\n> diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.h b/src/ipa/rpi/controller/agc_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/agc_algorithm.h\n> rename to src/ipa/rpi/controller/agc_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/agc_status.h b/src/ipa/rpi/controller/agc_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/agc_status.h\n> rename to src/ipa/rpi/controller/agc_status.h\n> diff --git a/src/ipa/raspberrypi/controller/algorithm.cpp b/src/ipa/rpi/controller/algorithm.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/algorithm.cpp\n> rename to src/ipa/rpi/controller/algorithm.cpp\n> diff --git a/src/ipa/raspberrypi/controller/algorithm.h b/src/ipa/rpi/controller/algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/algorithm.h\n> rename to src/ipa/rpi/controller/algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/alsc_status.h b/src/ipa/rpi/controller/alsc_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/alsc_status.h\n> rename to src/ipa/rpi/controller/alsc_status.h\n> diff --git a/src/ipa/raspberrypi/controller/awb_algorithm.h b/src/ipa/rpi/controller/awb_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/awb_algorithm.h\n> rename to src/ipa/rpi/controller/awb_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/awb_status.h b/src/ipa/rpi/controller/awb_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/awb_status.h\n> rename to src/ipa/rpi/controller/awb_status.h\n> diff --git a/src/ipa/raspberrypi/controller/black_level_status.h b/src/ipa/rpi/controller/black_level_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/black_level_status.h\n> rename to src/ipa/rpi/controller/black_level_status.h\n> diff --git a/src/ipa/raspberrypi/controller/camera_mode.h b/src/ipa/rpi/controller/camera_mode.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/camera_mode.h\n> rename to src/ipa/rpi/controller/camera_mode.h\n> diff --git a/src/ipa/raspberrypi/controller/ccm_algorithm.h b/src/ipa/rpi/controller/ccm_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/ccm_algorithm.h\n> rename to src/ipa/rpi/controller/ccm_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/ccm_status.h b/src/ipa/rpi/controller/ccm_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/ccm_status.h\n> rename to src/ipa/rpi/controller/ccm_status.h\n> diff --git a/src/ipa/raspberrypi/controller/contrast_algorithm.h b/src/ipa/rpi/controller/contrast_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/contrast_algorithm.h\n> rename to src/ipa/rpi/controller/contrast_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/contrast_status.h b/src/ipa/rpi/controller/contrast_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/contrast_status.h\n> rename to src/ipa/rpi/controller/contrast_status.h\n> diff --git a/src/ipa/raspberrypi/controller/controller.cpp b/src/ipa/rpi/controller/controller.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/controller.cpp\n> rename to src/ipa/rpi/controller/controller.cpp\n> diff --git a/src/ipa/raspberrypi/controller/controller.h b/src/ipa/rpi/controller/controller.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/controller.h\n> rename to src/ipa/rpi/controller/controller.h\n> diff --git a/src/ipa/raspberrypi/controller/denoise_algorithm.h b/src/ipa/rpi/controller/denoise_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/denoise_algorithm.h\n> rename to src/ipa/rpi/controller/denoise_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/denoise_status.h b/src/ipa/rpi/controller/denoise_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/denoise_status.h\n> rename to src/ipa/rpi/controller/denoise_status.h\n> diff --git a/src/ipa/raspberrypi/controller/device_status.cpp b/src/ipa/rpi/controller/device_status.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/device_status.cpp\n> rename to src/ipa/rpi/controller/device_status.cpp\n> diff --git a/src/ipa/raspberrypi/controller/device_status.h b/src/ipa/rpi/controller/device_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/device_status.h\n> rename to src/ipa/rpi/controller/device_status.h\n> diff --git a/src/ipa/raspberrypi/controller/dpc_status.h b/src/ipa/rpi/controller/dpc_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/dpc_status.h\n> rename to src/ipa/rpi/controller/dpc_status.h\n> diff --git a/src/ipa/raspberrypi/controller/geq_status.h b/src/ipa/rpi/controller/geq_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/geq_status.h\n> rename to src/ipa/rpi/controller/geq_status.h\n> diff --git a/src/ipa/raspberrypi/controller/histogram.cpp b/src/ipa/rpi/controller/histogram.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/histogram.cpp\n> rename to src/ipa/rpi/controller/histogram.cpp\n> diff --git a/src/ipa/raspberrypi/controller/histogram.h b/src/ipa/rpi/controller/histogram.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/histogram.h\n> rename to src/ipa/rpi/controller/histogram.h\n> diff --git a/src/ipa/raspberrypi/controller/lux_status.h b/src/ipa/rpi/controller/lux_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/lux_status.h\n> rename to src/ipa/rpi/controller/lux_status.h\n> diff --git a/src/ipa/rpi/controller/meson.build b/src/ipa/rpi/controller/meson.build\n> new file mode 100644\n> index 000000000000..90a67412444e\n> --- /dev/null\n> +++ b/src/ipa/rpi/controller/meson.build\n> @@ -0,0 +1,22 @@\n> +# SPDX-License-Identifier: CC0-1.0\n> +\n> +rpi_ipa_controller_sources = files([\n> +    'algorithm.cpp',\n> +    'controller.cpp',\n> +    'device_status.cpp',\n> +    'histogram.cpp',\n> +    'pwl.cpp',\n> +    'rpi/af.cpp',\n> +    'rpi/agc.cpp',\n> +    'rpi/alsc.cpp',\n> +    'rpi/awb.cpp',\n> +    'rpi/black_level.cpp',\n> +    'rpi/ccm.cpp',\n> +    'rpi/contrast.cpp',\n> +    'rpi/dpc.cpp',\n> +    'rpi/geq.cpp',\n> +    'rpi/lux.cpp',\n> +    'rpi/noise.cpp',\n> +    'rpi/sdn.cpp',\n> +    'rpi/sharpen.cpp',\n> +])\n> diff --git a/src/ipa/raspberrypi/controller/metadata.h b/src/ipa/rpi/controller/metadata.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/metadata.h\n> rename to src/ipa/rpi/controller/metadata.h\n> diff --git a/src/ipa/raspberrypi/controller/noise_status.h b/src/ipa/rpi/controller/noise_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/noise_status.h\n> rename to src/ipa/rpi/controller/noise_status.h\n> diff --git a/src/ipa/raspberrypi/controller/pdaf_data.h b/src/ipa/rpi/controller/pdaf_data.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/pdaf_data.h\n> rename to src/ipa/rpi/controller/pdaf_data.h\n> diff --git a/src/ipa/raspberrypi/controller/pwl.cpp b/src/ipa/rpi/controller/pwl.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/pwl.cpp\n> rename to src/ipa/rpi/controller/pwl.cpp\n> diff --git a/src/ipa/raspberrypi/controller/pwl.h b/src/ipa/rpi/controller/pwl.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/pwl.h\n> rename to src/ipa/rpi/controller/pwl.h\n> diff --git a/src/ipa/raspberrypi/controller/region_stats.h b/src/ipa/rpi/controller/region_stats.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/region_stats.h\n> rename to src/ipa/rpi/controller/region_stats.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/af.cpp b/src/ipa/rpi/controller/rpi/af.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/af.cpp\n> rename to src/ipa/rpi/controller/rpi/af.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/af.h b/src/ipa/rpi/controller/rpi/af.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/af.h\n> rename to src/ipa/rpi/controller/rpi/af.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp b/src/ipa/rpi/controller/rpi/agc.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/agc.cpp\n> rename to src/ipa/rpi/controller/rpi/agc.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.h b/src/ipa/rpi/controller/rpi/agc.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/agc.h\n> rename to src/ipa/rpi/controller/rpi/agc.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/alsc.cpp b/src/ipa/rpi/controller/rpi/alsc.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/alsc.cpp\n> rename to src/ipa/rpi/controller/rpi/alsc.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/alsc.h b/src/ipa/rpi/controller/rpi/alsc.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/alsc.h\n> rename to src/ipa/rpi/controller/rpi/alsc.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp b/src/ipa/rpi/controller/rpi/awb.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/awb.cpp\n> rename to src/ipa/rpi/controller/rpi/awb.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.h b/src/ipa/rpi/controller/rpi/awb.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/awb.h\n> rename to src/ipa/rpi/controller/rpi/awb.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/black_level.cpp b/src/ipa/rpi/controller/rpi/black_level.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/black_level.cpp\n> rename to src/ipa/rpi/controller/rpi/black_level.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/black_level.h b/src/ipa/rpi/controller/rpi/black_level.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/black_level.h\n> rename to src/ipa/rpi/controller/rpi/black_level.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/ccm.cpp b/src/ipa/rpi/controller/rpi/ccm.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/ccm.cpp\n> rename to src/ipa/rpi/controller/rpi/ccm.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/ccm.h b/src/ipa/rpi/controller/rpi/ccm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/ccm.h\n> rename to src/ipa/rpi/controller/rpi/ccm.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/contrast.cpp b/src/ipa/rpi/controller/rpi/contrast.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/contrast.cpp\n> rename to src/ipa/rpi/controller/rpi/contrast.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/contrast.h b/src/ipa/rpi/controller/rpi/contrast.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/contrast.h\n> rename to src/ipa/rpi/controller/rpi/contrast.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/dpc.cpp b/src/ipa/rpi/controller/rpi/dpc.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/dpc.cpp\n> rename to src/ipa/rpi/controller/rpi/dpc.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/dpc.h b/src/ipa/rpi/controller/rpi/dpc.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/dpc.h\n> rename to src/ipa/rpi/controller/rpi/dpc.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/focus.h b/src/ipa/rpi/controller/rpi/focus.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/focus.h\n> rename to src/ipa/rpi/controller/rpi/focus.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/geq.cpp b/src/ipa/rpi/controller/rpi/geq.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/geq.cpp\n> rename to src/ipa/rpi/controller/rpi/geq.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/geq.h b/src/ipa/rpi/controller/rpi/geq.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/geq.h\n> rename to src/ipa/rpi/controller/rpi/geq.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/lux.cpp b/src/ipa/rpi/controller/rpi/lux.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/lux.cpp\n> rename to src/ipa/rpi/controller/rpi/lux.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/lux.h b/src/ipa/rpi/controller/rpi/lux.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/lux.h\n> rename to src/ipa/rpi/controller/rpi/lux.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/noise.cpp b/src/ipa/rpi/controller/rpi/noise.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/noise.cpp\n> rename to src/ipa/rpi/controller/rpi/noise.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/noise.h b/src/ipa/rpi/controller/rpi/noise.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/noise.h\n> rename to src/ipa/rpi/controller/rpi/noise.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/sdn.cpp b/src/ipa/rpi/controller/rpi/sdn.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/sdn.cpp\n> rename to src/ipa/rpi/controller/rpi/sdn.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/sdn.h b/src/ipa/rpi/controller/rpi/sdn.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/sdn.h\n> rename to src/ipa/rpi/controller/rpi/sdn.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/sharpen.cpp b/src/ipa/rpi/controller/rpi/sharpen.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/sharpen.cpp\n> rename to src/ipa/rpi/controller/rpi/sharpen.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/sharpen.h b/src/ipa/rpi/controller/rpi/sharpen.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/sharpen.h\n> rename to src/ipa/rpi/controller/rpi/sharpen.h\n> diff --git a/src/ipa/raspberrypi/controller/sharpen_algorithm.h b/src/ipa/rpi/controller/sharpen_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/sharpen_algorithm.h\n> rename to src/ipa/rpi/controller/sharpen_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/sharpen_status.h b/src/ipa/rpi/controller/sharpen_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/sharpen_status.h\n> rename to src/ipa/rpi/controller/sharpen_status.h\n> diff --git a/src/ipa/raspberrypi/statistics.h b/src/ipa/rpi/controller/statistics.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/statistics.h\n> rename to src/ipa/rpi/controller/statistics.h\n> diff --git a/src/ipa/raspberrypi/data/imx219.json b/src/ipa/rpi/vc4/data/imx219.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx219.json\n> rename to src/ipa/rpi/vc4/data/imx219.json\n> diff --git a/src/ipa/raspberrypi/data/imx219_noir.json b/src/ipa/rpi/vc4/data/imx219_noir.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx219_noir.json\n> rename to src/ipa/rpi/vc4/data/imx219_noir.json\n> diff --git a/src/ipa/raspberrypi/data/imx290.json b/src/ipa/rpi/vc4/data/imx290.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx290.json\n> rename to src/ipa/rpi/vc4/data/imx290.json\n> diff --git a/src/ipa/raspberrypi/data/imx296.json b/src/ipa/rpi/vc4/data/imx296.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx296.json\n> rename to src/ipa/rpi/vc4/data/imx296.json\n> diff --git a/src/ipa/raspberrypi/data/imx296_mono.json b/src/ipa/rpi/vc4/data/imx296_mono.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx296_mono.json\n> rename to src/ipa/rpi/vc4/data/imx296_mono.json\n> diff --git a/src/ipa/raspberrypi/data/imx378.json b/src/ipa/rpi/vc4/data/imx378.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx378.json\n> rename to src/ipa/rpi/vc4/data/imx378.json\n> diff --git a/src/ipa/raspberrypi/data/imx477.json b/src/ipa/rpi/vc4/data/imx477.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx477.json\n> rename to src/ipa/rpi/vc4/data/imx477.json\n> diff --git a/src/ipa/raspberrypi/data/imx477_noir.json b/src/ipa/rpi/vc4/data/imx477_noir.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx477_noir.json\n> rename to src/ipa/rpi/vc4/data/imx477_noir.json\n> diff --git a/src/ipa/raspberrypi/data/imx477_scientific.json b/src/ipa/rpi/vc4/data/imx477_scientific.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx477_scientific.json\n> rename to src/ipa/rpi/vc4/data/imx477_scientific.json\n> diff --git a/src/ipa/raspberrypi/data/imx477_v1.json b/src/ipa/rpi/vc4/data/imx477_v1.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx477_v1.json\n> rename to src/ipa/rpi/vc4/data/imx477_v1.json\n> diff --git a/src/ipa/raspberrypi/data/imx519.json b/src/ipa/rpi/vc4/data/imx519.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx519.json\n> rename to src/ipa/rpi/vc4/data/imx519.json\n> diff --git a/src/ipa/raspberrypi/data/imx708.json b/src/ipa/rpi/vc4/data/imx708.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx708.json\n> rename to src/ipa/rpi/vc4/data/imx708.json\n> diff --git a/src/ipa/raspberrypi/data/imx708_noir.json b/src/ipa/rpi/vc4/data/imx708_noir.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx708_noir.json\n> rename to src/ipa/rpi/vc4/data/imx708_noir.json\n> diff --git a/src/ipa/raspberrypi/data/imx708_wide.json b/src/ipa/rpi/vc4/data/imx708_wide.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx708_wide.json\n> rename to src/ipa/rpi/vc4/data/imx708_wide.json\n> diff --git a/src/ipa/raspberrypi/data/imx708_wide_noir.json b/src/ipa/rpi/vc4/data/imx708_wide_noir.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx708_wide_noir.json\n> rename to src/ipa/rpi/vc4/data/imx708_wide_noir.json\n> diff --git a/src/ipa/raspberrypi/data/meson.build b/src/ipa/rpi/vc4/data/meson.build\n> similarity index 89%\n> rename from src/ipa/raspberrypi/data/meson.build\n> rename to src/ipa/rpi/vc4/data/meson.build\n> index b163a052f57c..327462fa2420 100644\n> --- a/src/ipa/raspberrypi/data/meson.build\n> +++ b/src/ipa/rpi/vc4/data/meson.build\n> @@ -23,4 +23,4 @@ conf_files = files([\n>  ])\n>\n>  install_data(conf_files,\n> -             install_dir : ipa_data_dir / 'raspberrypi')\n> +             install_dir : ipa_data_dir / 'rpi/vc4')\n> diff --git a/src/ipa/raspberrypi/data/ov5647.json b/src/ipa/rpi/vc4/data/ov5647.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/ov5647.json\n> rename to src/ipa/rpi/vc4/data/ov5647.json\n> diff --git a/src/ipa/raspberrypi/data/ov5647_noir.json b/src/ipa/rpi/vc4/data/ov5647_noir.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/ov5647_noir.json\n> rename to src/ipa/rpi/vc4/data/ov5647_noir.json\n> diff --git a/src/ipa/raspberrypi/data/ov9281_mono.json b/src/ipa/rpi/vc4/data/ov9281_mono.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/ov9281_mono.json\n> rename to src/ipa/rpi/vc4/data/ov9281_mono.json\n> diff --git a/src/ipa/raspberrypi/data/se327m12.json b/src/ipa/rpi/vc4/data/se327m12.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/se327m12.json\n> rename to src/ipa/rpi/vc4/data/se327m12.json\n> diff --git a/src/ipa/raspberrypi/data/uncalibrated.json b/src/ipa/rpi/vc4/data/uncalibrated.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/uncalibrated.json\n> rename to src/ipa/rpi/vc4/data/uncalibrated.json\n> diff --git a/src/ipa/rpi/vc4/meson.build b/src/ipa/rpi/vc4/meson.build\n> new file mode 100644\n> index 000000000000..992d0f1ab5a7\n> --- /dev/null\n> +++ b/src/ipa/rpi/vc4/meson.build\n> @@ -0,0 +1,40 @@\n> +# SPDX-License-Identifier: CC0-1.0\n> +\n> +ipa_name = 'ipa_vc4'\n> +\n> +vc4_ipa_deps = [\n> +    libcamera_private,\n> +    libatomic,\n> +]\n> +\n> +vc4_ipa_includes = [\n> +    ipa_includes,\n> +    libipa_includes,\n> +]\n> +\n> +vc4_ipa_sources = files([\n> +    'raspberrypi.cpp',\n> +])\n> +\n> +vc4_ipa_includes += include_directories('..')\n> +vc4_ipa_sources += [rpi_ipa_cam_helper_sources, rpi_ipa_controller_sources]\n> +\n> +mod = shared_module(ipa_name,\n> +                    [vc4_ipa_sources, libcamera_generated_ipa_headers],\n> +                    name_prefix : '',\n> +                    include_directories : vc4_ipa_includes,\n> +                    dependencies : vc4_ipa_deps,\n> +                    link_with : libipa,\n> +                    install : true,\n> +                    install_dir : ipa_install_dir)\n> +\n> +if ipa_sign_module\n> +    custom_target(ipa_name + '.so.sign',\n> +                  input : mod,\n> +                  output : ipa_name + '.so.sign',\n> +                  command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],\n> +                  install : false,\n> +                  build_by_default : true)\n> +endif\n> +\n> +subdir('data')\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/rpi/vc4/raspberrypi.cpp\n> similarity index 98%\n> rename from src/ipa/raspberrypi/raspberrypi.cpp\n> rename to src/ipa/rpi/vc4/raspberrypi.cpp\n> index 9c29fa9a5e5c..841635ccde2b 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/rpi/vc4/raspberrypi.cpp\n> @@ -33,29 +33,29 @@\n>\n>  #include \"libcamera/internal/mapped_framebuffer.h\"\n>\n> -#include \"af_algorithm.h\"\n> -#include \"af_status.h\"\n> -#include \"agc_algorithm.h\"\n> -#include \"agc_status.h\"\n> -#include \"alsc_status.h\"\n> -#include \"awb_algorithm.h\"\n> -#include \"awb_status.h\"\n> -#include \"black_level_status.h\"\n> -#include \"cam_helper.h\"\n> -#include \"ccm_algorithm.h\"\n> -#include \"ccm_status.h\"\n> -#include \"contrast_algorithm.h\"\n> -#include \"contrast_status.h\"\n> -#include \"controller.h\"\n> -#include \"denoise_algorithm.h\"\n> -#include \"denoise_status.h\"\n> -#include \"dpc_status.h\"\n> -#include \"geq_status.h\"\n> -#include \"lux_status.h\"\n> -#include \"metadata.h\"\n> -#include \"sharpen_algorithm.h\"\n> -#include \"sharpen_status.h\"\n> -#include \"statistics.h\"\n> +#include \"cam_helper/cam_helper.h\"\n> +#include \"controller/af_algorithm.h\"\n> +#include \"controller/af_status.h\"\n> +#include \"controller/agc_algorithm.h\"\n> +#include \"controller/agc_status.h\"\n> +#include \"controller/alsc_status.h\"\n> +#include \"controller/awb_algorithm.h\"\n> +#include \"controller/awb_status.h\"\n> +#include \"controller/black_level_status.h\"\n> +#include \"controller/ccm_algorithm.h\"\n> +#include \"controller/ccm_status.h\"\n> +#include \"controller/contrast_algorithm.h\"\n> +#include \"controller/contrast_status.h\"\n> +#include \"controller/controller.h\"\n> +#include \"controller/denoise_algorithm.h\"\n> +#include \"controller/denoise_status.h\"\n> +#include \"controller/dpc_status.h\"\n> +#include \"controller/geq_status.h\"\n> +#include \"controller/lux_status.h\"\n> +#include \"controller/metadata.h\"\n> +#include \"controller/sharpen_algorithm.h\"\n> +#include \"controller/sharpen_status.h\"\n> +#include \"controller/statistics.h\"\n>\n>  namespace libcamera {\n>\n> @@ -1840,7 +1840,7 @@ const struct IPAModuleInfo ipaModuleInfo = {\n>  \tIPA_MODULE_API_VERSION,\n>  \t1,\n>  \t\"PipelineHandlerRPi\",\n> -\t\"raspberrypi\",\n> +\t\"vc4\",\n>  };\n>\n>  IPAInterface *ipaCreate()\n> diff --git a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp\n> index 4595773d2517..cfde7f2e2229 100644\n> --- a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp\n> @@ -1668,7 +1668,7 @@ int RPiCameraData::loadIPA(ipa::RPi::IPAInitResult *result)\n>  \t\tstd::string model = sensor_->model();\n>  \t\tif (isMonoSensor(sensor_))\n>  \t\t\tmodel += \"_mono\";\n> -\t\tconfigurationFile = ipa_->configurationFile(model + \".json\", \"\");\n> +\t\tconfigurationFile = ipa_->configurationFile(model + \".json\", \"rpi\");\n>  \t} else {\n>  \t\tconfigurationFile = std::string(configFromEnv);\n>  \t}\n> --\n> 2.34.1\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 6701ABDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 27 Apr 2023 08:29:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1BCCC627E0;\n\tThu, 27 Apr 2023 10:29:17 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id F3595627D6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 27 Apr 2023 10:29:15 +0200 (CEST)","from ideasonboard.com (unknown\n\t[IPv6:2001:b07:5d2e:52c9:1cf0:b3bc:c785:4625])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id EF838C7E;\n\tThu, 27 Apr 2023 10:29:03 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1682584157;\n\tbh=uF/qZZT4/qNzXKQ3DB1nk1Ea/FouT0OpZLmpLMJq6IU=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=C8CFMC9ODouVMuxFHiBXg7drW6qir84GmrifW0nu6WZvtJKUqui/j+2HLcoMObt6A\n\tWmLc1Dm3pLapkqC4rmhBa/PN7ce3x6BX+yHhB5DyiLAEZeGpgonrhTJ55JgtFzfnFW\n\tF0zR4Fil1ai4LFy/3RkOvsXPCAlZ4zkJRg9DHPO+HDrkYxys2wm9Vo7ZH2OHZc5Jz8\n\tSK5Mg9/tvaC6IrPeGzZs1UmB8Q4qXQmuEe9aVRUJuaj6A++9UyrHifhQRLHNG7G6j9\n\taomVay41nDwhR/XfeB7FAf+bzVPGDu5sxNrsVVs6460oEdP5QNALNKVODrYL99WXjv\n\tZS6DCHe+3Yn5Q==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1682584144;\n\tbh=uF/qZZT4/qNzXKQ3DB1nk1Ea/FouT0OpZLmpLMJq6IU=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=KIxWqVEKSTLL2MvuXZvqoVZrYKKyICUBsQoTvxgKgCePk0CGVGyuL9IiMs8HxGCHl\n\tFudun4ROQgmAl7C15hna0n5xtL9vECg5jCn56lZPgnSWy7BMoqcbERCVbk5n+cxVEp\n\tsgXvJ6l6UooBSbc1VS+GucxCL0v/qAml9cCpyUtA="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"KIxWqVEK\"; dkim-atps=neutral","Date":"Thu, 27 Apr 2023 10:29:13 +0200","To":"Naushir Patuck <naush@raspberrypi.com>","Message-ID":"<lh26ememontf65bupv356nz6gw2ycyyuwpy2754rp7p5eprlb6@6ctzre77l3h5>","References":"<20230426131057.21550-1-naush@raspberrypi.com>\n\t<20230426131057.21550-5-naush@raspberrypi.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20230426131057.21550-5-naush@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH 04/13] ipa: raspberrypi: Refactor and\n\tmove IPA code","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":26980,"web_url":"https://patchwork.libcamera.org/comment/26980/","msgid":"<20230427170209.GA27087@pendragon.ideasonboard.com>","date":"2023-04-27T17:02:09","subject":"Re: [libcamera-devel] [PATCH 04/13] ipa: raspberrypi: Refactor and\n\tmove IPA code","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Naush,\n\nThank you for the patch.\n\nOn Wed, Apr 26, 2023 at 02:10:48PM +0100, Naushir Patuck via libcamera-devel wrote:\n> Split the Raspberry Pi IPA code into common and VC4/BCM2835 specific\n> file structures.\n> \n> The common code files now live in src/ipa/rpi/{cam_helper,controller}/\n> and the vc4 specific files in src/ipa/rpi/vc4/.\n> \n> To build the IPA, the meson configuration option to select\n> the Raspberry Pi IPA has now changed from \"raspberrypi\" to\n> \"rpi/vc4\":\n> \n> meson setup build --Dipas=rpi/vc4\n> \n> With this change, the camera tuning files are now installed under\n> share/libcamera/ipa/rpi/vc4/\n> \n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n> ---\n>  Documentation/environment_variables.rst       |  2 +-\n>  meson_options.txt                             |  2 +-\n>  src/ipa/meson.build                           | 10 +++\n>  src/ipa/raspberrypi/meson.build               | 66 -------------------\n>  src/ipa/{raspberrypi => rpi}/README.md        |  0\n>  .../cam_helper}/cam_helper.cpp                |  0\n>  .../cam_helper}/cam_helper.h                  |  2 +-\n>  .../cam_helper}/cam_helper_imx219.cpp         |  0\n>  .../cam_helper}/cam_helper_imx290.cpp         |  0\n>  .../cam_helper}/cam_helper_imx296.cpp         |  0\n>  .../cam_helper}/cam_helper_imx477.cpp         |  0\n>  .../cam_helper}/cam_helper_imx519.cpp         |  0\n>  .../cam_helper}/cam_helper_imx708.cpp         |  0\n>  .../cam_helper}/cam_helper_ov5647.cpp         |  0\n>  .../cam_helper}/cam_helper_ov9281.cpp         |  0\n>  .../cam_helper}/md_parser.h                   |  0\n>  .../cam_helper}/md_parser_smia.cpp            |  0\n>  src/ipa/rpi/cam_helper/meson.build            | 14 ++++\n>  .../controller/af_algorithm.h                 |  0\n>  .../controller/af_status.h                    |  0\n>  .../controller/agc_algorithm.h                |  0\n>  .../controller/agc_status.h                   |  0\n>  .../controller/algorithm.cpp                  |  0\n>  .../controller/algorithm.h                    |  0\n>  .../controller/alsc_status.h                  |  0\n>  .../controller/awb_algorithm.h                |  0\n>  .../controller/awb_status.h                   |  0\n>  .../controller/black_level_status.h           |  0\n>  .../controller/camera_mode.h                  |  0\n>  .../controller/ccm_algorithm.h                |  0\n>  .../controller/ccm_status.h                   |  0\n>  .../controller/contrast_algorithm.h           |  0\n>  .../controller/contrast_status.h              |  0\n>  .../controller/controller.cpp                 |  0\n>  .../controller/controller.h                   |  0\n>  .../controller/denoise_algorithm.h            |  0\n>  .../controller/denoise_status.h               |  0\n>  .../controller/device_status.cpp              |  0\n>  .../controller/device_status.h                |  0\n>  .../controller/dpc_status.h                   |  0\n>  .../controller/geq_status.h                   |  0\n>  .../controller/histogram.cpp                  |  0\n>  .../controller/histogram.h                    |  0\n>  .../controller/lux_status.h                   |  0\n>  src/ipa/rpi/controller/meson.build            | 22 +++++++\n>  .../controller/metadata.h                     |  0\n>  .../controller/noise_status.h                 |  0\n>  .../controller/pdaf_data.h                    |  0\n>  .../{raspberrypi => rpi}/controller/pwl.cpp   |  0\n>  src/ipa/{raspberrypi => rpi}/controller/pwl.h |  0\n>  .../controller/region_stats.h                 |  0\n>  .../controller/rpi/af.cpp                     |  0\n>  .../{raspberrypi => rpi}/controller/rpi/af.h  |  0\n>  .../controller/rpi/agc.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/agc.h |  0\n>  .../controller/rpi/alsc.cpp                   |  0\n>  .../controller/rpi/alsc.h                     |  0\n>  .../controller/rpi/awb.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/awb.h |  0\n>  .../controller/rpi/black_level.cpp            |  0\n>  .../controller/rpi/black_level.h              |  0\n>  .../controller/rpi/ccm.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/ccm.h |  0\n>  .../controller/rpi/contrast.cpp               |  0\n>  .../controller/rpi/contrast.h                 |  0\n>  .../controller/rpi/dpc.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/dpc.h |  0\n>  .../controller/rpi/focus.h                    |  0\n>  .../controller/rpi/geq.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/geq.h |  0\n>  .../controller/rpi/lux.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/lux.h |  0\n>  .../controller/rpi/noise.cpp                  |  0\n>  .../controller/rpi/noise.h                    |  0\n>  .../controller/rpi/sdn.cpp                    |  0\n>  .../{raspberrypi => rpi}/controller/rpi/sdn.h |  0\n>  .../controller/rpi/sharpen.cpp                |  0\n>  .../controller/rpi/sharpen.h                  |  0\n>  .../controller/sharpen_algorithm.h            |  0\n>  .../controller/sharpen_status.h               |  0\n>  .../controller}/statistics.h                  |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx219.json |  0\n>  .../vc4}/data/imx219_noir.json                |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx290.json |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx296.json |  0\n>  .../vc4}/data/imx296_mono.json                |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx378.json |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx477.json |  0\n>  .../vc4}/data/imx477_noir.json                |  0\n>  .../vc4}/data/imx477_scientific.json          |  0\n>  .../vc4}/data/imx477_v1.json                  |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx519.json |  0\n>  .../{raspberrypi => rpi/vc4}/data/imx708.json |  0\n>  .../vc4}/data/imx708_noir.json                |  0\n>  .../vc4}/data/imx708_wide.json                |  0\n>  .../vc4}/data/imx708_wide_noir.json           |  0\n>  .../{raspberrypi => rpi/vc4}/data/meson.build |  2 +-\n>  .../{raspberrypi => rpi/vc4}/data/ov5647.json |  0\n>  .../vc4}/data/ov5647_noir.json                |  0\n>  .../vc4}/data/ov9281_mono.json                |  0\n>  .../vc4}/data/se327m12.json                   |  0\n>  .../vc4}/data/uncalibrated.json               |  0\n>  src/ipa/rpi/vc4/meson.build                   | 40 +++++++++++\n>  .../{raspberrypi => rpi/vc4}/raspberrypi.cpp  | 48 +++++++-------\n>  .../pipeline/rpi/vc4/raspberrypi.cpp          |  2 +-\n>  105 files changed, 115 insertions(+), 95 deletions(-)\n>  delete mode 100644 src/ipa/raspberrypi/meson.build\n>  rename src/ipa/{raspberrypi => rpi}/README.md (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper.h (99%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx219.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx290.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx296.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx477.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx519.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx708.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_ov5647.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_ov9281.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/md_parser.h (100%)\n>  rename src/ipa/{raspberrypi => rpi/cam_helper}/md_parser_smia.cpp (100%)\n>  create mode 100644 src/ipa/rpi/cam_helper/meson.build\n>  rename src/ipa/{raspberrypi => rpi}/controller/af_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/af_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/agc_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/agc_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/algorithm.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/alsc_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/awb_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/awb_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/black_level_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/camera_mode.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/ccm_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/ccm_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/contrast_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/contrast_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/controller.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/controller.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/denoise_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/denoise_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/device_status.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/device_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/dpc_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/geq_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/histogram.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/histogram.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/lux_status.h (100%)\n>  create mode 100644 src/ipa/rpi/controller/meson.build\n>  rename src/ipa/{raspberrypi => rpi}/controller/metadata.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/noise_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/pdaf_data.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/pwl.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/pwl.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/region_stats.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/af.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/af.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/agc.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/agc.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/alsc.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/alsc.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/awb.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/awb.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/black_level.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/black_level.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/ccm.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/ccm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/contrast.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/contrast.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/dpc.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/dpc.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/focus.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/geq.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/geq.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/lux.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/lux.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/noise.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/noise.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sdn.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sdn.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sharpen.cpp (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sharpen.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/sharpen_algorithm.h (100%)\n>  rename src/ipa/{raspberrypi => rpi}/controller/sharpen_status.h (100%)\n>  rename src/ipa/{raspberrypi => rpi/controller}/statistics.h (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx219.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx219_noir.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx290.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx296.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx296_mono.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx378.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_noir.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_scientific.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_v1.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx519.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_noir.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_wide.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_wide_noir.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/meson.build (89%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/ov5647.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/ov5647_noir.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/ov9281_mono.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/se327m12.json (100%)\n>  rename src/ipa/{raspberrypi => rpi/vc4}/data/uncalibrated.json (100%)\n>  create mode 100644 src/ipa/rpi/vc4/meson.build\n>  rename src/ipa/{raspberrypi => rpi/vc4}/raspberrypi.cpp (98%)\n> \n> diff --git a/Documentation/environment_variables.rst b/Documentation/environment_variables.rst\n> index 4bf38b877897..888707785ee1 100644\n> --- a/Documentation/environment_variables.rst\n> +++ b/Documentation/environment_variables.rst\n> @@ -143,7 +143,7 @@ contain tuning parameters for the algorithms, in JSON format.\n>  The ``LIBCAMERA_IPA_CONFIG_PATH`` variable can be used to specify custom\n>  storage locations to search for those configuration files.\n>  \n> -`Examples <https://git.libcamera.org/libcamera/libcamera.git/tree/src/ipa/raspberrypi/data>`__\n> +`Examples <https://git.libcamera.org/libcamera/libcamera.git/tree/src/ipa/rpi/data>`__\n\nShouldn't this be rpi/vc4/data ?\n\n>  \n>  IPA module\n>  ~~~~~~~~~~\n> diff --git a/meson_options.txt b/meson_options.txt\n> index e1f4c205aa94..596f813ea5e5 100644\n> --- a/meson_options.txt\n> +++ b/meson_options.txt\n> @@ -27,7 +27,7 @@ option('gstreamer',\n>  \n>  option('ipas',\n>          type : 'array',\n> -        choices : ['ipu3', 'raspberrypi', 'rkisp1', 'vimc'],\n> +        choices : ['ipu3', 'rpi/vc4', 'rkisp1', 'vimc'],\n>          description : 'Select which IPA modules to build')\n>  \n>  option('lc-compliance',\n> diff --git a/src/ipa/meson.build b/src/ipa/meson.build\n> index 76ad5b445601..10d3b44ca7b6 100644\n> --- a/src/ipa/meson.build\n> +++ b/src/ipa/meson.build\n> @@ -37,6 +37,16 @@ endif\n>  \n>  enabled_ipa_modules = []\n>  \n> +# If the Raspberry Pi VC4 IPA is enabled, ensure we include the  rpi/cam_helper\n> +# and rpi/controller subdirectories in the build.\n> +#\n> +# This is done here and not within rpi/vc4/meson.build as meson does not\n> +# allow the subdir command to traverse up the directory tree.\n> +if pipelines.contains('rpi/vc4')\n> +    subdir('rpi/cam_helper')\n> +    subdir('rpi/controller')\n> +endif\n\nThis should be handled more generically, see my review of patch 03/13.\nI'll try to propose an implementation, likely on Monday.\n\n> +\n>  # The ipa-sign-install.sh script which uses the ipa_names variable will itself\n>  # prepend MESON_INSTALL_DESTDIR_PREFIX to each ipa module name, therefore we\n>  # must not include the prefix string here.\n> diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build\n> deleted file mode 100644\n> index de78cbd80f9c..000000000000\n> --- a/src/ipa/raspberrypi/meson.build\n> +++ /dev/null\n> @@ -1,66 +0,0 @@\n> -# SPDX-License-Identifier: CC0-1.0\n> -\n> -ipa_name = 'ipa_rpi'\n> -\n> -rpi_ipa_deps = [\n> -    libcamera_private,\n> -    libatomic,\n> -]\n> -\n> -rpi_ipa_includes = [\n> -    ipa_includes,\n> -    libipa_includes,\n> -    include_directories('controller')\n> -]\n> -\n> -rpi_ipa_sources = files([\n> -    'raspberrypi.cpp',\n> -    'md_parser_smia.cpp',\n> -    'cam_helper.cpp',\n> -    'cam_helper_ov5647.cpp',\n> -    'cam_helper_imx219.cpp',\n> -    'cam_helper_imx290.cpp',\n> -    'cam_helper_imx296.cpp',\n> -    'cam_helper_imx477.cpp',\n> -    'cam_helper_imx519.cpp',\n> -    'cam_helper_imx708.cpp',\n> -    'cam_helper_ov9281.cpp',\n> -    'controller/controller.cpp',\n> -    'controller/histogram.cpp',\n> -    'controller/algorithm.cpp',\n> -    'controller/rpi/af.cpp',\n> -    'controller/rpi/alsc.cpp',\n> -    'controller/rpi/awb.cpp',\n> -    'controller/rpi/sharpen.cpp',\n> -    'controller/rpi/black_level.cpp',\n> -    'controller/rpi/geq.cpp',\n> -    'controller/rpi/noise.cpp',\n> -    'controller/rpi/lux.cpp',\n> -    'controller/rpi/agc.cpp',\n> -    'controller/rpi/dpc.cpp',\n> -    'controller/rpi/ccm.cpp',\n> -    'controller/rpi/contrast.cpp',\n> -    'controller/rpi/sdn.cpp',\n> -    'controller/pwl.cpp',\n> -    'controller/device_status.cpp',\n> -])\n> -\n> -mod = shared_module(ipa_name,\n> -                    [rpi_ipa_sources, libcamera_generated_ipa_headers],\n> -                    name_prefix : '',\n> -                    include_directories : rpi_ipa_includes,\n> -                    dependencies : rpi_ipa_deps,\n> -                    link_with : libipa,\n> -                    install : true,\n> -                    install_dir : ipa_install_dir)\n> -\n> -if ipa_sign_module\n> -    custom_target(ipa_name + '.so.sign',\n> -                  input : mod,\n> -                  output : ipa_name + '.so.sign',\n> -                  command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],\n> -                  install : false,\n> -                  build_by_default : true)\n> -endif\n> -\n> -subdir('data')\n> diff --git a/src/ipa/raspberrypi/README.md b/src/ipa/rpi/README.md\n> similarity index 100%\n> rename from src/ipa/raspberrypi/README.md\n> rename to src/ipa/rpi/README.md\n> diff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/rpi/cam_helper/cam_helper.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper.h b/src/ipa/rpi/cam_helper/cam_helper.h\n> similarity index 99%\n> rename from src/ipa/raspberrypi/cam_helper.h\n> rename to src/ipa/rpi/cam_helper/cam_helper.h\n> index b3f8c9803094..58a4b202d5a8 100644\n> --- a/src/ipa/raspberrypi/cam_helper.h\n> +++ b/src/ipa/rpi/cam_helper/cam_helper.h\n> @@ -13,7 +13,7 @@\n>  #include <libcamera/base/span.h>\n>  #include <libcamera/base/utils.h>\n>  \n> -#include \"camera_mode.h\"\n> +#include \"controller/camera_mode.h\"\n>  #include \"controller/controller.h\"\n>  #include \"controller/metadata.h\"\n>  #include \"md_parser.h\"\n> diff --git a/src/ipa/raspberrypi/cam_helper_imx219.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx219.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_imx219.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_imx219.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_imx290.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx290.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_imx290.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_imx290.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_imx296.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_imx296.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_imx296.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_imx477.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_imx477.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_imx477.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_imx519.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_imx519.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_imx519.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_imx708.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_imx708.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_imx708.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_ov5647.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_ov5647.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp\n> diff --git a/src/ipa/raspberrypi/cam_helper_ov9281.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/cam_helper_ov9281.cpp\n> rename to src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp\n> diff --git a/src/ipa/raspberrypi/md_parser.h b/src/ipa/rpi/cam_helper/md_parser.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/md_parser.h\n> rename to src/ipa/rpi/cam_helper/md_parser.h\n> diff --git a/src/ipa/raspberrypi/md_parser_smia.cpp b/src/ipa/rpi/cam_helper/md_parser_smia.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/md_parser_smia.cpp\n> rename to src/ipa/rpi/cam_helper/md_parser_smia.cpp\n> diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build\n> new file mode 100644\n> index 000000000000..aa42ae91f69d\n> --- /dev/null\n> +++ b/src/ipa/rpi/cam_helper/meson.build\n> @@ -0,0 +1,14 @@\n> +# SPDX-License-Identifier: CC0-1.0\n> +\n> +rpi_ipa_cam_helper_sources = files([\n> +    'cam_helper.cpp',\n> +    'cam_helper_ov5647.cpp',\n> +    'cam_helper_imx219.cpp',\n> +    'cam_helper_imx290.cpp',\n> +    'cam_helper_imx296.cpp',\n> +    'cam_helper_imx477.cpp',\n> +    'cam_helper_imx519.cpp',\n> +    'cam_helper_imx708.cpp',\n> +    'cam_helper_ov9281.cpp',\n> +    'md_parser_smia.cpp',\n> +])\n> diff --git a/src/ipa/raspberrypi/controller/af_algorithm.h b/src/ipa/rpi/controller/af_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/af_algorithm.h\n> rename to src/ipa/rpi/controller/af_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/af_status.h b/src/ipa/rpi/controller/af_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/af_status.h\n> rename to src/ipa/rpi/controller/af_status.h\n> diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.h b/src/ipa/rpi/controller/agc_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/agc_algorithm.h\n> rename to src/ipa/rpi/controller/agc_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/agc_status.h b/src/ipa/rpi/controller/agc_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/agc_status.h\n> rename to src/ipa/rpi/controller/agc_status.h\n> diff --git a/src/ipa/raspberrypi/controller/algorithm.cpp b/src/ipa/rpi/controller/algorithm.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/algorithm.cpp\n> rename to src/ipa/rpi/controller/algorithm.cpp\n> diff --git a/src/ipa/raspberrypi/controller/algorithm.h b/src/ipa/rpi/controller/algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/algorithm.h\n> rename to src/ipa/rpi/controller/algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/alsc_status.h b/src/ipa/rpi/controller/alsc_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/alsc_status.h\n> rename to src/ipa/rpi/controller/alsc_status.h\n> diff --git a/src/ipa/raspberrypi/controller/awb_algorithm.h b/src/ipa/rpi/controller/awb_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/awb_algorithm.h\n> rename to src/ipa/rpi/controller/awb_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/awb_status.h b/src/ipa/rpi/controller/awb_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/awb_status.h\n> rename to src/ipa/rpi/controller/awb_status.h\n> diff --git a/src/ipa/raspberrypi/controller/black_level_status.h b/src/ipa/rpi/controller/black_level_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/black_level_status.h\n> rename to src/ipa/rpi/controller/black_level_status.h\n> diff --git a/src/ipa/raspberrypi/controller/camera_mode.h b/src/ipa/rpi/controller/camera_mode.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/camera_mode.h\n> rename to src/ipa/rpi/controller/camera_mode.h\n> diff --git a/src/ipa/raspberrypi/controller/ccm_algorithm.h b/src/ipa/rpi/controller/ccm_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/ccm_algorithm.h\n> rename to src/ipa/rpi/controller/ccm_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/ccm_status.h b/src/ipa/rpi/controller/ccm_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/ccm_status.h\n> rename to src/ipa/rpi/controller/ccm_status.h\n> diff --git a/src/ipa/raspberrypi/controller/contrast_algorithm.h b/src/ipa/rpi/controller/contrast_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/contrast_algorithm.h\n> rename to src/ipa/rpi/controller/contrast_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/contrast_status.h b/src/ipa/rpi/controller/contrast_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/contrast_status.h\n> rename to src/ipa/rpi/controller/contrast_status.h\n> diff --git a/src/ipa/raspberrypi/controller/controller.cpp b/src/ipa/rpi/controller/controller.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/controller.cpp\n> rename to src/ipa/rpi/controller/controller.cpp\n> diff --git a/src/ipa/raspberrypi/controller/controller.h b/src/ipa/rpi/controller/controller.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/controller.h\n> rename to src/ipa/rpi/controller/controller.h\n> diff --git a/src/ipa/raspberrypi/controller/denoise_algorithm.h b/src/ipa/rpi/controller/denoise_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/denoise_algorithm.h\n> rename to src/ipa/rpi/controller/denoise_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/denoise_status.h b/src/ipa/rpi/controller/denoise_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/denoise_status.h\n> rename to src/ipa/rpi/controller/denoise_status.h\n> diff --git a/src/ipa/raspberrypi/controller/device_status.cpp b/src/ipa/rpi/controller/device_status.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/device_status.cpp\n> rename to src/ipa/rpi/controller/device_status.cpp\n> diff --git a/src/ipa/raspberrypi/controller/device_status.h b/src/ipa/rpi/controller/device_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/device_status.h\n> rename to src/ipa/rpi/controller/device_status.h\n> diff --git a/src/ipa/raspberrypi/controller/dpc_status.h b/src/ipa/rpi/controller/dpc_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/dpc_status.h\n> rename to src/ipa/rpi/controller/dpc_status.h\n> diff --git a/src/ipa/raspberrypi/controller/geq_status.h b/src/ipa/rpi/controller/geq_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/geq_status.h\n> rename to src/ipa/rpi/controller/geq_status.h\n> diff --git a/src/ipa/raspberrypi/controller/histogram.cpp b/src/ipa/rpi/controller/histogram.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/histogram.cpp\n> rename to src/ipa/rpi/controller/histogram.cpp\n> diff --git a/src/ipa/raspberrypi/controller/histogram.h b/src/ipa/rpi/controller/histogram.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/histogram.h\n> rename to src/ipa/rpi/controller/histogram.h\n> diff --git a/src/ipa/raspberrypi/controller/lux_status.h b/src/ipa/rpi/controller/lux_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/lux_status.h\n> rename to src/ipa/rpi/controller/lux_status.h\n> diff --git a/src/ipa/rpi/controller/meson.build b/src/ipa/rpi/controller/meson.build\n> new file mode 100644\n> index 000000000000..90a67412444e\n> --- /dev/null\n> +++ b/src/ipa/rpi/controller/meson.build\n> @@ -0,0 +1,22 @@\n> +# SPDX-License-Identifier: CC0-1.0\n> +\n> +rpi_ipa_controller_sources = files([\n> +    'algorithm.cpp',\n> +    'controller.cpp',\n> +    'device_status.cpp',\n> +    'histogram.cpp',\n> +    'pwl.cpp',\n> +    'rpi/af.cpp',\n> +    'rpi/agc.cpp',\n> +    'rpi/alsc.cpp',\n> +    'rpi/awb.cpp',\n> +    'rpi/black_level.cpp',\n> +    'rpi/ccm.cpp',\n> +    'rpi/contrast.cpp',\n> +    'rpi/dpc.cpp',\n> +    'rpi/geq.cpp',\n> +    'rpi/lux.cpp',\n> +    'rpi/noise.cpp',\n> +    'rpi/sdn.cpp',\n> +    'rpi/sharpen.cpp',\n> +])\n> diff --git a/src/ipa/raspberrypi/controller/metadata.h b/src/ipa/rpi/controller/metadata.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/metadata.h\n> rename to src/ipa/rpi/controller/metadata.h\n> diff --git a/src/ipa/raspberrypi/controller/noise_status.h b/src/ipa/rpi/controller/noise_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/noise_status.h\n> rename to src/ipa/rpi/controller/noise_status.h\n> diff --git a/src/ipa/raspberrypi/controller/pdaf_data.h b/src/ipa/rpi/controller/pdaf_data.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/pdaf_data.h\n> rename to src/ipa/rpi/controller/pdaf_data.h\n> diff --git a/src/ipa/raspberrypi/controller/pwl.cpp b/src/ipa/rpi/controller/pwl.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/pwl.cpp\n> rename to src/ipa/rpi/controller/pwl.cpp\n> diff --git a/src/ipa/raspberrypi/controller/pwl.h b/src/ipa/rpi/controller/pwl.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/pwl.h\n> rename to src/ipa/rpi/controller/pwl.h\n> diff --git a/src/ipa/raspberrypi/controller/region_stats.h b/src/ipa/rpi/controller/region_stats.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/region_stats.h\n> rename to src/ipa/rpi/controller/region_stats.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/af.cpp b/src/ipa/rpi/controller/rpi/af.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/af.cpp\n> rename to src/ipa/rpi/controller/rpi/af.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/af.h b/src/ipa/rpi/controller/rpi/af.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/af.h\n> rename to src/ipa/rpi/controller/rpi/af.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp b/src/ipa/rpi/controller/rpi/agc.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/agc.cpp\n> rename to src/ipa/rpi/controller/rpi/agc.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.h b/src/ipa/rpi/controller/rpi/agc.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/agc.h\n> rename to src/ipa/rpi/controller/rpi/agc.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/alsc.cpp b/src/ipa/rpi/controller/rpi/alsc.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/alsc.cpp\n> rename to src/ipa/rpi/controller/rpi/alsc.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/alsc.h b/src/ipa/rpi/controller/rpi/alsc.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/alsc.h\n> rename to src/ipa/rpi/controller/rpi/alsc.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp b/src/ipa/rpi/controller/rpi/awb.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/awb.cpp\n> rename to src/ipa/rpi/controller/rpi/awb.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.h b/src/ipa/rpi/controller/rpi/awb.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/awb.h\n> rename to src/ipa/rpi/controller/rpi/awb.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/black_level.cpp b/src/ipa/rpi/controller/rpi/black_level.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/black_level.cpp\n> rename to src/ipa/rpi/controller/rpi/black_level.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/black_level.h b/src/ipa/rpi/controller/rpi/black_level.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/black_level.h\n> rename to src/ipa/rpi/controller/rpi/black_level.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/ccm.cpp b/src/ipa/rpi/controller/rpi/ccm.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/ccm.cpp\n> rename to src/ipa/rpi/controller/rpi/ccm.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/ccm.h b/src/ipa/rpi/controller/rpi/ccm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/ccm.h\n> rename to src/ipa/rpi/controller/rpi/ccm.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/contrast.cpp b/src/ipa/rpi/controller/rpi/contrast.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/contrast.cpp\n> rename to src/ipa/rpi/controller/rpi/contrast.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/contrast.h b/src/ipa/rpi/controller/rpi/contrast.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/contrast.h\n> rename to src/ipa/rpi/controller/rpi/contrast.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/dpc.cpp b/src/ipa/rpi/controller/rpi/dpc.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/dpc.cpp\n> rename to src/ipa/rpi/controller/rpi/dpc.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/dpc.h b/src/ipa/rpi/controller/rpi/dpc.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/dpc.h\n> rename to src/ipa/rpi/controller/rpi/dpc.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/focus.h b/src/ipa/rpi/controller/rpi/focus.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/focus.h\n> rename to src/ipa/rpi/controller/rpi/focus.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/geq.cpp b/src/ipa/rpi/controller/rpi/geq.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/geq.cpp\n> rename to src/ipa/rpi/controller/rpi/geq.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/geq.h b/src/ipa/rpi/controller/rpi/geq.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/geq.h\n> rename to src/ipa/rpi/controller/rpi/geq.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/lux.cpp b/src/ipa/rpi/controller/rpi/lux.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/lux.cpp\n> rename to src/ipa/rpi/controller/rpi/lux.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/lux.h b/src/ipa/rpi/controller/rpi/lux.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/lux.h\n> rename to src/ipa/rpi/controller/rpi/lux.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/noise.cpp b/src/ipa/rpi/controller/rpi/noise.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/noise.cpp\n> rename to src/ipa/rpi/controller/rpi/noise.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/noise.h b/src/ipa/rpi/controller/rpi/noise.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/noise.h\n> rename to src/ipa/rpi/controller/rpi/noise.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/sdn.cpp b/src/ipa/rpi/controller/rpi/sdn.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/sdn.cpp\n> rename to src/ipa/rpi/controller/rpi/sdn.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/sdn.h b/src/ipa/rpi/controller/rpi/sdn.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/sdn.h\n> rename to src/ipa/rpi/controller/rpi/sdn.h\n> diff --git a/src/ipa/raspberrypi/controller/rpi/sharpen.cpp b/src/ipa/rpi/controller/rpi/sharpen.cpp\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/sharpen.cpp\n> rename to src/ipa/rpi/controller/rpi/sharpen.cpp\n> diff --git a/src/ipa/raspberrypi/controller/rpi/sharpen.h b/src/ipa/rpi/controller/rpi/sharpen.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/rpi/sharpen.h\n> rename to src/ipa/rpi/controller/rpi/sharpen.h\n> diff --git a/src/ipa/raspberrypi/controller/sharpen_algorithm.h b/src/ipa/rpi/controller/sharpen_algorithm.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/sharpen_algorithm.h\n> rename to src/ipa/rpi/controller/sharpen_algorithm.h\n> diff --git a/src/ipa/raspberrypi/controller/sharpen_status.h b/src/ipa/rpi/controller/sharpen_status.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/controller/sharpen_status.h\n> rename to src/ipa/rpi/controller/sharpen_status.h\n> diff --git a/src/ipa/raspberrypi/statistics.h b/src/ipa/rpi/controller/statistics.h\n> similarity index 100%\n> rename from src/ipa/raspberrypi/statistics.h\n> rename to src/ipa/rpi/controller/statistics.h\n> diff --git a/src/ipa/raspberrypi/data/imx219.json b/src/ipa/rpi/vc4/data/imx219.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx219.json\n> rename to src/ipa/rpi/vc4/data/imx219.json\n> diff --git a/src/ipa/raspberrypi/data/imx219_noir.json b/src/ipa/rpi/vc4/data/imx219_noir.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx219_noir.json\n> rename to src/ipa/rpi/vc4/data/imx219_noir.json\n> diff --git a/src/ipa/raspberrypi/data/imx290.json b/src/ipa/rpi/vc4/data/imx290.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx290.json\n> rename to src/ipa/rpi/vc4/data/imx290.json\n> diff --git a/src/ipa/raspberrypi/data/imx296.json b/src/ipa/rpi/vc4/data/imx296.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx296.json\n> rename to src/ipa/rpi/vc4/data/imx296.json\n> diff --git a/src/ipa/raspberrypi/data/imx296_mono.json b/src/ipa/rpi/vc4/data/imx296_mono.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx296_mono.json\n> rename to src/ipa/rpi/vc4/data/imx296_mono.json\n> diff --git a/src/ipa/raspberrypi/data/imx378.json b/src/ipa/rpi/vc4/data/imx378.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx378.json\n> rename to src/ipa/rpi/vc4/data/imx378.json\n> diff --git a/src/ipa/raspberrypi/data/imx477.json b/src/ipa/rpi/vc4/data/imx477.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx477.json\n> rename to src/ipa/rpi/vc4/data/imx477.json\n> diff --git a/src/ipa/raspberrypi/data/imx477_noir.json b/src/ipa/rpi/vc4/data/imx477_noir.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx477_noir.json\n> rename to src/ipa/rpi/vc4/data/imx477_noir.json\n> diff --git a/src/ipa/raspberrypi/data/imx477_scientific.json b/src/ipa/rpi/vc4/data/imx477_scientific.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx477_scientific.json\n> rename to src/ipa/rpi/vc4/data/imx477_scientific.json\n> diff --git a/src/ipa/raspberrypi/data/imx477_v1.json b/src/ipa/rpi/vc4/data/imx477_v1.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx477_v1.json\n> rename to src/ipa/rpi/vc4/data/imx477_v1.json\n> diff --git a/src/ipa/raspberrypi/data/imx519.json b/src/ipa/rpi/vc4/data/imx519.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx519.json\n> rename to src/ipa/rpi/vc4/data/imx519.json\n> diff --git a/src/ipa/raspberrypi/data/imx708.json b/src/ipa/rpi/vc4/data/imx708.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx708.json\n> rename to src/ipa/rpi/vc4/data/imx708.json\n> diff --git a/src/ipa/raspberrypi/data/imx708_noir.json b/src/ipa/rpi/vc4/data/imx708_noir.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx708_noir.json\n> rename to src/ipa/rpi/vc4/data/imx708_noir.json\n> diff --git a/src/ipa/raspberrypi/data/imx708_wide.json b/src/ipa/rpi/vc4/data/imx708_wide.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx708_wide.json\n> rename to src/ipa/rpi/vc4/data/imx708_wide.json\n> diff --git a/src/ipa/raspberrypi/data/imx708_wide_noir.json b/src/ipa/rpi/vc4/data/imx708_wide_noir.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/imx708_wide_noir.json\n> rename to src/ipa/rpi/vc4/data/imx708_wide_noir.json\n> diff --git a/src/ipa/raspberrypi/data/meson.build b/src/ipa/rpi/vc4/data/meson.build\n> similarity index 89%\n> rename from src/ipa/raspberrypi/data/meson.build\n> rename to src/ipa/rpi/vc4/data/meson.build\n> index b163a052f57c..327462fa2420 100644\n> --- a/src/ipa/raspberrypi/data/meson.build\n> +++ b/src/ipa/rpi/vc4/data/meson.build\n> @@ -23,4 +23,4 @@ conf_files = files([\n>  ])\n>  \n>  install_data(conf_files,\n> -             install_dir : ipa_data_dir / 'raspberrypi')\n> +             install_dir : ipa_data_dir / 'rpi/vc4')\n> diff --git a/src/ipa/raspberrypi/data/ov5647.json b/src/ipa/rpi/vc4/data/ov5647.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/ov5647.json\n> rename to src/ipa/rpi/vc4/data/ov5647.json\n> diff --git a/src/ipa/raspberrypi/data/ov5647_noir.json b/src/ipa/rpi/vc4/data/ov5647_noir.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/ov5647_noir.json\n> rename to src/ipa/rpi/vc4/data/ov5647_noir.json\n> diff --git a/src/ipa/raspberrypi/data/ov9281_mono.json b/src/ipa/rpi/vc4/data/ov9281_mono.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/ov9281_mono.json\n> rename to src/ipa/rpi/vc4/data/ov9281_mono.json\n> diff --git a/src/ipa/raspberrypi/data/se327m12.json b/src/ipa/rpi/vc4/data/se327m12.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/se327m12.json\n> rename to src/ipa/rpi/vc4/data/se327m12.json\n> diff --git a/src/ipa/raspberrypi/data/uncalibrated.json b/src/ipa/rpi/vc4/data/uncalibrated.json\n> similarity index 100%\n> rename from src/ipa/raspberrypi/data/uncalibrated.json\n> rename to src/ipa/rpi/vc4/data/uncalibrated.json\n> diff --git a/src/ipa/rpi/vc4/meson.build b/src/ipa/rpi/vc4/meson.build\n> new file mode 100644\n> index 000000000000..992d0f1ab5a7\n> --- /dev/null\n> +++ b/src/ipa/rpi/vc4/meson.build\n> @@ -0,0 +1,40 @@\n> +# SPDX-License-Identifier: CC0-1.0\n> +\n> +ipa_name = 'ipa_vc4'\n\nIncluding the \"prefix\" in the name ('ipa_rpi_vc4') would help avoiding\nnamespace clashes.\n\n> +\n> +vc4_ipa_deps = [\n> +    libcamera_private,\n> +    libatomic,\n> +]\n> +\n> +vc4_ipa_includes = [\n> +    ipa_includes,\n> +    libipa_includes,\n> +]\n> +\n> +vc4_ipa_sources = files([\n> +    'raspberrypi.cpp',\n> +])\n> +\n> +vc4_ipa_includes += include_directories('..')\n> +vc4_ipa_sources += [rpi_ipa_cam_helper_sources, rpi_ipa_controller_sources]\n\nCould we avoid building the shared sources multiple times by using a\nstatic library ?\n\n> +\n> +mod = shared_module(ipa_name,\n> +                    [vc4_ipa_sources, libcamera_generated_ipa_headers],\n> +                    name_prefix : '',\n> +                    include_directories : vc4_ipa_includes,\n> +                    dependencies : vc4_ipa_deps,\n> +                    link_with : libipa,\n> +                    install : true,\n> +                    install_dir : ipa_install_dir)\n> +\n> +if ipa_sign_module\n> +    custom_target(ipa_name + '.so.sign',\n> +                  input : mod,\n> +                  output : ipa_name + '.so.sign',\n> +                  command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],\n> +                  install : false,\n> +                  build_by_default : true)\n> +endif\n> +\n> +subdir('data')\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/rpi/vc4/raspberrypi.cpp\n> similarity index 98%\n> rename from src/ipa/raspberrypi/raspberrypi.cpp\n> rename to src/ipa/rpi/vc4/raspberrypi.cpp\n> index 9c29fa9a5e5c..841635ccde2b 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/rpi/vc4/raspberrypi.cpp\n> @@ -33,29 +33,29 @@\n>  \n>  #include \"libcamera/internal/mapped_framebuffer.h\"\n>  \n> -#include \"af_algorithm.h\"\n> -#include \"af_status.h\"\n> -#include \"agc_algorithm.h\"\n> -#include \"agc_status.h\"\n> -#include \"alsc_status.h\"\n> -#include \"awb_algorithm.h\"\n> -#include \"awb_status.h\"\n> -#include \"black_level_status.h\"\n> -#include \"cam_helper.h\"\n> -#include \"ccm_algorithm.h\"\n> -#include \"ccm_status.h\"\n> -#include \"contrast_algorithm.h\"\n> -#include \"contrast_status.h\"\n> -#include \"controller.h\"\n> -#include \"denoise_algorithm.h\"\n> -#include \"denoise_status.h\"\n> -#include \"dpc_status.h\"\n> -#include \"geq_status.h\"\n> -#include \"lux_status.h\"\n> -#include \"metadata.h\"\n> -#include \"sharpen_algorithm.h\"\n> -#include \"sharpen_status.h\"\n> -#include \"statistics.h\"\n> +#include \"cam_helper/cam_helper.h\"\n> +#include \"controller/af_algorithm.h\"\n> +#include \"controller/af_status.h\"\n> +#include \"controller/agc_algorithm.h\"\n> +#include \"controller/agc_status.h\"\n> +#include \"controller/alsc_status.h\"\n> +#include \"controller/awb_algorithm.h\"\n> +#include \"controller/awb_status.h\"\n> +#include \"controller/black_level_status.h\"\n> +#include \"controller/ccm_algorithm.h\"\n> +#include \"controller/ccm_status.h\"\n> +#include \"controller/contrast_algorithm.h\"\n> +#include \"controller/contrast_status.h\"\n> +#include \"controller/controller.h\"\n> +#include \"controller/denoise_algorithm.h\"\n> +#include \"controller/denoise_status.h\"\n> +#include \"controller/dpc_status.h\"\n> +#include \"controller/geq_status.h\"\n> +#include \"controller/lux_status.h\"\n> +#include \"controller/metadata.h\"\n> +#include \"controller/sharpen_algorithm.h\"\n> +#include \"controller/sharpen_status.h\"\n> +#include \"controller/statistics.h\"\n>  \n>  namespace libcamera {\n>  \n> @@ -1840,7 +1840,7 @@ const struct IPAModuleInfo ipaModuleInfo = {\n>  \tIPA_MODULE_API_VERSION,\n>  \t1,\n>  \t\"PipelineHandlerRPi\",\n> -\t\"raspberrypi\",\n> +\t\"vc4\",\n>  };\n>  \n>  IPAInterface *ipaCreate()\n> diff --git a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp\n> index 4595773d2517..cfde7f2e2229 100644\n> --- a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp\n> @@ -1668,7 +1668,7 @@ int RPiCameraData::loadIPA(ipa::RPi::IPAInitResult *result)\n>  \t\tstd::string model = sensor_->model();\n>  \t\tif (isMonoSensor(sensor_))\n>  \t\t\tmodel += \"_mono\";\n> -\t\tconfigurationFile = ipa_->configurationFile(model + \".json\", \"\");\n> +\t\tconfigurationFile = ipa_->configurationFile(model + \".json\", \"rpi\");\n>  \t} else {\n>  \t\tconfigurationFile = std::string(configFromEnv);\n>  \t}","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 6CFC0C0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 27 Apr 2023 17:02:00 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id EA6DE627D6;\n\tThu, 27 Apr 2023 19:01:59 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 954C8627B7\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 27 Apr 2023 19:01:58 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(133-32-181-51.west.xps.vectant.ne.jp [133.32.181.51])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 724F0C7E;\n\tThu, 27 Apr 2023 19:01:45 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1682614919;\n\tbh=tr16us9bD6XPpzupR96rOmeMi/V3uCCRHRWQPZwlIrk=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=d9dDPYn0Svt51kB8ah3Jx5XQh/NsRhuQOItd65SHJsF5mhZ0F0l27s2nF8DXlWxqN\n\twg7nSUfEZOjCg6mzgWbUDYzslAiVn7o3yNv0p8zvBCrXwLXouxT7KClRoGRlHwIuIa\n\t5vAT/sknH7q+M7VBzXx4SObjzGgJl4zTFgXF4+O5VQT66xuG7pApayI/t9KDBEklsS\n\tpGiIJ+gF/s73DZdwrurOA5MRLHmgFaep5hCOLTFtAeozT8o0gdlIhGwAG3YPZqlF30\n\tKy985QOI3+VRBR4LnRaJSmisVfhRcp1anGmVyHpejG/6V6qH+OoNgnzJ8DJ4k/kJg6\n\tUvNvKx+Gh0fmQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1682614906;\n\tbh=tr16us9bD6XPpzupR96rOmeMi/V3uCCRHRWQPZwlIrk=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=TQr+e8Rcy2gTCFRi55++vlXP++rUSbJVRCDC9ofrB/VbxYbRFLfjIdgtvCmg89ChQ\n\tPFeOPvRKvQwLudXWtrc0H2GQXSGjDu/ZYNkGC4n3zuk6cH4vQpT8PHYRlbWEnl9rq3\n\thk1Sh8tZvf7+8nKDB5MOpxve7Hdb+c+HyJF80UA0="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"TQr+e8Rc\"; dkim-atps=neutral","Date":"Thu, 27 Apr 2023 20:02:09 +0300","To":"Naushir Patuck <naush@raspberrypi.com>","Message-ID":"<20230427170209.GA27087@pendragon.ideasonboard.com>","References":"<20230426131057.21550-1-naush@raspberrypi.com>\n\t<20230426131057.21550-5-naush@raspberrypi.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20230426131057.21550-5-naush@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH 04/13] ipa: raspberrypi: Refactor and\n\tmove IPA code","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]