[libcamera-devel,04/13] ipa: raspberrypi: Refactor and move IPA code
diff mbox series

Message ID 20230426131057.21550-5-naush@raspberrypi.com
State Superseded
Headers show
Series
  • Raspberry Pi: Code refactoring
Related show

Commit Message

Naushir Patuck April 26, 2023, 1:10 p.m. UTC
Split the Raspberry Pi IPA code into common and VC4/BCM2835 specific
file structures.

The common code files now live in src/ipa/rpi/{cam_helper,controller}/
and the vc4 specific files in src/ipa/rpi/vc4/.

To build the IPA, the meson configuration option to select
the Raspberry Pi IPA has now changed from "raspberrypi" to
"rpi/vc4":

meson setup build --Dipas=rpi/vc4

With this change, the camera tuning files are now installed under
share/libcamera/ipa/rpi/vc4/

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
---
 Documentation/environment_variables.rst       |  2 +-
 meson_options.txt                             |  2 +-
 src/ipa/meson.build                           | 10 +++
 src/ipa/raspberrypi/meson.build               | 66 -------------------
 src/ipa/{raspberrypi => rpi}/README.md        |  0
 .../cam_helper}/cam_helper.cpp                |  0
 .../cam_helper}/cam_helper.h                  |  2 +-
 .../cam_helper}/cam_helper_imx219.cpp         |  0
 .../cam_helper}/cam_helper_imx290.cpp         |  0
 .../cam_helper}/cam_helper_imx296.cpp         |  0
 .../cam_helper}/cam_helper_imx477.cpp         |  0
 .../cam_helper}/cam_helper_imx519.cpp         |  0
 .../cam_helper}/cam_helper_imx708.cpp         |  0
 .../cam_helper}/cam_helper_ov5647.cpp         |  0
 .../cam_helper}/cam_helper_ov9281.cpp         |  0
 .../cam_helper}/md_parser.h                   |  0
 .../cam_helper}/md_parser_smia.cpp            |  0
 src/ipa/rpi/cam_helper/meson.build            | 14 ++++
 .../controller/af_algorithm.h                 |  0
 .../controller/af_status.h                    |  0
 .../controller/agc_algorithm.h                |  0
 .../controller/agc_status.h                   |  0
 .../controller/algorithm.cpp                  |  0
 .../controller/algorithm.h                    |  0
 .../controller/alsc_status.h                  |  0
 .../controller/awb_algorithm.h                |  0
 .../controller/awb_status.h                   |  0
 .../controller/black_level_status.h           |  0
 .../controller/camera_mode.h                  |  0
 .../controller/ccm_algorithm.h                |  0
 .../controller/ccm_status.h                   |  0
 .../controller/contrast_algorithm.h           |  0
 .../controller/contrast_status.h              |  0
 .../controller/controller.cpp                 |  0
 .../controller/controller.h                   |  0
 .../controller/denoise_algorithm.h            |  0
 .../controller/denoise_status.h               |  0
 .../controller/device_status.cpp              |  0
 .../controller/device_status.h                |  0
 .../controller/dpc_status.h                   |  0
 .../controller/geq_status.h                   |  0
 .../controller/histogram.cpp                  |  0
 .../controller/histogram.h                    |  0
 .../controller/lux_status.h                   |  0
 src/ipa/rpi/controller/meson.build            | 22 +++++++
 .../controller/metadata.h                     |  0
 .../controller/noise_status.h                 |  0
 .../controller/pdaf_data.h                    |  0
 .../{raspberrypi => rpi}/controller/pwl.cpp   |  0
 src/ipa/{raspberrypi => rpi}/controller/pwl.h |  0
 .../controller/region_stats.h                 |  0
 .../controller/rpi/af.cpp                     |  0
 .../{raspberrypi => rpi}/controller/rpi/af.h  |  0
 .../controller/rpi/agc.cpp                    |  0
 .../{raspberrypi => rpi}/controller/rpi/agc.h |  0
 .../controller/rpi/alsc.cpp                   |  0
 .../controller/rpi/alsc.h                     |  0
 .../controller/rpi/awb.cpp                    |  0
 .../{raspberrypi => rpi}/controller/rpi/awb.h |  0
 .../controller/rpi/black_level.cpp            |  0
 .../controller/rpi/black_level.h              |  0
 .../controller/rpi/ccm.cpp                    |  0
 .../{raspberrypi => rpi}/controller/rpi/ccm.h |  0
 .../controller/rpi/contrast.cpp               |  0
 .../controller/rpi/contrast.h                 |  0
 .../controller/rpi/dpc.cpp                    |  0
 .../{raspberrypi => rpi}/controller/rpi/dpc.h |  0
 .../controller/rpi/focus.h                    |  0
 .../controller/rpi/geq.cpp                    |  0
 .../{raspberrypi => rpi}/controller/rpi/geq.h |  0
 .../controller/rpi/lux.cpp                    |  0
 .../{raspberrypi => rpi}/controller/rpi/lux.h |  0
 .../controller/rpi/noise.cpp                  |  0
 .../controller/rpi/noise.h                    |  0
 .../controller/rpi/sdn.cpp                    |  0
 .../{raspberrypi => rpi}/controller/rpi/sdn.h |  0
 .../controller/rpi/sharpen.cpp                |  0
 .../controller/rpi/sharpen.h                  |  0
 .../controller/sharpen_algorithm.h            |  0
 .../controller/sharpen_status.h               |  0
 .../controller}/statistics.h                  |  0
 .../{raspberrypi => rpi/vc4}/data/imx219.json |  0
 .../vc4}/data/imx219_noir.json                |  0
 .../{raspberrypi => rpi/vc4}/data/imx290.json |  0
 .../{raspberrypi => rpi/vc4}/data/imx296.json |  0
 .../vc4}/data/imx296_mono.json                |  0
 .../{raspberrypi => rpi/vc4}/data/imx378.json |  0
 .../{raspberrypi => rpi/vc4}/data/imx477.json |  0
 .../vc4}/data/imx477_noir.json                |  0
 .../vc4}/data/imx477_scientific.json          |  0
 .../vc4}/data/imx477_v1.json                  |  0
 .../{raspberrypi => rpi/vc4}/data/imx519.json |  0
 .../{raspberrypi => rpi/vc4}/data/imx708.json |  0
 .../vc4}/data/imx708_noir.json                |  0
 .../vc4}/data/imx708_wide.json                |  0
 .../vc4}/data/imx708_wide_noir.json           |  0
 .../{raspberrypi => rpi/vc4}/data/meson.build |  2 +-
 .../{raspberrypi => rpi/vc4}/data/ov5647.json |  0
 .../vc4}/data/ov5647_noir.json                |  0
 .../vc4}/data/ov9281_mono.json                |  0
 .../vc4}/data/se327m12.json                   |  0
 .../vc4}/data/uncalibrated.json               |  0
 src/ipa/rpi/vc4/meson.build                   | 40 +++++++++++
 .../{raspberrypi => rpi/vc4}/raspberrypi.cpp  | 48 +++++++-------
 .../pipeline/rpi/vc4/raspberrypi.cpp          |  2 +-
 105 files changed, 115 insertions(+), 95 deletions(-)
 delete mode 100644 src/ipa/raspberrypi/meson.build
 rename src/ipa/{raspberrypi => rpi}/README.md (100%)
 rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper.cpp (100%)
 rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper.h (99%)
 rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx219.cpp (100%)
 rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx290.cpp (100%)
 rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx296.cpp (100%)
 rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx477.cpp (100%)
 rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx519.cpp (100%)
 rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx708.cpp (100%)
 rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_ov5647.cpp (100%)
 rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_ov9281.cpp (100%)
 rename src/ipa/{raspberrypi => rpi/cam_helper}/md_parser.h (100%)
 rename src/ipa/{raspberrypi => rpi/cam_helper}/md_parser_smia.cpp (100%)
 create mode 100644 src/ipa/rpi/cam_helper/meson.build
 rename src/ipa/{raspberrypi => rpi}/controller/af_algorithm.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/af_status.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/agc_algorithm.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/agc_status.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/algorithm.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/algorithm.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/alsc_status.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/awb_algorithm.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/awb_status.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/black_level_status.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/camera_mode.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/ccm_algorithm.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/ccm_status.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/contrast_algorithm.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/contrast_status.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/controller.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/controller.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/denoise_algorithm.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/denoise_status.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/device_status.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/device_status.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/dpc_status.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/geq_status.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/histogram.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/histogram.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/lux_status.h (100%)
 create mode 100644 src/ipa/rpi/controller/meson.build
 rename src/ipa/{raspberrypi => rpi}/controller/metadata.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/noise_status.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/pdaf_data.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/pwl.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/pwl.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/region_stats.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/af.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/af.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/agc.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/agc.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/alsc.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/alsc.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/awb.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/awb.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/black_level.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/black_level.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/ccm.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/ccm.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/contrast.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/contrast.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/dpc.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/dpc.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/focus.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/geq.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/geq.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/lux.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/lux.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/noise.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/noise.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/sdn.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/sdn.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/sharpen.cpp (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/rpi/sharpen.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/sharpen_algorithm.h (100%)
 rename src/ipa/{raspberrypi => rpi}/controller/sharpen_status.h (100%)
 rename src/ipa/{raspberrypi => rpi/controller}/statistics.h (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx219.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx219_noir.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx290.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx296.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx296_mono.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx378.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_noir.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_scientific.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_v1.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx519.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_noir.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_wide.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_wide_noir.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/meson.build (89%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/ov5647.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/ov5647_noir.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/ov9281_mono.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/se327m12.json (100%)
 rename src/ipa/{raspberrypi => rpi/vc4}/data/uncalibrated.json (100%)
 create mode 100644 src/ipa/rpi/vc4/meson.build
 rename src/ipa/{raspberrypi => rpi/vc4}/raspberrypi.cpp (98%)

Comments

Jacopo Mondi April 27, 2023, 8:29 a.m. UTC | #1
Hi Naush

On Wed, Apr 26, 2023 at 02:10:48PM +0100, Naushir Patuck via libcamera-devel wrote:
> Split the Raspberry Pi IPA code into common and VC4/BCM2835 specific
> file structures.
>
> The common code files now live in src/ipa/rpi/{cam_helper,controller}/
> and the vc4 specific files in src/ipa/rpi/vc4/.
>
> To build the IPA, the meson configuration option to select
> the Raspberry Pi IPA has now changed from "raspberrypi" to
> "rpi/vc4":
>
> meson setup build --Dipas=rpi/vc4
>
> With this change, the camera tuning files are now installed under
> share/libcamera/ipa/rpi/vc4/
>
> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>

Looks good
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>

Thanks
  j

> ---
>  Documentation/environment_variables.rst       |  2 +-
>  meson_options.txt                             |  2 +-
>  src/ipa/meson.build                           | 10 +++
>  src/ipa/raspberrypi/meson.build               | 66 -------------------
>  src/ipa/{raspberrypi => rpi}/README.md        |  0
>  .../cam_helper}/cam_helper.cpp                |  0
>  .../cam_helper}/cam_helper.h                  |  2 +-
>  .../cam_helper}/cam_helper_imx219.cpp         |  0
>  .../cam_helper}/cam_helper_imx290.cpp         |  0
>  .../cam_helper}/cam_helper_imx296.cpp         |  0
>  .../cam_helper}/cam_helper_imx477.cpp         |  0
>  .../cam_helper}/cam_helper_imx519.cpp         |  0
>  .../cam_helper}/cam_helper_imx708.cpp         |  0
>  .../cam_helper}/cam_helper_ov5647.cpp         |  0
>  .../cam_helper}/cam_helper_ov9281.cpp         |  0
>  .../cam_helper}/md_parser.h                   |  0
>  .../cam_helper}/md_parser_smia.cpp            |  0
>  src/ipa/rpi/cam_helper/meson.build            | 14 ++++
>  .../controller/af_algorithm.h                 |  0
>  .../controller/af_status.h                    |  0
>  .../controller/agc_algorithm.h                |  0
>  .../controller/agc_status.h                   |  0
>  .../controller/algorithm.cpp                  |  0
>  .../controller/algorithm.h                    |  0
>  .../controller/alsc_status.h                  |  0
>  .../controller/awb_algorithm.h                |  0
>  .../controller/awb_status.h                   |  0
>  .../controller/black_level_status.h           |  0
>  .../controller/camera_mode.h                  |  0
>  .../controller/ccm_algorithm.h                |  0
>  .../controller/ccm_status.h                   |  0
>  .../controller/contrast_algorithm.h           |  0
>  .../controller/contrast_status.h              |  0
>  .../controller/controller.cpp                 |  0
>  .../controller/controller.h                   |  0
>  .../controller/denoise_algorithm.h            |  0
>  .../controller/denoise_status.h               |  0
>  .../controller/device_status.cpp              |  0
>  .../controller/device_status.h                |  0
>  .../controller/dpc_status.h                   |  0
>  .../controller/geq_status.h                   |  0
>  .../controller/histogram.cpp                  |  0
>  .../controller/histogram.h                    |  0
>  .../controller/lux_status.h                   |  0
>  src/ipa/rpi/controller/meson.build            | 22 +++++++
>  .../controller/metadata.h                     |  0
>  .../controller/noise_status.h                 |  0
>  .../controller/pdaf_data.h                    |  0
>  .../{raspberrypi => rpi}/controller/pwl.cpp   |  0
>  src/ipa/{raspberrypi => rpi}/controller/pwl.h |  0
>  .../controller/region_stats.h                 |  0
>  .../controller/rpi/af.cpp                     |  0
>  .../{raspberrypi => rpi}/controller/rpi/af.h  |  0
>  .../controller/rpi/agc.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/agc.h |  0
>  .../controller/rpi/alsc.cpp                   |  0
>  .../controller/rpi/alsc.h                     |  0
>  .../controller/rpi/awb.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/awb.h |  0
>  .../controller/rpi/black_level.cpp            |  0
>  .../controller/rpi/black_level.h              |  0
>  .../controller/rpi/ccm.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/ccm.h |  0
>  .../controller/rpi/contrast.cpp               |  0
>  .../controller/rpi/contrast.h                 |  0
>  .../controller/rpi/dpc.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/dpc.h |  0
>  .../controller/rpi/focus.h                    |  0
>  .../controller/rpi/geq.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/geq.h |  0
>  .../controller/rpi/lux.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/lux.h |  0
>  .../controller/rpi/noise.cpp                  |  0
>  .../controller/rpi/noise.h                    |  0
>  .../controller/rpi/sdn.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/sdn.h |  0
>  .../controller/rpi/sharpen.cpp                |  0
>  .../controller/rpi/sharpen.h                  |  0
>  .../controller/sharpen_algorithm.h            |  0
>  .../controller/sharpen_status.h               |  0
>  .../controller}/statistics.h                  |  0
>  .../{raspberrypi => rpi/vc4}/data/imx219.json |  0
>  .../vc4}/data/imx219_noir.json                |  0
>  .../{raspberrypi => rpi/vc4}/data/imx290.json |  0
>  .../{raspberrypi => rpi/vc4}/data/imx296.json |  0
>  .../vc4}/data/imx296_mono.json                |  0
>  .../{raspberrypi => rpi/vc4}/data/imx378.json |  0
>  .../{raspberrypi => rpi/vc4}/data/imx477.json |  0
>  .../vc4}/data/imx477_noir.json                |  0
>  .../vc4}/data/imx477_scientific.json          |  0
>  .../vc4}/data/imx477_v1.json                  |  0
>  .../{raspberrypi => rpi/vc4}/data/imx519.json |  0
>  .../{raspberrypi => rpi/vc4}/data/imx708.json |  0
>  .../vc4}/data/imx708_noir.json                |  0
>  .../vc4}/data/imx708_wide.json                |  0
>  .../vc4}/data/imx708_wide_noir.json           |  0
>  .../{raspberrypi => rpi/vc4}/data/meson.build |  2 +-
>  .../{raspberrypi => rpi/vc4}/data/ov5647.json |  0
>  .../vc4}/data/ov5647_noir.json                |  0
>  .../vc4}/data/ov9281_mono.json                |  0
>  .../vc4}/data/se327m12.json                   |  0
>  .../vc4}/data/uncalibrated.json               |  0
>  src/ipa/rpi/vc4/meson.build                   | 40 +++++++++++
>  .../{raspberrypi => rpi/vc4}/raspberrypi.cpp  | 48 +++++++-------
>  .../pipeline/rpi/vc4/raspberrypi.cpp          |  2 +-
>  105 files changed, 115 insertions(+), 95 deletions(-)
>  delete mode 100644 src/ipa/raspberrypi/meson.build
>  rename src/ipa/{raspberrypi => rpi}/README.md (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper.h (99%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx219.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx290.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx296.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx477.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx519.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx708.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_ov5647.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_ov9281.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/md_parser.h (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/md_parser_smia.cpp (100%)
>  create mode 100644 src/ipa/rpi/cam_helper/meson.build
>  rename src/ipa/{raspberrypi => rpi}/controller/af_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/af_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/agc_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/agc_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/algorithm.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/alsc_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/awb_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/awb_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/black_level_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/camera_mode.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/ccm_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/ccm_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/contrast_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/contrast_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/controller.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/controller.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/denoise_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/denoise_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/device_status.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/device_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/dpc_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/geq_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/histogram.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/histogram.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/lux_status.h (100%)
>  create mode 100644 src/ipa/rpi/controller/meson.build
>  rename src/ipa/{raspberrypi => rpi}/controller/metadata.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/noise_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/pdaf_data.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/pwl.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/pwl.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/region_stats.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/af.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/af.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/agc.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/agc.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/alsc.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/alsc.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/awb.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/awb.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/black_level.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/black_level.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/ccm.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/ccm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/contrast.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/contrast.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/dpc.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/dpc.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/focus.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/geq.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/geq.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/lux.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/lux.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/noise.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/noise.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sdn.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sdn.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sharpen.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sharpen.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/sharpen_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/sharpen_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi/controller}/statistics.h (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx219.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx219_noir.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx290.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx296.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx296_mono.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx378.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_noir.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_scientific.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_v1.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx519.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_noir.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_wide.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_wide_noir.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/meson.build (89%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/ov5647.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/ov5647_noir.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/ov9281_mono.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/se327m12.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/uncalibrated.json (100%)
>  create mode 100644 src/ipa/rpi/vc4/meson.build
>  rename src/ipa/{raspberrypi => rpi/vc4}/raspberrypi.cpp (98%)
>
> diff --git a/Documentation/environment_variables.rst b/Documentation/environment_variables.rst
> index 4bf38b877897..888707785ee1 100644
> --- a/Documentation/environment_variables.rst
> +++ b/Documentation/environment_variables.rst
> @@ -143,7 +143,7 @@ contain tuning parameters for the algorithms, in JSON format.
>  The ``LIBCAMERA_IPA_CONFIG_PATH`` variable can be used to specify custom
>  storage locations to search for those configuration files.
>
> -`Examples <https://git.libcamera.org/libcamera/libcamera.git/tree/src/ipa/raspberrypi/data>`__
> +`Examples <https://git.libcamera.org/libcamera/libcamera.git/tree/src/ipa/rpi/data>`__
>
>  IPA module
>  ~~~~~~~~~~
> diff --git a/meson_options.txt b/meson_options.txt
> index e1f4c205aa94..596f813ea5e5 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -27,7 +27,7 @@ option('gstreamer',
>
>  option('ipas',
>          type : 'array',
> -        choices : ['ipu3', 'raspberrypi', 'rkisp1', 'vimc'],
> +        choices : ['ipu3', 'rpi/vc4', 'rkisp1', 'vimc'],
>          description : 'Select which IPA modules to build')
>
>  option('lc-compliance',
> diff --git a/src/ipa/meson.build b/src/ipa/meson.build
> index 76ad5b445601..10d3b44ca7b6 100644
> --- a/src/ipa/meson.build
> +++ b/src/ipa/meson.build
> @@ -37,6 +37,16 @@ endif
>
>  enabled_ipa_modules = []
>
> +# If the Raspberry Pi VC4 IPA is enabled, ensure we include the  rpi/cam_helper
> +# and rpi/controller subdirectories in the build.
> +#
> +# This is done here and not within rpi/vc4/meson.build as meson does not
> +# allow the subdir command to traverse up the directory tree.
> +if pipelines.contains('rpi/vc4')
> +    subdir('rpi/cam_helper')
> +    subdir('rpi/controller')
> +endif
> +
>  # The ipa-sign-install.sh script which uses the ipa_names variable will itself
>  # prepend MESON_INSTALL_DESTDIR_PREFIX to each ipa module name, therefore we
>  # must not include the prefix string here.
> diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build
> deleted file mode 100644
> index de78cbd80f9c..000000000000
> --- a/src/ipa/raspberrypi/meson.build
> +++ /dev/null
> @@ -1,66 +0,0 @@
> -# SPDX-License-Identifier: CC0-1.0
> -
> -ipa_name = 'ipa_rpi'
> -
> -rpi_ipa_deps = [
> -    libcamera_private,
> -    libatomic,
> -]
> -
> -rpi_ipa_includes = [
> -    ipa_includes,
> -    libipa_includes,
> -    include_directories('controller')
> -]
> -
> -rpi_ipa_sources = files([
> -    'raspberrypi.cpp',
> -    'md_parser_smia.cpp',
> -    'cam_helper.cpp',
> -    'cam_helper_ov5647.cpp',
> -    'cam_helper_imx219.cpp',
> -    'cam_helper_imx290.cpp',
> -    'cam_helper_imx296.cpp',
> -    'cam_helper_imx477.cpp',
> -    'cam_helper_imx519.cpp',
> -    'cam_helper_imx708.cpp',
> -    'cam_helper_ov9281.cpp',
> -    'controller/controller.cpp',
> -    'controller/histogram.cpp',
> -    'controller/algorithm.cpp',
> -    'controller/rpi/af.cpp',
> -    'controller/rpi/alsc.cpp',
> -    'controller/rpi/awb.cpp',
> -    'controller/rpi/sharpen.cpp',
> -    'controller/rpi/black_level.cpp',
> -    'controller/rpi/geq.cpp',
> -    'controller/rpi/noise.cpp',
> -    'controller/rpi/lux.cpp',
> -    'controller/rpi/agc.cpp',
> -    'controller/rpi/dpc.cpp',
> -    'controller/rpi/ccm.cpp',
> -    'controller/rpi/contrast.cpp',
> -    'controller/rpi/sdn.cpp',
> -    'controller/pwl.cpp',
> -    'controller/device_status.cpp',
> -])
> -
> -mod = shared_module(ipa_name,
> -                    [rpi_ipa_sources, libcamera_generated_ipa_headers],
> -                    name_prefix : '',
> -                    include_directories : rpi_ipa_includes,
> -                    dependencies : rpi_ipa_deps,
> -                    link_with : libipa,
> -                    install : true,
> -                    install_dir : ipa_install_dir)
> -
> -if ipa_sign_module
> -    custom_target(ipa_name + '.so.sign',
> -                  input : mod,
> -                  output : ipa_name + '.so.sign',
> -                  command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],
> -                  install : false,
> -                  build_by_default : true)
> -endif
> -
> -subdir('data')
> diff --git a/src/ipa/raspberrypi/README.md b/src/ipa/rpi/README.md
> similarity index 100%
> rename from src/ipa/raspberrypi/README.md
> rename to src/ipa/rpi/README.md
> diff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/rpi/cam_helper/cam_helper.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper.h b/src/ipa/rpi/cam_helper/cam_helper.h
> similarity index 99%
> rename from src/ipa/raspberrypi/cam_helper.h
> rename to src/ipa/rpi/cam_helper/cam_helper.h
> index b3f8c9803094..58a4b202d5a8 100644
> --- a/src/ipa/raspberrypi/cam_helper.h
> +++ b/src/ipa/rpi/cam_helper/cam_helper.h
> @@ -13,7 +13,7 @@
>  #include <libcamera/base/span.h>
>  #include <libcamera/base/utils.h>
>
> -#include "camera_mode.h"
> +#include "controller/camera_mode.h"
>  #include "controller/controller.h"
>  #include "controller/metadata.h"
>  #include "md_parser.h"
> diff --git a/src/ipa/raspberrypi/cam_helper_imx219.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx219.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_imx219.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_imx219.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_imx290.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx290.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_imx290.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_imx290.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_imx296.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_imx296.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_imx296.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_imx477.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_imx477.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_imx477.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_imx519.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_imx519.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_imx519.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_imx708.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_imx708.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_imx708.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_ov5647.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_ov5647.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_ov9281.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_ov9281.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp
> diff --git a/src/ipa/raspberrypi/md_parser.h b/src/ipa/rpi/cam_helper/md_parser.h
> similarity index 100%
> rename from src/ipa/raspberrypi/md_parser.h
> rename to src/ipa/rpi/cam_helper/md_parser.h
> diff --git a/src/ipa/raspberrypi/md_parser_smia.cpp b/src/ipa/rpi/cam_helper/md_parser_smia.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/md_parser_smia.cpp
> rename to src/ipa/rpi/cam_helper/md_parser_smia.cpp
> diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build
> new file mode 100644
> index 000000000000..aa42ae91f69d
> --- /dev/null
> +++ b/src/ipa/rpi/cam_helper/meson.build
> @@ -0,0 +1,14 @@
> +# SPDX-License-Identifier: CC0-1.0
> +
> +rpi_ipa_cam_helper_sources = files([
> +    'cam_helper.cpp',
> +    'cam_helper_ov5647.cpp',
> +    'cam_helper_imx219.cpp',
> +    'cam_helper_imx290.cpp',
> +    'cam_helper_imx296.cpp',
> +    'cam_helper_imx477.cpp',
> +    'cam_helper_imx519.cpp',
> +    'cam_helper_imx708.cpp',
> +    'cam_helper_ov9281.cpp',
> +    'md_parser_smia.cpp',
> +])
> diff --git a/src/ipa/raspberrypi/controller/af_algorithm.h b/src/ipa/rpi/controller/af_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/af_algorithm.h
> rename to src/ipa/rpi/controller/af_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/af_status.h b/src/ipa/rpi/controller/af_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/af_status.h
> rename to src/ipa/rpi/controller/af_status.h
> diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.h b/src/ipa/rpi/controller/agc_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/agc_algorithm.h
> rename to src/ipa/rpi/controller/agc_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/agc_status.h b/src/ipa/rpi/controller/agc_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/agc_status.h
> rename to src/ipa/rpi/controller/agc_status.h
> diff --git a/src/ipa/raspberrypi/controller/algorithm.cpp b/src/ipa/rpi/controller/algorithm.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/algorithm.cpp
> rename to src/ipa/rpi/controller/algorithm.cpp
> diff --git a/src/ipa/raspberrypi/controller/algorithm.h b/src/ipa/rpi/controller/algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/algorithm.h
> rename to src/ipa/rpi/controller/algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/alsc_status.h b/src/ipa/rpi/controller/alsc_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/alsc_status.h
> rename to src/ipa/rpi/controller/alsc_status.h
> diff --git a/src/ipa/raspberrypi/controller/awb_algorithm.h b/src/ipa/rpi/controller/awb_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/awb_algorithm.h
> rename to src/ipa/rpi/controller/awb_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/awb_status.h b/src/ipa/rpi/controller/awb_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/awb_status.h
> rename to src/ipa/rpi/controller/awb_status.h
> diff --git a/src/ipa/raspberrypi/controller/black_level_status.h b/src/ipa/rpi/controller/black_level_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/black_level_status.h
> rename to src/ipa/rpi/controller/black_level_status.h
> diff --git a/src/ipa/raspberrypi/controller/camera_mode.h b/src/ipa/rpi/controller/camera_mode.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/camera_mode.h
> rename to src/ipa/rpi/controller/camera_mode.h
> diff --git a/src/ipa/raspberrypi/controller/ccm_algorithm.h b/src/ipa/rpi/controller/ccm_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/ccm_algorithm.h
> rename to src/ipa/rpi/controller/ccm_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/ccm_status.h b/src/ipa/rpi/controller/ccm_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/ccm_status.h
> rename to src/ipa/rpi/controller/ccm_status.h
> diff --git a/src/ipa/raspberrypi/controller/contrast_algorithm.h b/src/ipa/rpi/controller/contrast_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/contrast_algorithm.h
> rename to src/ipa/rpi/controller/contrast_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/contrast_status.h b/src/ipa/rpi/controller/contrast_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/contrast_status.h
> rename to src/ipa/rpi/controller/contrast_status.h
> diff --git a/src/ipa/raspberrypi/controller/controller.cpp b/src/ipa/rpi/controller/controller.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/controller.cpp
> rename to src/ipa/rpi/controller/controller.cpp
> diff --git a/src/ipa/raspberrypi/controller/controller.h b/src/ipa/rpi/controller/controller.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/controller.h
> rename to src/ipa/rpi/controller/controller.h
> diff --git a/src/ipa/raspberrypi/controller/denoise_algorithm.h b/src/ipa/rpi/controller/denoise_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/denoise_algorithm.h
> rename to src/ipa/rpi/controller/denoise_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/denoise_status.h b/src/ipa/rpi/controller/denoise_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/denoise_status.h
> rename to src/ipa/rpi/controller/denoise_status.h
> diff --git a/src/ipa/raspberrypi/controller/device_status.cpp b/src/ipa/rpi/controller/device_status.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/device_status.cpp
> rename to src/ipa/rpi/controller/device_status.cpp
> diff --git a/src/ipa/raspberrypi/controller/device_status.h b/src/ipa/rpi/controller/device_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/device_status.h
> rename to src/ipa/rpi/controller/device_status.h
> diff --git a/src/ipa/raspberrypi/controller/dpc_status.h b/src/ipa/rpi/controller/dpc_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/dpc_status.h
> rename to src/ipa/rpi/controller/dpc_status.h
> diff --git a/src/ipa/raspberrypi/controller/geq_status.h b/src/ipa/rpi/controller/geq_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/geq_status.h
> rename to src/ipa/rpi/controller/geq_status.h
> diff --git a/src/ipa/raspberrypi/controller/histogram.cpp b/src/ipa/rpi/controller/histogram.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/histogram.cpp
> rename to src/ipa/rpi/controller/histogram.cpp
> diff --git a/src/ipa/raspberrypi/controller/histogram.h b/src/ipa/rpi/controller/histogram.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/histogram.h
> rename to src/ipa/rpi/controller/histogram.h
> diff --git a/src/ipa/raspberrypi/controller/lux_status.h b/src/ipa/rpi/controller/lux_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/lux_status.h
> rename to src/ipa/rpi/controller/lux_status.h
> diff --git a/src/ipa/rpi/controller/meson.build b/src/ipa/rpi/controller/meson.build
> new file mode 100644
> index 000000000000..90a67412444e
> --- /dev/null
> +++ b/src/ipa/rpi/controller/meson.build
> @@ -0,0 +1,22 @@
> +# SPDX-License-Identifier: CC0-1.0
> +
> +rpi_ipa_controller_sources = files([
> +    'algorithm.cpp',
> +    'controller.cpp',
> +    'device_status.cpp',
> +    'histogram.cpp',
> +    'pwl.cpp',
> +    'rpi/af.cpp',
> +    'rpi/agc.cpp',
> +    'rpi/alsc.cpp',
> +    'rpi/awb.cpp',
> +    'rpi/black_level.cpp',
> +    'rpi/ccm.cpp',
> +    'rpi/contrast.cpp',
> +    'rpi/dpc.cpp',
> +    'rpi/geq.cpp',
> +    'rpi/lux.cpp',
> +    'rpi/noise.cpp',
> +    'rpi/sdn.cpp',
> +    'rpi/sharpen.cpp',
> +])
> diff --git a/src/ipa/raspberrypi/controller/metadata.h b/src/ipa/rpi/controller/metadata.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/metadata.h
> rename to src/ipa/rpi/controller/metadata.h
> diff --git a/src/ipa/raspberrypi/controller/noise_status.h b/src/ipa/rpi/controller/noise_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/noise_status.h
> rename to src/ipa/rpi/controller/noise_status.h
> diff --git a/src/ipa/raspberrypi/controller/pdaf_data.h b/src/ipa/rpi/controller/pdaf_data.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/pdaf_data.h
> rename to src/ipa/rpi/controller/pdaf_data.h
> diff --git a/src/ipa/raspberrypi/controller/pwl.cpp b/src/ipa/rpi/controller/pwl.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/pwl.cpp
> rename to src/ipa/rpi/controller/pwl.cpp
> diff --git a/src/ipa/raspberrypi/controller/pwl.h b/src/ipa/rpi/controller/pwl.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/pwl.h
> rename to src/ipa/rpi/controller/pwl.h
> diff --git a/src/ipa/raspberrypi/controller/region_stats.h b/src/ipa/rpi/controller/region_stats.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/region_stats.h
> rename to src/ipa/rpi/controller/region_stats.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/af.cpp b/src/ipa/rpi/controller/rpi/af.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/af.cpp
> rename to src/ipa/rpi/controller/rpi/af.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/af.h b/src/ipa/rpi/controller/rpi/af.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/af.h
> rename to src/ipa/rpi/controller/rpi/af.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp b/src/ipa/rpi/controller/rpi/agc.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/agc.cpp
> rename to src/ipa/rpi/controller/rpi/agc.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.h b/src/ipa/rpi/controller/rpi/agc.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/agc.h
> rename to src/ipa/rpi/controller/rpi/agc.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/alsc.cpp b/src/ipa/rpi/controller/rpi/alsc.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/alsc.cpp
> rename to src/ipa/rpi/controller/rpi/alsc.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/alsc.h b/src/ipa/rpi/controller/rpi/alsc.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/alsc.h
> rename to src/ipa/rpi/controller/rpi/alsc.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp b/src/ipa/rpi/controller/rpi/awb.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/awb.cpp
> rename to src/ipa/rpi/controller/rpi/awb.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.h b/src/ipa/rpi/controller/rpi/awb.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/awb.h
> rename to src/ipa/rpi/controller/rpi/awb.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/black_level.cpp b/src/ipa/rpi/controller/rpi/black_level.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/black_level.cpp
> rename to src/ipa/rpi/controller/rpi/black_level.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/black_level.h b/src/ipa/rpi/controller/rpi/black_level.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/black_level.h
> rename to src/ipa/rpi/controller/rpi/black_level.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/ccm.cpp b/src/ipa/rpi/controller/rpi/ccm.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/ccm.cpp
> rename to src/ipa/rpi/controller/rpi/ccm.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/ccm.h b/src/ipa/rpi/controller/rpi/ccm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/ccm.h
> rename to src/ipa/rpi/controller/rpi/ccm.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/contrast.cpp b/src/ipa/rpi/controller/rpi/contrast.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/contrast.cpp
> rename to src/ipa/rpi/controller/rpi/contrast.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/contrast.h b/src/ipa/rpi/controller/rpi/contrast.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/contrast.h
> rename to src/ipa/rpi/controller/rpi/contrast.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/dpc.cpp b/src/ipa/rpi/controller/rpi/dpc.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/dpc.cpp
> rename to src/ipa/rpi/controller/rpi/dpc.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/dpc.h b/src/ipa/rpi/controller/rpi/dpc.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/dpc.h
> rename to src/ipa/rpi/controller/rpi/dpc.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/focus.h b/src/ipa/rpi/controller/rpi/focus.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/focus.h
> rename to src/ipa/rpi/controller/rpi/focus.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/geq.cpp b/src/ipa/rpi/controller/rpi/geq.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/geq.cpp
> rename to src/ipa/rpi/controller/rpi/geq.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/geq.h b/src/ipa/rpi/controller/rpi/geq.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/geq.h
> rename to src/ipa/rpi/controller/rpi/geq.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/lux.cpp b/src/ipa/rpi/controller/rpi/lux.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/lux.cpp
> rename to src/ipa/rpi/controller/rpi/lux.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/lux.h b/src/ipa/rpi/controller/rpi/lux.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/lux.h
> rename to src/ipa/rpi/controller/rpi/lux.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/noise.cpp b/src/ipa/rpi/controller/rpi/noise.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/noise.cpp
> rename to src/ipa/rpi/controller/rpi/noise.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/noise.h b/src/ipa/rpi/controller/rpi/noise.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/noise.h
> rename to src/ipa/rpi/controller/rpi/noise.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/sdn.cpp b/src/ipa/rpi/controller/rpi/sdn.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/sdn.cpp
> rename to src/ipa/rpi/controller/rpi/sdn.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/sdn.h b/src/ipa/rpi/controller/rpi/sdn.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/sdn.h
> rename to src/ipa/rpi/controller/rpi/sdn.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/sharpen.cpp b/src/ipa/rpi/controller/rpi/sharpen.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/sharpen.cpp
> rename to src/ipa/rpi/controller/rpi/sharpen.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/sharpen.h b/src/ipa/rpi/controller/rpi/sharpen.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/sharpen.h
> rename to src/ipa/rpi/controller/rpi/sharpen.h
> diff --git a/src/ipa/raspberrypi/controller/sharpen_algorithm.h b/src/ipa/rpi/controller/sharpen_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/sharpen_algorithm.h
> rename to src/ipa/rpi/controller/sharpen_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/sharpen_status.h b/src/ipa/rpi/controller/sharpen_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/sharpen_status.h
> rename to src/ipa/rpi/controller/sharpen_status.h
> diff --git a/src/ipa/raspberrypi/statistics.h b/src/ipa/rpi/controller/statistics.h
> similarity index 100%
> rename from src/ipa/raspberrypi/statistics.h
> rename to src/ipa/rpi/controller/statistics.h
> diff --git a/src/ipa/raspberrypi/data/imx219.json b/src/ipa/rpi/vc4/data/imx219.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx219.json
> rename to src/ipa/rpi/vc4/data/imx219.json
> diff --git a/src/ipa/raspberrypi/data/imx219_noir.json b/src/ipa/rpi/vc4/data/imx219_noir.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx219_noir.json
> rename to src/ipa/rpi/vc4/data/imx219_noir.json
> diff --git a/src/ipa/raspberrypi/data/imx290.json b/src/ipa/rpi/vc4/data/imx290.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx290.json
> rename to src/ipa/rpi/vc4/data/imx290.json
> diff --git a/src/ipa/raspberrypi/data/imx296.json b/src/ipa/rpi/vc4/data/imx296.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx296.json
> rename to src/ipa/rpi/vc4/data/imx296.json
> diff --git a/src/ipa/raspberrypi/data/imx296_mono.json b/src/ipa/rpi/vc4/data/imx296_mono.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx296_mono.json
> rename to src/ipa/rpi/vc4/data/imx296_mono.json
> diff --git a/src/ipa/raspberrypi/data/imx378.json b/src/ipa/rpi/vc4/data/imx378.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx378.json
> rename to src/ipa/rpi/vc4/data/imx378.json
> diff --git a/src/ipa/raspberrypi/data/imx477.json b/src/ipa/rpi/vc4/data/imx477.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx477.json
> rename to src/ipa/rpi/vc4/data/imx477.json
> diff --git a/src/ipa/raspberrypi/data/imx477_noir.json b/src/ipa/rpi/vc4/data/imx477_noir.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx477_noir.json
> rename to src/ipa/rpi/vc4/data/imx477_noir.json
> diff --git a/src/ipa/raspberrypi/data/imx477_scientific.json b/src/ipa/rpi/vc4/data/imx477_scientific.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx477_scientific.json
> rename to src/ipa/rpi/vc4/data/imx477_scientific.json
> diff --git a/src/ipa/raspberrypi/data/imx477_v1.json b/src/ipa/rpi/vc4/data/imx477_v1.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx477_v1.json
> rename to src/ipa/rpi/vc4/data/imx477_v1.json
> diff --git a/src/ipa/raspberrypi/data/imx519.json b/src/ipa/rpi/vc4/data/imx519.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx519.json
> rename to src/ipa/rpi/vc4/data/imx519.json
> diff --git a/src/ipa/raspberrypi/data/imx708.json b/src/ipa/rpi/vc4/data/imx708.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx708.json
> rename to src/ipa/rpi/vc4/data/imx708.json
> diff --git a/src/ipa/raspberrypi/data/imx708_noir.json b/src/ipa/rpi/vc4/data/imx708_noir.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx708_noir.json
> rename to src/ipa/rpi/vc4/data/imx708_noir.json
> diff --git a/src/ipa/raspberrypi/data/imx708_wide.json b/src/ipa/rpi/vc4/data/imx708_wide.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx708_wide.json
> rename to src/ipa/rpi/vc4/data/imx708_wide.json
> diff --git a/src/ipa/raspberrypi/data/imx708_wide_noir.json b/src/ipa/rpi/vc4/data/imx708_wide_noir.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx708_wide_noir.json
> rename to src/ipa/rpi/vc4/data/imx708_wide_noir.json
> diff --git a/src/ipa/raspberrypi/data/meson.build b/src/ipa/rpi/vc4/data/meson.build
> similarity index 89%
> rename from src/ipa/raspberrypi/data/meson.build
> rename to src/ipa/rpi/vc4/data/meson.build
> index b163a052f57c..327462fa2420 100644
> --- a/src/ipa/raspberrypi/data/meson.build
> +++ b/src/ipa/rpi/vc4/data/meson.build
> @@ -23,4 +23,4 @@ conf_files = files([
>  ])
>
>  install_data(conf_files,
> -             install_dir : ipa_data_dir / 'raspberrypi')
> +             install_dir : ipa_data_dir / 'rpi/vc4')
> diff --git a/src/ipa/raspberrypi/data/ov5647.json b/src/ipa/rpi/vc4/data/ov5647.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/ov5647.json
> rename to src/ipa/rpi/vc4/data/ov5647.json
> diff --git a/src/ipa/raspberrypi/data/ov5647_noir.json b/src/ipa/rpi/vc4/data/ov5647_noir.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/ov5647_noir.json
> rename to src/ipa/rpi/vc4/data/ov5647_noir.json
> diff --git a/src/ipa/raspberrypi/data/ov9281_mono.json b/src/ipa/rpi/vc4/data/ov9281_mono.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/ov9281_mono.json
> rename to src/ipa/rpi/vc4/data/ov9281_mono.json
> diff --git a/src/ipa/raspberrypi/data/se327m12.json b/src/ipa/rpi/vc4/data/se327m12.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/se327m12.json
> rename to src/ipa/rpi/vc4/data/se327m12.json
> diff --git a/src/ipa/raspberrypi/data/uncalibrated.json b/src/ipa/rpi/vc4/data/uncalibrated.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/uncalibrated.json
> rename to src/ipa/rpi/vc4/data/uncalibrated.json
> diff --git a/src/ipa/rpi/vc4/meson.build b/src/ipa/rpi/vc4/meson.build
> new file mode 100644
> index 000000000000..992d0f1ab5a7
> --- /dev/null
> +++ b/src/ipa/rpi/vc4/meson.build
> @@ -0,0 +1,40 @@
> +# SPDX-License-Identifier: CC0-1.0
> +
> +ipa_name = 'ipa_vc4'
> +
> +vc4_ipa_deps = [
> +    libcamera_private,
> +    libatomic,
> +]
> +
> +vc4_ipa_includes = [
> +    ipa_includes,
> +    libipa_includes,
> +]
> +
> +vc4_ipa_sources = files([
> +    'raspberrypi.cpp',
> +])
> +
> +vc4_ipa_includes += include_directories('..')
> +vc4_ipa_sources += [rpi_ipa_cam_helper_sources, rpi_ipa_controller_sources]
> +
> +mod = shared_module(ipa_name,
> +                    [vc4_ipa_sources, libcamera_generated_ipa_headers],
> +                    name_prefix : '',
> +                    include_directories : vc4_ipa_includes,
> +                    dependencies : vc4_ipa_deps,
> +                    link_with : libipa,
> +                    install : true,
> +                    install_dir : ipa_install_dir)
> +
> +if ipa_sign_module
> +    custom_target(ipa_name + '.so.sign',
> +                  input : mod,
> +                  output : ipa_name + '.so.sign',
> +                  command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],
> +                  install : false,
> +                  build_by_default : true)
> +endif
> +
> +subdir('data')
> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/rpi/vc4/raspberrypi.cpp
> similarity index 98%
> rename from src/ipa/raspberrypi/raspberrypi.cpp
> rename to src/ipa/rpi/vc4/raspberrypi.cpp
> index 9c29fa9a5e5c..841635ccde2b 100644
> --- a/src/ipa/raspberrypi/raspberrypi.cpp
> +++ b/src/ipa/rpi/vc4/raspberrypi.cpp
> @@ -33,29 +33,29 @@
>
>  #include "libcamera/internal/mapped_framebuffer.h"
>
> -#include "af_algorithm.h"
> -#include "af_status.h"
> -#include "agc_algorithm.h"
> -#include "agc_status.h"
> -#include "alsc_status.h"
> -#include "awb_algorithm.h"
> -#include "awb_status.h"
> -#include "black_level_status.h"
> -#include "cam_helper.h"
> -#include "ccm_algorithm.h"
> -#include "ccm_status.h"
> -#include "contrast_algorithm.h"
> -#include "contrast_status.h"
> -#include "controller.h"
> -#include "denoise_algorithm.h"
> -#include "denoise_status.h"
> -#include "dpc_status.h"
> -#include "geq_status.h"
> -#include "lux_status.h"
> -#include "metadata.h"
> -#include "sharpen_algorithm.h"
> -#include "sharpen_status.h"
> -#include "statistics.h"
> +#include "cam_helper/cam_helper.h"
> +#include "controller/af_algorithm.h"
> +#include "controller/af_status.h"
> +#include "controller/agc_algorithm.h"
> +#include "controller/agc_status.h"
> +#include "controller/alsc_status.h"
> +#include "controller/awb_algorithm.h"
> +#include "controller/awb_status.h"
> +#include "controller/black_level_status.h"
> +#include "controller/ccm_algorithm.h"
> +#include "controller/ccm_status.h"
> +#include "controller/contrast_algorithm.h"
> +#include "controller/contrast_status.h"
> +#include "controller/controller.h"
> +#include "controller/denoise_algorithm.h"
> +#include "controller/denoise_status.h"
> +#include "controller/dpc_status.h"
> +#include "controller/geq_status.h"
> +#include "controller/lux_status.h"
> +#include "controller/metadata.h"
> +#include "controller/sharpen_algorithm.h"
> +#include "controller/sharpen_status.h"
> +#include "controller/statistics.h"
>
>  namespace libcamera {
>
> @@ -1840,7 +1840,7 @@ const struct IPAModuleInfo ipaModuleInfo = {
>  	IPA_MODULE_API_VERSION,
>  	1,
>  	"PipelineHandlerRPi",
> -	"raspberrypi",
> +	"vc4",
>  };
>
>  IPAInterface *ipaCreate()
> diff --git a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp
> index 4595773d2517..cfde7f2e2229 100644
> --- a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp
> @@ -1668,7 +1668,7 @@ int RPiCameraData::loadIPA(ipa::RPi::IPAInitResult *result)
>  		std::string model = sensor_->model();
>  		if (isMonoSensor(sensor_))
>  			model += "_mono";
> -		configurationFile = ipa_->configurationFile(model + ".json", "");
> +		configurationFile = ipa_->configurationFile(model + ".json", "rpi");
>  	} else {
>  		configurationFile = std::string(configFromEnv);
>  	}
> --
> 2.34.1
>
Laurent Pinchart April 27, 2023, 5:02 p.m. UTC | #2
Hi Naush,

Thank you for the patch.

On Wed, Apr 26, 2023 at 02:10:48PM +0100, Naushir Patuck via libcamera-devel wrote:
> Split the Raspberry Pi IPA code into common and VC4/BCM2835 specific
> file structures.
> 
> The common code files now live in src/ipa/rpi/{cam_helper,controller}/
> and the vc4 specific files in src/ipa/rpi/vc4/.
> 
> To build the IPA, the meson configuration option to select
> the Raspberry Pi IPA has now changed from "raspberrypi" to
> "rpi/vc4":
> 
> meson setup build --Dipas=rpi/vc4
> 
> With this change, the camera tuning files are now installed under
> share/libcamera/ipa/rpi/vc4/
> 
> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
> ---
>  Documentation/environment_variables.rst       |  2 +-
>  meson_options.txt                             |  2 +-
>  src/ipa/meson.build                           | 10 +++
>  src/ipa/raspberrypi/meson.build               | 66 -------------------
>  src/ipa/{raspberrypi => rpi}/README.md        |  0
>  .../cam_helper}/cam_helper.cpp                |  0
>  .../cam_helper}/cam_helper.h                  |  2 +-
>  .../cam_helper}/cam_helper_imx219.cpp         |  0
>  .../cam_helper}/cam_helper_imx290.cpp         |  0
>  .../cam_helper}/cam_helper_imx296.cpp         |  0
>  .../cam_helper}/cam_helper_imx477.cpp         |  0
>  .../cam_helper}/cam_helper_imx519.cpp         |  0
>  .../cam_helper}/cam_helper_imx708.cpp         |  0
>  .../cam_helper}/cam_helper_ov5647.cpp         |  0
>  .../cam_helper}/cam_helper_ov9281.cpp         |  0
>  .../cam_helper}/md_parser.h                   |  0
>  .../cam_helper}/md_parser_smia.cpp            |  0
>  src/ipa/rpi/cam_helper/meson.build            | 14 ++++
>  .../controller/af_algorithm.h                 |  0
>  .../controller/af_status.h                    |  0
>  .../controller/agc_algorithm.h                |  0
>  .../controller/agc_status.h                   |  0
>  .../controller/algorithm.cpp                  |  0
>  .../controller/algorithm.h                    |  0
>  .../controller/alsc_status.h                  |  0
>  .../controller/awb_algorithm.h                |  0
>  .../controller/awb_status.h                   |  0
>  .../controller/black_level_status.h           |  0
>  .../controller/camera_mode.h                  |  0
>  .../controller/ccm_algorithm.h                |  0
>  .../controller/ccm_status.h                   |  0
>  .../controller/contrast_algorithm.h           |  0
>  .../controller/contrast_status.h              |  0
>  .../controller/controller.cpp                 |  0
>  .../controller/controller.h                   |  0
>  .../controller/denoise_algorithm.h            |  0
>  .../controller/denoise_status.h               |  0
>  .../controller/device_status.cpp              |  0
>  .../controller/device_status.h                |  0
>  .../controller/dpc_status.h                   |  0
>  .../controller/geq_status.h                   |  0
>  .../controller/histogram.cpp                  |  0
>  .../controller/histogram.h                    |  0
>  .../controller/lux_status.h                   |  0
>  src/ipa/rpi/controller/meson.build            | 22 +++++++
>  .../controller/metadata.h                     |  0
>  .../controller/noise_status.h                 |  0
>  .../controller/pdaf_data.h                    |  0
>  .../{raspberrypi => rpi}/controller/pwl.cpp   |  0
>  src/ipa/{raspberrypi => rpi}/controller/pwl.h |  0
>  .../controller/region_stats.h                 |  0
>  .../controller/rpi/af.cpp                     |  0
>  .../{raspberrypi => rpi}/controller/rpi/af.h  |  0
>  .../controller/rpi/agc.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/agc.h |  0
>  .../controller/rpi/alsc.cpp                   |  0
>  .../controller/rpi/alsc.h                     |  0
>  .../controller/rpi/awb.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/awb.h |  0
>  .../controller/rpi/black_level.cpp            |  0
>  .../controller/rpi/black_level.h              |  0
>  .../controller/rpi/ccm.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/ccm.h |  0
>  .../controller/rpi/contrast.cpp               |  0
>  .../controller/rpi/contrast.h                 |  0
>  .../controller/rpi/dpc.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/dpc.h |  0
>  .../controller/rpi/focus.h                    |  0
>  .../controller/rpi/geq.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/geq.h |  0
>  .../controller/rpi/lux.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/lux.h |  0
>  .../controller/rpi/noise.cpp                  |  0
>  .../controller/rpi/noise.h                    |  0
>  .../controller/rpi/sdn.cpp                    |  0
>  .../{raspberrypi => rpi}/controller/rpi/sdn.h |  0
>  .../controller/rpi/sharpen.cpp                |  0
>  .../controller/rpi/sharpen.h                  |  0
>  .../controller/sharpen_algorithm.h            |  0
>  .../controller/sharpen_status.h               |  0
>  .../controller}/statistics.h                  |  0
>  .../{raspberrypi => rpi/vc4}/data/imx219.json |  0
>  .../vc4}/data/imx219_noir.json                |  0
>  .../{raspberrypi => rpi/vc4}/data/imx290.json |  0
>  .../{raspberrypi => rpi/vc4}/data/imx296.json |  0
>  .../vc4}/data/imx296_mono.json                |  0
>  .../{raspberrypi => rpi/vc4}/data/imx378.json |  0
>  .../{raspberrypi => rpi/vc4}/data/imx477.json |  0
>  .../vc4}/data/imx477_noir.json                |  0
>  .../vc4}/data/imx477_scientific.json          |  0
>  .../vc4}/data/imx477_v1.json                  |  0
>  .../{raspberrypi => rpi/vc4}/data/imx519.json |  0
>  .../{raspberrypi => rpi/vc4}/data/imx708.json |  0
>  .../vc4}/data/imx708_noir.json                |  0
>  .../vc4}/data/imx708_wide.json                |  0
>  .../vc4}/data/imx708_wide_noir.json           |  0
>  .../{raspberrypi => rpi/vc4}/data/meson.build |  2 +-
>  .../{raspberrypi => rpi/vc4}/data/ov5647.json |  0
>  .../vc4}/data/ov5647_noir.json                |  0
>  .../vc4}/data/ov9281_mono.json                |  0
>  .../vc4}/data/se327m12.json                   |  0
>  .../vc4}/data/uncalibrated.json               |  0
>  src/ipa/rpi/vc4/meson.build                   | 40 +++++++++++
>  .../{raspberrypi => rpi/vc4}/raspberrypi.cpp  | 48 +++++++-------
>  .../pipeline/rpi/vc4/raspberrypi.cpp          |  2 +-
>  105 files changed, 115 insertions(+), 95 deletions(-)
>  delete mode 100644 src/ipa/raspberrypi/meson.build
>  rename src/ipa/{raspberrypi => rpi}/README.md (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper.h (99%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx219.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx290.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx296.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx477.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx519.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_imx708.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_ov5647.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/cam_helper_ov9281.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/md_parser.h (100%)
>  rename src/ipa/{raspberrypi => rpi/cam_helper}/md_parser_smia.cpp (100%)
>  create mode 100644 src/ipa/rpi/cam_helper/meson.build
>  rename src/ipa/{raspberrypi => rpi}/controller/af_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/af_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/agc_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/agc_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/algorithm.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/alsc_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/awb_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/awb_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/black_level_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/camera_mode.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/ccm_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/ccm_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/contrast_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/contrast_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/controller.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/controller.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/denoise_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/denoise_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/device_status.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/device_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/dpc_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/geq_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/histogram.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/histogram.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/lux_status.h (100%)
>  create mode 100644 src/ipa/rpi/controller/meson.build
>  rename src/ipa/{raspberrypi => rpi}/controller/metadata.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/noise_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/pdaf_data.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/pwl.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/pwl.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/region_stats.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/af.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/af.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/agc.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/agc.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/alsc.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/alsc.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/awb.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/awb.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/black_level.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/black_level.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/ccm.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/ccm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/contrast.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/contrast.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/dpc.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/dpc.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/focus.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/geq.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/geq.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/lux.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/lux.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/noise.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/noise.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sdn.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sdn.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sharpen.cpp (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/rpi/sharpen.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/sharpen_algorithm.h (100%)
>  rename src/ipa/{raspberrypi => rpi}/controller/sharpen_status.h (100%)
>  rename src/ipa/{raspberrypi => rpi/controller}/statistics.h (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx219.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx219_noir.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx290.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx296.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx296_mono.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx378.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_noir.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_scientific.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx477_v1.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx519.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_noir.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_wide.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/imx708_wide_noir.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/meson.build (89%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/ov5647.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/ov5647_noir.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/ov9281_mono.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/se327m12.json (100%)
>  rename src/ipa/{raspberrypi => rpi/vc4}/data/uncalibrated.json (100%)
>  create mode 100644 src/ipa/rpi/vc4/meson.build
>  rename src/ipa/{raspberrypi => rpi/vc4}/raspberrypi.cpp (98%)
> 
> diff --git a/Documentation/environment_variables.rst b/Documentation/environment_variables.rst
> index 4bf38b877897..888707785ee1 100644
> --- a/Documentation/environment_variables.rst
> +++ b/Documentation/environment_variables.rst
> @@ -143,7 +143,7 @@ contain tuning parameters for the algorithms, in JSON format.
>  The ``LIBCAMERA_IPA_CONFIG_PATH`` variable can be used to specify custom
>  storage locations to search for those configuration files.
>  
> -`Examples <https://git.libcamera.org/libcamera/libcamera.git/tree/src/ipa/raspberrypi/data>`__
> +`Examples <https://git.libcamera.org/libcamera/libcamera.git/tree/src/ipa/rpi/data>`__

Shouldn't this be rpi/vc4/data ?

>  
>  IPA module
>  ~~~~~~~~~~
> diff --git a/meson_options.txt b/meson_options.txt
> index e1f4c205aa94..596f813ea5e5 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -27,7 +27,7 @@ option('gstreamer',
>  
>  option('ipas',
>          type : 'array',
> -        choices : ['ipu3', 'raspberrypi', 'rkisp1', 'vimc'],
> +        choices : ['ipu3', 'rpi/vc4', 'rkisp1', 'vimc'],
>          description : 'Select which IPA modules to build')
>  
>  option('lc-compliance',
> diff --git a/src/ipa/meson.build b/src/ipa/meson.build
> index 76ad5b445601..10d3b44ca7b6 100644
> --- a/src/ipa/meson.build
> +++ b/src/ipa/meson.build
> @@ -37,6 +37,16 @@ endif
>  
>  enabled_ipa_modules = []
>  
> +# If the Raspberry Pi VC4 IPA is enabled, ensure we include the  rpi/cam_helper
> +# and rpi/controller subdirectories in the build.
> +#
> +# This is done here and not within rpi/vc4/meson.build as meson does not
> +# allow the subdir command to traverse up the directory tree.
> +if pipelines.contains('rpi/vc4')
> +    subdir('rpi/cam_helper')
> +    subdir('rpi/controller')
> +endif

This should be handled more generically, see my review of patch 03/13.
I'll try to propose an implementation, likely on Monday.

> +
>  # The ipa-sign-install.sh script which uses the ipa_names variable will itself
>  # prepend MESON_INSTALL_DESTDIR_PREFIX to each ipa module name, therefore we
>  # must not include the prefix string here.
> diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build
> deleted file mode 100644
> index de78cbd80f9c..000000000000
> --- a/src/ipa/raspberrypi/meson.build
> +++ /dev/null
> @@ -1,66 +0,0 @@
> -# SPDX-License-Identifier: CC0-1.0
> -
> -ipa_name = 'ipa_rpi'
> -
> -rpi_ipa_deps = [
> -    libcamera_private,
> -    libatomic,
> -]
> -
> -rpi_ipa_includes = [
> -    ipa_includes,
> -    libipa_includes,
> -    include_directories('controller')
> -]
> -
> -rpi_ipa_sources = files([
> -    'raspberrypi.cpp',
> -    'md_parser_smia.cpp',
> -    'cam_helper.cpp',
> -    'cam_helper_ov5647.cpp',
> -    'cam_helper_imx219.cpp',
> -    'cam_helper_imx290.cpp',
> -    'cam_helper_imx296.cpp',
> -    'cam_helper_imx477.cpp',
> -    'cam_helper_imx519.cpp',
> -    'cam_helper_imx708.cpp',
> -    'cam_helper_ov9281.cpp',
> -    'controller/controller.cpp',
> -    'controller/histogram.cpp',
> -    'controller/algorithm.cpp',
> -    'controller/rpi/af.cpp',
> -    'controller/rpi/alsc.cpp',
> -    'controller/rpi/awb.cpp',
> -    'controller/rpi/sharpen.cpp',
> -    'controller/rpi/black_level.cpp',
> -    'controller/rpi/geq.cpp',
> -    'controller/rpi/noise.cpp',
> -    'controller/rpi/lux.cpp',
> -    'controller/rpi/agc.cpp',
> -    'controller/rpi/dpc.cpp',
> -    'controller/rpi/ccm.cpp',
> -    'controller/rpi/contrast.cpp',
> -    'controller/rpi/sdn.cpp',
> -    'controller/pwl.cpp',
> -    'controller/device_status.cpp',
> -])
> -
> -mod = shared_module(ipa_name,
> -                    [rpi_ipa_sources, libcamera_generated_ipa_headers],
> -                    name_prefix : '',
> -                    include_directories : rpi_ipa_includes,
> -                    dependencies : rpi_ipa_deps,
> -                    link_with : libipa,
> -                    install : true,
> -                    install_dir : ipa_install_dir)
> -
> -if ipa_sign_module
> -    custom_target(ipa_name + '.so.sign',
> -                  input : mod,
> -                  output : ipa_name + '.so.sign',
> -                  command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],
> -                  install : false,
> -                  build_by_default : true)
> -endif
> -
> -subdir('data')
> diff --git a/src/ipa/raspberrypi/README.md b/src/ipa/rpi/README.md
> similarity index 100%
> rename from src/ipa/raspberrypi/README.md
> rename to src/ipa/rpi/README.md
> diff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/rpi/cam_helper/cam_helper.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper.h b/src/ipa/rpi/cam_helper/cam_helper.h
> similarity index 99%
> rename from src/ipa/raspberrypi/cam_helper.h
> rename to src/ipa/rpi/cam_helper/cam_helper.h
> index b3f8c9803094..58a4b202d5a8 100644
> --- a/src/ipa/raspberrypi/cam_helper.h
> +++ b/src/ipa/rpi/cam_helper/cam_helper.h
> @@ -13,7 +13,7 @@
>  #include <libcamera/base/span.h>
>  #include <libcamera/base/utils.h>
>  
> -#include "camera_mode.h"
> +#include "controller/camera_mode.h"
>  #include "controller/controller.h"
>  #include "controller/metadata.h"
>  #include "md_parser.h"
> diff --git a/src/ipa/raspberrypi/cam_helper_imx219.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx219.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_imx219.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_imx219.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_imx290.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx290.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_imx290.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_imx290.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_imx296.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_imx296.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_imx296.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_imx477.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_imx477.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_imx477.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_imx519.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_imx519.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_imx519.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_imx708.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_imx708.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_imx708.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_ov5647.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_ov5647.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp
> diff --git a/src/ipa/raspberrypi/cam_helper_ov9281.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/cam_helper_ov9281.cpp
> rename to src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp
> diff --git a/src/ipa/raspberrypi/md_parser.h b/src/ipa/rpi/cam_helper/md_parser.h
> similarity index 100%
> rename from src/ipa/raspberrypi/md_parser.h
> rename to src/ipa/rpi/cam_helper/md_parser.h
> diff --git a/src/ipa/raspberrypi/md_parser_smia.cpp b/src/ipa/rpi/cam_helper/md_parser_smia.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/md_parser_smia.cpp
> rename to src/ipa/rpi/cam_helper/md_parser_smia.cpp
> diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build
> new file mode 100644
> index 000000000000..aa42ae91f69d
> --- /dev/null
> +++ b/src/ipa/rpi/cam_helper/meson.build
> @@ -0,0 +1,14 @@
> +# SPDX-License-Identifier: CC0-1.0
> +
> +rpi_ipa_cam_helper_sources = files([
> +    'cam_helper.cpp',
> +    'cam_helper_ov5647.cpp',
> +    'cam_helper_imx219.cpp',
> +    'cam_helper_imx290.cpp',
> +    'cam_helper_imx296.cpp',
> +    'cam_helper_imx477.cpp',
> +    'cam_helper_imx519.cpp',
> +    'cam_helper_imx708.cpp',
> +    'cam_helper_ov9281.cpp',
> +    'md_parser_smia.cpp',
> +])
> diff --git a/src/ipa/raspberrypi/controller/af_algorithm.h b/src/ipa/rpi/controller/af_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/af_algorithm.h
> rename to src/ipa/rpi/controller/af_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/af_status.h b/src/ipa/rpi/controller/af_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/af_status.h
> rename to src/ipa/rpi/controller/af_status.h
> diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.h b/src/ipa/rpi/controller/agc_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/agc_algorithm.h
> rename to src/ipa/rpi/controller/agc_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/agc_status.h b/src/ipa/rpi/controller/agc_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/agc_status.h
> rename to src/ipa/rpi/controller/agc_status.h
> diff --git a/src/ipa/raspberrypi/controller/algorithm.cpp b/src/ipa/rpi/controller/algorithm.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/algorithm.cpp
> rename to src/ipa/rpi/controller/algorithm.cpp
> diff --git a/src/ipa/raspberrypi/controller/algorithm.h b/src/ipa/rpi/controller/algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/algorithm.h
> rename to src/ipa/rpi/controller/algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/alsc_status.h b/src/ipa/rpi/controller/alsc_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/alsc_status.h
> rename to src/ipa/rpi/controller/alsc_status.h
> diff --git a/src/ipa/raspberrypi/controller/awb_algorithm.h b/src/ipa/rpi/controller/awb_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/awb_algorithm.h
> rename to src/ipa/rpi/controller/awb_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/awb_status.h b/src/ipa/rpi/controller/awb_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/awb_status.h
> rename to src/ipa/rpi/controller/awb_status.h
> diff --git a/src/ipa/raspberrypi/controller/black_level_status.h b/src/ipa/rpi/controller/black_level_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/black_level_status.h
> rename to src/ipa/rpi/controller/black_level_status.h
> diff --git a/src/ipa/raspberrypi/controller/camera_mode.h b/src/ipa/rpi/controller/camera_mode.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/camera_mode.h
> rename to src/ipa/rpi/controller/camera_mode.h
> diff --git a/src/ipa/raspberrypi/controller/ccm_algorithm.h b/src/ipa/rpi/controller/ccm_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/ccm_algorithm.h
> rename to src/ipa/rpi/controller/ccm_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/ccm_status.h b/src/ipa/rpi/controller/ccm_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/ccm_status.h
> rename to src/ipa/rpi/controller/ccm_status.h
> diff --git a/src/ipa/raspberrypi/controller/contrast_algorithm.h b/src/ipa/rpi/controller/contrast_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/contrast_algorithm.h
> rename to src/ipa/rpi/controller/contrast_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/contrast_status.h b/src/ipa/rpi/controller/contrast_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/contrast_status.h
> rename to src/ipa/rpi/controller/contrast_status.h
> diff --git a/src/ipa/raspberrypi/controller/controller.cpp b/src/ipa/rpi/controller/controller.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/controller.cpp
> rename to src/ipa/rpi/controller/controller.cpp
> diff --git a/src/ipa/raspberrypi/controller/controller.h b/src/ipa/rpi/controller/controller.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/controller.h
> rename to src/ipa/rpi/controller/controller.h
> diff --git a/src/ipa/raspberrypi/controller/denoise_algorithm.h b/src/ipa/rpi/controller/denoise_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/denoise_algorithm.h
> rename to src/ipa/rpi/controller/denoise_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/denoise_status.h b/src/ipa/rpi/controller/denoise_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/denoise_status.h
> rename to src/ipa/rpi/controller/denoise_status.h
> diff --git a/src/ipa/raspberrypi/controller/device_status.cpp b/src/ipa/rpi/controller/device_status.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/device_status.cpp
> rename to src/ipa/rpi/controller/device_status.cpp
> diff --git a/src/ipa/raspberrypi/controller/device_status.h b/src/ipa/rpi/controller/device_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/device_status.h
> rename to src/ipa/rpi/controller/device_status.h
> diff --git a/src/ipa/raspberrypi/controller/dpc_status.h b/src/ipa/rpi/controller/dpc_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/dpc_status.h
> rename to src/ipa/rpi/controller/dpc_status.h
> diff --git a/src/ipa/raspberrypi/controller/geq_status.h b/src/ipa/rpi/controller/geq_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/geq_status.h
> rename to src/ipa/rpi/controller/geq_status.h
> diff --git a/src/ipa/raspberrypi/controller/histogram.cpp b/src/ipa/rpi/controller/histogram.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/histogram.cpp
> rename to src/ipa/rpi/controller/histogram.cpp
> diff --git a/src/ipa/raspberrypi/controller/histogram.h b/src/ipa/rpi/controller/histogram.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/histogram.h
> rename to src/ipa/rpi/controller/histogram.h
> diff --git a/src/ipa/raspberrypi/controller/lux_status.h b/src/ipa/rpi/controller/lux_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/lux_status.h
> rename to src/ipa/rpi/controller/lux_status.h
> diff --git a/src/ipa/rpi/controller/meson.build b/src/ipa/rpi/controller/meson.build
> new file mode 100644
> index 000000000000..90a67412444e
> --- /dev/null
> +++ b/src/ipa/rpi/controller/meson.build
> @@ -0,0 +1,22 @@
> +# SPDX-License-Identifier: CC0-1.0
> +
> +rpi_ipa_controller_sources = files([
> +    'algorithm.cpp',
> +    'controller.cpp',
> +    'device_status.cpp',
> +    'histogram.cpp',
> +    'pwl.cpp',
> +    'rpi/af.cpp',
> +    'rpi/agc.cpp',
> +    'rpi/alsc.cpp',
> +    'rpi/awb.cpp',
> +    'rpi/black_level.cpp',
> +    'rpi/ccm.cpp',
> +    'rpi/contrast.cpp',
> +    'rpi/dpc.cpp',
> +    'rpi/geq.cpp',
> +    'rpi/lux.cpp',
> +    'rpi/noise.cpp',
> +    'rpi/sdn.cpp',
> +    'rpi/sharpen.cpp',
> +])
> diff --git a/src/ipa/raspberrypi/controller/metadata.h b/src/ipa/rpi/controller/metadata.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/metadata.h
> rename to src/ipa/rpi/controller/metadata.h
> diff --git a/src/ipa/raspberrypi/controller/noise_status.h b/src/ipa/rpi/controller/noise_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/noise_status.h
> rename to src/ipa/rpi/controller/noise_status.h
> diff --git a/src/ipa/raspberrypi/controller/pdaf_data.h b/src/ipa/rpi/controller/pdaf_data.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/pdaf_data.h
> rename to src/ipa/rpi/controller/pdaf_data.h
> diff --git a/src/ipa/raspberrypi/controller/pwl.cpp b/src/ipa/rpi/controller/pwl.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/pwl.cpp
> rename to src/ipa/rpi/controller/pwl.cpp
> diff --git a/src/ipa/raspberrypi/controller/pwl.h b/src/ipa/rpi/controller/pwl.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/pwl.h
> rename to src/ipa/rpi/controller/pwl.h
> diff --git a/src/ipa/raspberrypi/controller/region_stats.h b/src/ipa/rpi/controller/region_stats.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/region_stats.h
> rename to src/ipa/rpi/controller/region_stats.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/af.cpp b/src/ipa/rpi/controller/rpi/af.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/af.cpp
> rename to src/ipa/rpi/controller/rpi/af.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/af.h b/src/ipa/rpi/controller/rpi/af.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/af.h
> rename to src/ipa/rpi/controller/rpi/af.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp b/src/ipa/rpi/controller/rpi/agc.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/agc.cpp
> rename to src/ipa/rpi/controller/rpi/agc.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.h b/src/ipa/rpi/controller/rpi/agc.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/agc.h
> rename to src/ipa/rpi/controller/rpi/agc.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/alsc.cpp b/src/ipa/rpi/controller/rpi/alsc.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/alsc.cpp
> rename to src/ipa/rpi/controller/rpi/alsc.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/alsc.h b/src/ipa/rpi/controller/rpi/alsc.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/alsc.h
> rename to src/ipa/rpi/controller/rpi/alsc.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp b/src/ipa/rpi/controller/rpi/awb.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/awb.cpp
> rename to src/ipa/rpi/controller/rpi/awb.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.h b/src/ipa/rpi/controller/rpi/awb.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/awb.h
> rename to src/ipa/rpi/controller/rpi/awb.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/black_level.cpp b/src/ipa/rpi/controller/rpi/black_level.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/black_level.cpp
> rename to src/ipa/rpi/controller/rpi/black_level.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/black_level.h b/src/ipa/rpi/controller/rpi/black_level.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/black_level.h
> rename to src/ipa/rpi/controller/rpi/black_level.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/ccm.cpp b/src/ipa/rpi/controller/rpi/ccm.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/ccm.cpp
> rename to src/ipa/rpi/controller/rpi/ccm.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/ccm.h b/src/ipa/rpi/controller/rpi/ccm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/ccm.h
> rename to src/ipa/rpi/controller/rpi/ccm.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/contrast.cpp b/src/ipa/rpi/controller/rpi/contrast.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/contrast.cpp
> rename to src/ipa/rpi/controller/rpi/contrast.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/contrast.h b/src/ipa/rpi/controller/rpi/contrast.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/contrast.h
> rename to src/ipa/rpi/controller/rpi/contrast.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/dpc.cpp b/src/ipa/rpi/controller/rpi/dpc.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/dpc.cpp
> rename to src/ipa/rpi/controller/rpi/dpc.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/dpc.h b/src/ipa/rpi/controller/rpi/dpc.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/dpc.h
> rename to src/ipa/rpi/controller/rpi/dpc.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/focus.h b/src/ipa/rpi/controller/rpi/focus.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/focus.h
> rename to src/ipa/rpi/controller/rpi/focus.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/geq.cpp b/src/ipa/rpi/controller/rpi/geq.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/geq.cpp
> rename to src/ipa/rpi/controller/rpi/geq.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/geq.h b/src/ipa/rpi/controller/rpi/geq.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/geq.h
> rename to src/ipa/rpi/controller/rpi/geq.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/lux.cpp b/src/ipa/rpi/controller/rpi/lux.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/lux.cpp
> rename to src/ipa/rpi/controller/rpi/lux.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/lux.h b/src/ipa/rpi/controller/rpi/lux.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/lux.h
> rename to src/ipa/rpi/controller/rpi/lux.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/noise.cpp b/src/ipa/rpi/controller/rpi/noise.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/noise.cpp
> rename to src/ipa/rpi/controller/rpi/noise.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/noise.h b/src/ipa/rpi/controller/rpi/noise.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/noise.h
> rename to src/ipa/rpi/controller/rpi/noise.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/sdn.cpp b/src/ipa/rpi/controller/rpi/sdn.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/sdn.cpp
> rename to src/ipa/rpi/controller/rpi/sdn.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/sdn.h b/src/ipa/rpi/controller/rpi/sdn.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/sdn.h
> rename to src/ipa/rpi/controller/rpi/sdn.h
> diff --git a/src/ipa/raspberrypi/controller/rpi/sharpen.cpp b/src/ipa/rpi/controller/rpi/sharpen.cpp
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/sharpen.cpp
> rename to src/ipa/rpi/controller/rpi/sharpen.cpp
> diff --git a/src/ipa/raspberrypi/controller/rpi/sharpen.h b/src/ipa/rpi/controller/rpi/sharpen.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/rpi/sharpen.h
> rename to src/ipa/rpi/controller/rpi/sharpen.h
> diff --git a/src/ipa/raspberrypi/controller/sharpen_algorithm.h b/src/ipa/rpi/controller/sharpen_algorithm.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/sharpen_algorithm.h
> rename to src/ipa/rpi/controller/sharpen_algorithm.h
> diff --git a/src/ipa/raspberrypi/controller/sharpen_status.h b/src/ipa/rpi/controller/sharpen_status.h
> similarity index 100%
> rename from src/ipa/raspberrypi/controller/sharpen_status.h
> rename to src/ipa/rpi/controller/sharpen_status.h
> diff --git a/src/ipa/raspberrypi/statistics.h b/src/ipa/rpi/controller/statistics.h
> similarity index 100%
> rename from src/ipa/raspberrypi/statistics.h
> rename to src/ipa/rpi/controller/statistics.h
> diff --git a/src/ipa/raspberrypi/data/imx219.json b/src/ipa/rpi/vc4/data/imx219.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx219.json
> rename to src/ipa/rpi/vc4/data/imx219.json
> diff --git a/src/ipa/raspberrypi/data/imx219_noir.json b/src/ipa/rpi/vc4/data/imx219_noir.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx219_noir.json
> rename to src/ipa/rpi/vc4/data/imx219_noir.json
> diff --git a/src/ipa/raspberrypi/data/imx290.json b/src/ipa/rpi/vc4/data/imx290.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx290.json
> rename to src/ipa/rpi/vc4/data/imx290.json
> diff --git a/src/ipa/raspberrypi/data/imx296.json b/src/ipa/rpi/vc4/data/imx296.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx296.json
> rename to src/ipa/rpi/vc4/data/imx296.json
> diff --git a/src/ipa/raspberrypi/data/imx296_mono.json b/src/ipa/rpi/vc4/data/imx296_mono.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx296_mono.json
> rename to src/ipa/rpi/vc4/data/imx296_mono.json
> diff --git a/src/ipa/raspberrypi/data/imx378.json b/src/ipa/rpi/vc4/data/imx378.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx378.json
> rename to src/ipa/rpi/vc4/data/imx378.json
> diff --git a/src/ipa/raspberrypi/data/imx477.json b/src/ipa/rpi/vc4/data/imx477.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx477.json
> rename to src/ipa/rpi/vc4/data/imx477.json
> diff --git a/src/ipa/raspberrypi/data/imx477_noir.json b/src/ipa/rpi/vc4/data/imx477_noir.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx477_noir.json
> rename to src/ipa/rpi/vc4/data/imx477_noir.json
> diff --git a/src/ipa/raspberrypi/data/imx477_scientific.json b/src/ipa/rpi/vc4/data/imx477_scientific.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx477_scientific.json
> rename to src/ipa/rpi/vc4/data/imx477_scientific.json
> diff --git a/src/ipa/raspberrypi/data/imx477_v1.json b/src/ipa/rpi/vc4/data/imx477_v1.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx477_v1.json
> rename to src/ipa/rpi/vc4/data/imx477_v1.json
> diff --git a/src/ipa/raspberrypi/data/imx519.json b/src/ipa/rpi/vc4/data/imx519.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx519.json
> rename to src/ipa/rpi/vc4/data/imx519.json
> diff --git a/src/ipa/raspberrypi/data/imx708.json b/src/ipa/rpi/vc4/data/imx708.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx708.json
> rename to src/ipa/rpi/vc4/data/imx708.json
> diff --git a/src/ipa/raspberrypi/data/imx708_noir.json b/src/ipa/rpi/vc4/data/imx708_noir.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx708_noir.json
> rename to src/ipa/rpi/vc4/data/imx708_noir.json
> diff --git a/src/ipa/raspberrypi/data/imx708_wide.json b/src/ipa/rpi/vc4/data/imx708_wide.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx708_wide.json
> rename to src/ipa/rpi/vc4/data/imx708_wide.json
> diff --git a/src/ipa/raspberrypi/data/imx708_wide_noir.json b/src/ipa/rpi/vc4/data/imx708_wide_noir.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/imx708_wide_noir.json
> rename to src/ipa/rpi/vc4/data/imx708_wide_noir.json
> diff --git a/src/ipa/raspberrypi/data/meson.build b/src/ipa/rpi/vc4/data/meson.build
> similarity index 89%
> rename from src/ipa/raspberrypi/data/meson.build
> rename to src/ipa/rpi/vc4/data/meson.build
> index b163a052f57c..327462fa2420 100644
> --- a/src/ipa/raspberrypi/data/meson.build
> +++ b/src/ipa/rpi/vc4/data/meson.build
> @@ -23,4 +23,4 @@ conf_files = files([
>  ])
>  
>  install_data(conf_files,
> -             install_dir : ipa_data_dir / 'raspberrypi')
> +             install_dir : ipa_data_dir / 'rpi/vc4')
> diff --git a/src/ipa/raspberrypi/data/ov5647.json b/src/ipa/rpi/vc4/data/ov5647.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/ov5647.json
> rename to src/ipa/rpi/vc4/data/ov5647.json
> diff --git a/src/ipa/raspberrypi/data/ov5647_noir.json b/src/ipa/rpi/vc4/data/ov5647_noir.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/ov5647_noir.json
> rename to src/ipa/rpi/vc4/data/ov5647_noir.json
> diff --git a/src/ipa/raspberrypi/data/ov9281_mono.json b/src/ipa/rpi/vc4/data/ov9281_mono.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/ov9281_mono.json
> rename to src/ipa/rpi/vc4/data/ov9281_mono.json
> diff --git a/src/ipa/raspberrypi/data/se327m12.json b/src/ipa/rpi/vc4/data/se327m12.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/se327m12.json
> rename to src/ipa/rpi/vc4/data/se327m12.json
> diff --git a/src/ipa/raspberrypi/data/uncalibrated.json b/src/ipa/rpi/vc4/data/uncalibrated.json
> similarity index 100%
> rename from src/ipa/raspberrypi/data/uncalibrated.json
> rename to src/ipa/rpi/vc4/data/uncalibrated.json
> diff --git a/src/ipa/rpi/vc4/meson.build b/src/ipa/rpi/vc4/meson.build
> new file mode 100644
> index 000000000000..992d0f1ab5a7
> --- /dev/null
> +++ b/src/ipa/rpi/vc4/meson.build
> @@ -0,0 +1,40 @@
> +# SPDX-License-Identifier: CC0-1.0
> +
> +ipa_name = 'ipa_vc4'

Including the "prefix" in the name ('ipa_rpi_vc4') would help avoiding
namespace clashes.

> +
> +vc4_ipa_deps = [
> +    libcamera_private,
> +    libatomic,
> +]
> +
> +vc4_ipa_includes = [
> +    ipa_includes,
> +    libipa_includes,
> +]
> +
> +vc4_ipa_sources = files([
> +    'raspberrypi.cpp',
> +])
> +
> +vc4_ipa_includes += include_directories('..')
> +vc4_ipa_sources += [rpi_ipa_cam_helper_sources, rpi_ipa_controller_sources]

Could we avoid building the shared sources multiple times by using a
static library ?

> +
> +mod = shared_module(ipa_name,
> +                    [vc4_ipa_sources, libcamera_generated_ipa_headers],
> +                    name_prefix : '',
> +                    include_directories : vc4_ipa_includes,
> +                    dependencies : vc4_ipa_deps,
> +                    link_with : libipa,
> +                    install : true,
> +                    install_dir : ipa_install_dir)
> +
> +if ipa_sign_module
> +    custom_target(ipa_name + '.so.sign',
> +                  input : mod,
> +                  output : ipa_name + '.so.sign',
> +                  command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],
> +                  install : false,
> +                  build_by_default : true)
> +endif
> +
> +subdir('data')
> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/rpi/vc4/raspberrypi.cpp
> similarity index 98%
> rename from src/ipa/raspberrypi/raspberrypi.cpp
> rename to src/ipa/rpi/vc4/raspberrypi.cpp
> index 9c29fa9a5e5c..841635ccde2b 100644
> --- a/src/ipa/raspberrypi/raspberrypi.cpp
> +++ b/src/ipa/rpi/vc4/raspberrypi.cpp
> @@ -33,29 +33,29 @@
>  
>  #include "libcamera/internal/mapped_framebuffer.h"
>  
> -#include "af_algorithm.h"
> -#include "af_status.h"
> -#include "agc_algorithm.h"
> -#include "agc_status.h"
> -#include "alsc_status.h"
> -#include "awb_algorithm.h"
> -#include "awb_status.h"
> -#include "black_level_status.h"
> -#include "cam_helper.h"
> -#include "ccm_algorithm.h"
> -#include "ccm_status.h"
> -#include "contrast_algorithm.h"
> -#include "contrast_status.h"
> -#include "controller.h"
> -#include "denoise_algorithm.h"
> -#include "denoise_status.h"
> -#include "dpc_status.h"
> -#include "geq_status.h"
> -#include "lux_status.h"
> -#include "metadata.h"
> -#include "sharpen_algorithm.h"
> -#include "sharpen_status.h"
> -#include "statistics.h"
> +#include "cam_helper/cam_helper.h"
> +#include "controller/af_algorithm.h"
> +#include "controller/af_status.h"
> +#include "controller/agc_algorithm.h"
> +#include "controller/agc_status.h"
> +#include "controller/alsc_status.h"
> +#include "controller/awb_algorithm.h"
> +#include "controller/awb_status.h"
> +#include "controller/black_level_status.h"
> +#include "controller/ccm_algorithm.h"
> +#include "controller/ccm_status.h"
> +#include "controller/contrast_algorithm.h"
> +#include "controller/contrast_status.h"
> +#include "controller/controller.h"
> +#include "controller/denoise_algorithm.h"
> +#include "controller/denoise_status.h"
> +#include "controller/dpc_status.h"
> +#include "controller/geq_status.h"
> +#include "controller/lux_status.h"
> +#include "controller/metadata.h"
> +#include "controller/sharpen_algorithm.h"
> +#include "controller/sharpen_status.h"
> +#include "controller/statistics.h"
>  
>  namespace libcamera {
>  
> @@ -1840,7 +1840,7 @@ const struct IPAModuleInfo ipaModuleInfo = {
>  	IPA_MODULE_API_VERSION,
>  	1,
>  	"PipelineHandlerRPi",
> -	"raspberrypi",
> +	"vc4",
>  };
>  
>  IPAInterface *ipaCreate()
> diff --git a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp
> index 4595773d2517..cfde7f2e2229 100644
> --- a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp
> @@ -1668,7 +1668,7 @@ int RPiCameraData::loadIPA(ipa::RPi::IPAInitResult *result)
>  		std::string model = sensor_->model();
>  		if (isMonoSensor(sensor_))
>  			model += "_mono";
> -		configurationFile = ipa_->configurationFile(model + ".json", "");
> +		configurationFile = ipa_->configurationFile(model + ".json", "rpi");
>  	} else {
>  		configurationFile = std::string(configFromEnv);
>  	}

Patch
diff mbox series

diff --git a/Documentation/environment_variables.rst b/Documentation/environment_variables.rst
index 4bf38b877897..888707785ee1 100644
--- a/Documentation/environment_variables.rst
+++ b/Documentation/environment_variables.rst
@@ -143,7 +143,7 @@  contain tuning parameters for the algorithms, in JSON format.
 The ``LIBCAMERA_IPA_CONFIG_PATH`` variable can be used to specify custom
 storage locations to search for those configuration files.
 
-`Examples <https://git.libcamera.org/libcamera/libcamera.git/tree/src/ipa/raspberrypi/data>`__
+`Examples <https://git.libcamera.org/libcamera/libcamera.git/tree/src/ipa/rpi/data>`__
 
 IPA module
 ~~~~~~~~~~
diff --git a/meson_options.txt b/meson_options.txt
index e1f4c205aa94..596f813ea5e5 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -27,7 +27,7 @@  option('gstreamer',
 
 option('ipas',
         type : 'array',
-        choices : ['ipu3', 'raspberrypi', 'rkisp1', 'vimc'],
+        choices : ['ipu3', 'rpi/vc4', 'rkisp1', 'vimc'],
         description : 'Select which IPA modules to build')
 
 option('lc-compliance',
diff --git a/src/ipa/meson.build b/src/ipa/meson.build
index 76ad5b445601..10d3b44ca7b6 100644
--- a/src/ipa/meson.build
+++ b/src/ipa/meson.build
@@ -37,6 +37,16 @@  endif
 
 enabled_ipa_modules = []
 
+# If the Raspberry Pi VC4 IPA is enabled, ensure we include the  rpi/cam_helper
+# and rpi/controller subdirectories in the build.
+#
+# This is done here and not within rpi/vc4/meson.build as meson does not
+# allow the subdir command to traverse up the directory tree.
+if pipelines.contains('rpi/vc4')
+    subdir('rpi/cam_helper')
+    subdir('rpi/controller')
+endif
+
 # The ipa-sign-install.sh script which uses the ipa_names variable will itself
 # prepend MESON_INSTALL_DESTDIR_PREFIX to each ipa module name, therefore we
 # must not include the prefix string here.
diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build
deleted file mode 100644
index de78cbd80f9c..000000000000
--- a/src/ipa/raspberrypi/meson.build
+++ /dev/null
@@ -1,66 +0,0 @@ 
-# SPDX-License-Identifier: CC0-1.0
-
-ipa_name = 'ipa_rpi'
-
-rpi_ipa_deps = [
-    libcamera_private,
-    libatomic,
-]
-
-rpi_ipa_includes = [
-    ipa_includes,
-    libipa_includes,
-    include_directories('controller')
-]
-
-rpi_ipa_sources = files([
-    'raspberrypi.cpp',
-    'md_parser_smia.cpp',
-    'cam_helper.cpp',
-    'cam_helper_ov5647.cpp',
-    'cam_helper_imx219.cpp',
-    'cam_helper_imx290.cpp',
-    'cam_helper_imx296.cpp',
-    'cam_helper_imx477.cpp',
-    'cam_helper_imx519.cpp',
-    'cam_helper_imx708.cpp',
-    'cam_helper_ov9281.cpp',
-    'controller/controller.cpp',
-    'controller/histogram.cpp',
-    'controller/algorithm.cpp',
-    'controller/rpi/af.cpp',
-    'controller/rpi/alsc.cpp',
-    'controller/rpi/awb.cpp',
-    'controller/rpi/sharpen.cpp',
-    'controller/rpi/black_level.cpp',
-    'controller/rpi/geq.cpp',
-    'controller/rpi/noise.cpp',
-    'controller/rpi/lux.cpp',
-    'controller/rpi/agc.cpp',
-    'controller/rpi/dpc.cpp',
-    'controller/rpi/ccm.cpp',
-    'controller/rpi/contrast.cpp',
-    'controller/rpi/sdn.cpp',
-    'controller/pwl.cpp',
-    'controller/device_status.cpp',
-])
-
-mod = shared_module(ipa_name,
-                    [rpi_ipa_sources, libcamera_generated_ipa_headers],
-                    name_prefix : '',
-                    include_directories : rpi_ipa_includes,
-                    dependencies : rpi_ipa_deps,
-                    link_with : libipa,
-                    install : true,
-                    install_dir : ipa_install_dir)
-
-if ipa_sign_module
-    custom_target(ipa_name + '.so.sign',
-                  input : mod,
-                  output : ipa_name + '.so.sign',
-                  command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],
-                  install : false,
-                  build_by_default : true)
-endif
-
-subdir('data')
diff --git a/src/ipa/raspberrypi/README.md b/src/ipa/rpi/README.md
similarity index 100%
rename from src/ipa/raspberrypi/README.md
rename to src/ipa/rpi/README.md
diff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/rpi/cam_helper/cam_helper.cpp
similarity index 100%
rename from src/ipa/raspberrypi/cam_helper.cpp
rename to src/ipa/rpi/cam_helper/cam_helper.cpp
diff --git a/src/ipa/raspberrypi/cam_helper.h b/src/ipa/rpi/cam_helper/cam_helper.h
similarity index 99%
rename from src/ipa/raspberrypi/cam_helper.h
rename to src/ipa/rpi/cam_helper/cam_helper.h
index b3f8c9803094..58a4b202d5a8 100644
--- a/src/ipa/raspberrypi/cam_helper.h
+++ b/src/ipa/rpi/cam_helper/cam_helper.h
@@ -13,7 +13,7 @@ 
 #include <libcamera/base/span.h>
 #include <libcamera/base/utils.h>
 
-#include "camera_mode.h"
+#include "controller/camera_mode.h"
 #include "controller/controller.h"
 #include "controller/metadata.h"
 #include "md_parser.h"
diff --git a/src/ipa/raspberrypi/cam_helper_imx219.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx219.cpp
similarity index 100%
rename from src/ipa/raspberrypi/cam_helper_imx219.cpp
rename to src/ipa/rpi/cam_helper/cam_helper_imx219.cpp
diff --git a/src/ipa/raspberrypi/cam_helper_imx290.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx290.cpp
similarity index 100%
rename from src/ipa/raspberrypi/cam_helper_imx290.cpp
rename to src/ipa/rpi/cam_helper/cam_helper_imx290.cpp
diff --git a/src/ipa/raspberrypi/cam_helper_imx296.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx296.cpp
similarity index 100%
rename from src/ipa/raspberrypi/cam_helper_imx296.cpp
rename to src/ipa/rpi/cam_helper/cam_helper_imx296.cpp
diff --git a/src/ipa/raspberrypi/cam_helper_imx477.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx477.cpp
similarity index 100%
rename from src/ipa/raspberrypi/cam_helper_imx477.cpp
rename to src/ipa/rpi/cam_helper/cam_helper_imx477.cpp
diff --git a/src/ipa/raspberrypi/cam_helper_imx519.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx519.cpp
similarity index 100%
rename from src/ipa/raspberrypi/cam_helper_imx519.cpp
rename to src/ipa/rpi/cam_helper/cam_helper_imx519.cpp
diff --git a/src/ipa/raspberrypi/cam_helper_imx708.cpp b/src/ipa/rpi/cam_helper/cam_helper_imx708.cpp
similarity index 100%
rename from src/ipa/raspberrypi/cam_helper_imx708.cpp
rename to src/ipa/rpi/cam_helper/cam_helper_imx708.cpp
diff --git a/src/ipa/raspberrypi/cam_helper_ov5647.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp
similarity index 100%
rename from src/ipa/raspberrypi/cam_helper_ov5647.cpp
rename to src/ipa/rpi/cam_helper/cam_helper_ov5647.cpp
diff --git a/src/ipa/raspberrypi/cam_helper_ov9281.cpp b/src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp
similarity index 100%
rename from src/ipa/raspberrypi/cam_helper_ov9281.cpp
rename to src/ipa/rpi/cam_helper/cam_helper_ov9281.cpp
diff --git a/src/ipa/raspberrypi/md_parser.h b/src/ipa/rpi/cam_helper/md_parser.h
similarity index 100%
rename from src/ipa/raspberrypi/md_parser.h
rename to src/ipa/rpi/cam_helper/md_parser.h
diff --git a/src/ipa/raspberrypi/md_parser_smia.cpp b/src/ipa/rpi/cam_helper/md_parser_smia.cpp
similarity index 100%
rename from src/ipa/raspberrypi/md_parser_smia.cpp
rename to src/ipa/rpi/cam_helper/md_parser_smia.cpp
diff --git a/src/ipa/rpi/cam_helper/meson.build b/src/ipa/rpi/cam_helper/meson.build
new file mode 100644
index 000000000000..aa42ae91f69d
--- /dev/null
+++ b/src/ipa/rpi/cam_helper/meson.build
@@ -0,0 +1,14 @@ 
+# SPDX-License-Identifier: CC0-1.0
+
+rpi_ipa_cam_helper_sources = files([
+    'cam_helper.cpp',
+    'cam_helper_ov5647.cpp',
+    'cam_helper_imx219.cpp',
+    'cam_helper_imx290.cpp',
+    'cam_helper_imx296.cpp',
+    'cam_helper_imx477.cpp',
+    'cam_helper_imx519.cpp',
+    'cam_helper_imx708.cpp',
+    'cam_helper_ov9281.cpp',
+    'md_parser_smia.cpp',
+])
diff --git a/src/ipa/raspberrypi/controller/af_algorithm.h b/src/ipa/rpi/controller/af_algorithm.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/af_algorithm.h
rename to src/ipa/rpi/controller/af_algorithm.h
diff --git a/src/ipa/raspberrypi/controller/af_status.h b/src/ipa/rpi/controller/af_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/af_status.h
rename to src/ipa/rpi/controller/af_status.h
diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.h b/src/ipa/rpi/controller/agc_algorithm.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/agc_algorithm.h
rename to src/ipa/rpi/controller/agc_algorithm.h
diff --git a/src/ipa/raspberrypi/controller/agc_status.h b/src/ipa/rpi/controller/agc_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/agc_status.h
rename to src/ipa/rpi/controller/agc_status.h
diff --git a/src/ipa/raspberrypi/controller/algorithm.cpp b/src/ipa/rpi/controller/algorithm.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/algorithm.cpp
rename to src/ipa/rpi/controller/algorithm.cpp
diff --git a/src/ipa/raspberrypi/controller/algorithm.h b/src/ipa/rpi/controller/algorithm.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/algorithm.h
rename to src/ipa/rpi/controller/algorithm.h
diff --git a/src/ipa/raspberrypi/controller/alsc_status.h b/src/ipa/rpi/controller/alsc_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/alsc_status.h
rename to src/ipa/rpi/controller/alsc_status.h
diff --git a/src/ipa/raspberrypi/controller/awb_algorithm.h b/src/ipa/rpi/controller/awb_algorithm.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/awb_algorithm.h
rename to src/ipa/rpi/controller/awb_algorithm.h
diff --git a/src/ipa/raspberrypi/controller/awb_status.h b/src/ipa/rpi/controller/awb_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/awb_status.h
rename to src/ipa/rpi/controller/awb_status.h
diff --git a/src/ipa/raspberrypi/controller/black_level_status.h b/src/ipa/rpi/controller/black_level_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/black_level_status.h
rename to src/ipa/rpi/controller/black_level_status.h
diff --git a/src/ipa/raspberrypi/controller/camera_mode.h b/src/ipa/rpi/controller/camera_mode.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/camera_mode.h
rename to src/ipa/rpi/controller/camera_mode.h
diff --git a/src/ipa/raspberrypi/controller/ccm_algorithm.h b/src/ipa/rpi/controller/ccm_algorithm.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/ccm_algorithm.h
rename to src/ipa/rpi/controller/ccm_algorithm.h
diff --git a/src/ipa/raspberrypi/controller/ccm_status.h b/src/ipa/rpi/controller/ccm_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/ccm_status.h
rename to src/ipa/rpi/controller/ccm_status.h
diff --git a/src/ipa/raspberrypi/controller/contrast_algorithm.h b/src/ipa/rpi/controller/contrast_algorithm.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/contrast_algorithm.h
rename to src/ipa/rpi/controller/contrast_algorithm.h
diff --git a/src/ipa/raspberrypi/controller/contrast_status.h b/src/ipa/rpi/controller/contrast_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/contrast_status.h
rename to src/ipa/rpi/controller/contrast_status.h
diff --git a/src/ipa/raspberrypi/controller/controller.cpp b/src/ipa/rpi/controller/controller.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/controller.cpp
rename to src/ipa/rpi/controller/controller.cpp
diff --git a/src/ipa/raspberrypi/controller/controller.h b/src/ipa/rpi/controller/controller.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/controller.h
rename to src/ipa/rpi/controller/controller.h
diff --git a/src/ipa/raspberrypi/controller/denoise_algorithm.h b/src/ipa/rpi/controller/denoise_algorithm.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/denoise_algorithm.h
rename to src/ipa/rpi/controller/denoise_algorithm.h
diff --git a/src/ipa/raspberrypi/controller/denoise_status.h b/src/ipa/rpi/controller/denoise_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/denoise_status.h
rename to src/ipa/rpi/controller/denoise_status.h
diff --git a/src/ipa/raspberrypi/controller/device_status.cpp b/src/ipa/rpi/controller/device_status.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/device_status.cpp
rename to src/ipa/rpi/controller/device_status.cpp
diff --git a/src/ipa/raspberrypi/controller/device_status.h b/src/ipa/rpi/controller/device_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/device_status.h
rename to src/ipa/rpi/controller/device_status.h
diff --git a/src/ipa/raspberrypi/controller/dpc_status.h b/src/ipa/rpi/controller/dpc_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/dpc_status.h
rename to src/ipa/rpi/controller/dpc_status.h
diff --git a/src/ipa/raspberrypi/controller/geq_status.h b/src/ipa/rpi/controller/geq_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/geq_status.h
rename to src/ipa/rpi/controller/geq_status.h
diff --git a/src/ipa/raspberrypi/controller/histogram.cpp b/src/ipa/rpi/controller/histogram.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/histogram.cpp
rename to src/ipa/rpi/controller/histogram.cpp
diff --git a/src/ipa/raspberrypi/controller/histogram.h b/src/ipa/rpi/controller/histogram.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/histogram.h
rename to src/ipa/rpi/controller/histogram.h
diff --git a/src/ipa/raspberrypi/controller/lux_status.h b/src/ipa/rpi/controller/lux_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/lux_status.h
rename to src/ipa/rpi/controller/lux_status.h
diff --git a/src/ipa/rpi/controller/meson.build b/src/ipa/rpi/controller/meson.build
new file mode 100644
index 000000000000..90a67412444e
--- /dev/null
+++ b/src/ipa/rpi/controller/meson.build
@@ -0,0 +1,22 @@ 
+# SPDX-License-Identifier: CC0-1.0
+
+rpi_ipa_controller_sources = files([
+    'algorithm.cpp',
+    'controller.cpp',
+    'device_status.cpp',
+    'histogram.cpp',
+    'pwl.cpp',
+    'rpi/af.cpp',
+    'rpi/agc.cpp',
+    'rpi/alsc.cpp',
+    'rpi/awb.cpp',
+    'rpi/black_level.cpp',
+    'rpi/ccm.cpp',
+    'rpi/contrast.cpp',
+    'rpi/dpc.cpp',
+    'rpi/geq.cpp',
+    'rpi/lux.cpp',
+    'rpi/noise.cpp',
+    'rpi/sdn.cpp',
+    'rpi/sharpen.cpp',
+])
diff --git a/src/ipa/raspberrypi/controller/metadata.h b/src/ipa/rpi/controller/metadata.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/metadata.h
rename to src/ipa/rpi/controller/metadata.h
diff --git a/src/ipa/raspberrypi/controller/noise_status.h b/src/ipa/rpi/controller/noise_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/noise_status.h
rename to src/ipa/rpi/controller/noise_status.h
diff --git a/src/ipa/raspberrypi/controller/pdaf_data.h b/src/ipa/rpi/controller/pdaf_data.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/pdaf_data.h
rename to src/ipa/rpi/controller/pdaf_data.h
diff --git a/src/ipa/raspberrypi/controller/pwl.cpp b/src/ipa/rpi/controller/pwl.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/pwl.cpp
rename to src/ipa/rpi/controller/pwl.cpp
diff --git a/src/ipa/raspberrypi/controller/pwl.h b/src/ipa/rpi/controller/pwl.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/pwl.h
rename to src/ipa/rpi/controller/pwl.h
diff --git a/src/ipa/raspberrypi/controller/region_stats.h b/src/ipa/rpi/controller/region_stats.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/region_stats.h
rename to src/ipa/rpi/controller/region_stats.h
diff --git a/src/ipa/raspberrypi/controller/rpi/af.cpp b/src/ipa/rpi/controller/rpi/af.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/af.cpp
rename to src/ipa/rpi/controller/rpi/af.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/af.h b/src/ipa/rpi/controller/rpi/af.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/af.h
rename to src/ipa/rpi/controller/rpi/af.h
diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp b/src/ipa/rpi/controller/rpi/agc.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/agc.cpp
rename to src/ipa/rpi/controller/rpi/agc.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/agc.h b/src/ipa/rpi/controller/rpi/agc.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/agc.h
rename to src/ipa/rpi/controller/rpi/agc.h
diff --git a/src/ipa/raspberrypi/controller/rpi/alsc.cpp b/src/ipa/rpi/controller/rpi/alsc.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/alsc.cpp
rename to src/ipa/rpi/controller/rpi/alsc.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/alsc.h b/src/ipa/rpi/controller/rpi/alsc.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/alsc.h
rename to src/ipa/rpi/controller/rpi/alsc.h
diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp b/src/ipa/rpi/controller/rpi/awb.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/awb.cpp
rename to src/ipa/rpi/controller/rpi/awb.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/awb.h b/src/ipa/rpi/controller/rpi/awb.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/awb.h
rename to src/ipa/rpi/controller/rpi/awb.h
diff --git a/src/ipa/raspberrypi/controller/rpi/black_level.cpp b/src/ipa/rpi/controller/rpi/black_level.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/black_level.cpp
rename to src/ipa/rpi/controller/rpi/black_level.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/black_level.h b/src/ipa/rpi/controller/rpi/black_level.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/black_level.h
rename to src/ipa/rpi/controller/rpi/black_level.h
diff --git a/src/ipa/raspberrypi/controller/rpi/ccm.cpp b/src/ipa/rpi/controller/rpi/ccm.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/ccm.cpp
rename to src/ipa/rpi/controller/rpi/ccm.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/ccm.h b/src/ipa/rpi/controller/rpi/ccm.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/ccm.h
rename to src/ipa/rpi/controller/rpi/ccm.h
diff --git a/src/ipa/raspberrypi/controller/rpi/contrast.cpp b/src/ipa/rpi/controller/rpi/contrast.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/contrast.cpp
rename to src/ipa/rpi/controller/rpi/contrast.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/contrast.h b/src/ipa/rpi/controller/rpi/contrast.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/contrast.h
rename to src/ipa/rpi/controller/rpi/contrast.h
diff --git a/src/ipa/raspberrypi/controller/rpi/dpc.cpp b/src/ipa/rpi/controller/rpi/dpc.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/dpc.cpp
rename to src/ipa/rpi/controller/rpi/dpc.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/dpc.h b/src/ipa/rpi/controller/rpi/dpc.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/dpc.h
rename to src/ipa/rpi/controller/rpi/dpc.h
diff --git a/src/ipa/raspberrypi/controller/rpi/focus.h b/src/ipa/rpi/controller/rpi/focus.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/focus.h
rename to src/ipa/rpi/controller/rpi/focus.h
diff --git a/src/ipa/raspberrypi/controller/rpi/geq.cpp b/src/ipa/rpi/controller/rpi/geq.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/geq.cpp
rename to src/ipa/rpi/controller/rpi/geq.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/geq.h b/src/ipa/rpi/controller/rpi/geq.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/geq.h
rename to src/ipa/rpi/controller/rpi/geq.h
diff --git a/src/ipa/raspberrypi/controller/rpi/lux.cpp b/src/ipa/rpi/controller/rpi/lux.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/lux.cpp
rename to src/ipa/rpi/controller/rpi/lux.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/lux.h b/src/ipa/rpi/controller/rpi/lux.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/lux.h
rename to src/ipa/rpi/controller/rpi/lux.h
diff --git a/src/ipa/raspberrypi/controller/rpi/noise.cpp b/src/ipa/rpi/controller/rpi/noise.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/noise.cpp
rename to src/ipa/rpi/controller/rpi/noise.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/noise.h b/src/ipa/rpi/controller/rpi/noise.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/noise.h
rename to src/ipa/rpi/controller/rpi/noise.h
diff --git a/src/ipa/raspberrypi/controller/rpi/sdn.cpp b/src/ipa/rpi/controller/rpi/sdn.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/sdn.cpp
rename to src/ipa/rpi/controller/rpi/sdn.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/sdn.h b/src/ipa/rpi/controller/rpi/sdn.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/sdn.h
rename to src/ipa/rpi/controller/rpi/sdn.h
diff --git a/src/ipa/raspberrypi/controller/rpi/sharpen.cpp b/src/ipa/rpi/controller/rpi/sharpen.cpp
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/sharpen.cpp
rename to src/ipa/rpi/controller/rpi/sharpen.cpp
diff --git a/src/ipa/raspberrypi/controller/rpi/sharpen.h b/src/ipa/rpi/controller/rpi/sharpen.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/rpi/sharpen.h
rename to src/ipa/rpi/controller/rpi/sharpen.h
diff --git a/src/ipa/raspberrypi/controller/sharpen_algorithm.h b/src/ipa/rpi/controller/sharpen_algorithm.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/sharpen_algorithm.h
rename to src/ipa/rpi/controller/sharpen_algorithm.h
diff --git a/src/ipa/raspberrypi/controller/sharpen_status.h b/src/ipa/rpi/controller/sharpen_status.h
similarity index 100%
rename from src/ipa/raspberrypi/controller/sharpen_status.h
rename to src/ipa/rpi/controller/sharpen_status.h
diff --git a/src/ipa/raspberrypi/statistics.h b/src/ipa/rpi/controller/statistics.h
similarity index 100%
rename from src/ipa/raspberrypi/statistics.h
rename to src/ipa/rpi/controller/statistics.h
diff --git a/src/ipa/raspberrypi/data/imx219.json b/src/ipa/rpi/vc4/data/imx219.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx219.json
rename to src/ipa/rpi/vc4/data/imx219.json
diff --git a/src/ipa/raspberrypi/data/imx219_noir.json b/src/ipa/rpi/vc4/data/imx219_noir.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx219_noir.json
rename to src/ipa/rpi/vc4/data/imx219_noir.json
diff --git a/src/ipa/raspberrypi/data/imx290.json b/src/ipa/rpi/vc4/data/imx290.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx290.json
rename to src/ipa/rpi/vc4/data/imx290.json
diff --git a/src/ipa/raspberrypi/data/imx296.json b/src/ipa/rpi/vc4/data/imx296.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx296.json
rename to src/ipa/rpi/vc4/data/imx296.json
diff --git a/src/ipa/raspberrypi/data/imx296_mono.json b/src/ipa/rpi/vc4/data/imx296_mono.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx296_mono.json
rename to src/ipa/rpi/vc4/data/imx296_mono.json
diff --git a/src/ipa/raspberrypi/data/imx378.json b/src/ipa/rpi/vc4/data/imx378.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx378.json
rename to src/ipa/rpi/vc4/data/imx378.json
diff --git a/src/ipa/raspberrypi/data/imx477.json b/src/ipa/rpi/vc4/data/imx477.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx477.json
rename to src/ipa/rpi/vc4/data/imx477.json
diff --git a/src/ipa/raspberrypi/data/imx477_noir.json b/src/ipa/rpi/vc4/data/imx477_noir.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx477_noir.json
rename to src/ipa/rpi/vc4/data/imx477_noir.json
diff --git a/src/ipa/raspberrypi/data/imx477_scientific.json b/src/ipa/rpi/vc4/data/imx477_scientific.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx477_scientific.json
rename to src/ipa/rpi/vc4/data/imx477_scientific.json
diff --git a/src/ipa/raspberrypi/data/imx477_v1.json b/src/ipa/rpi/vc4/data/imx477_v1.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx477_v1.json
rename to src/ipa/rpi/vc4/data/imx477_v1.json
diff --git a/src/ipa/raspberrypi/data/imx519.json b/src/ipa/rpi/vc4/data/imx519.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx519.json
rename to src/ipa/rpi/vc4/data/imx519.json
diff --git a/src/ipa/raspberrypi/data/imx708.json b/src/ipa/rpi/vc4/data/imx708.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx708.json
rename to src/ipa/rpi/vc4/data/imx708.json
diff --git a/src/ipa/raspberrypi/data/imx708_noir.json b/src/ipa/rpi/vc4/data/imx708_noir.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx708_noir.json
rename to src/ipa/rpi/vc4/data/imx708_noir.json
diff --git a/src/ipa/raspberrypi/data/imx708_wide.json b/src/ipa/rpi/vc4/data/imx708_wide.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx708_wide.json
rename to src/ipa/rpi/vc4/data/imx708_wide.json
diff --git a/src/ipa/raspberrypi/data/imx708_wide_noir.json b/src/ipa/rpi/vc4/data/imx708_wide_noir.json
similarity index 100%
rename from src/ipa/raspberrypi/data/imx708_wide_noir.json
rename to src/ipa/rpi/vc4/data/imx708_wide_noir.json
diff --git a/src/ipa/raspberrypi/data/meson.build b/src/ipa/rpi/vc4/data/meson.build
similarity index 89%
rename from src/ipa/raspberrypi/data/meson.build
rename to src/ipa/rpi/vc4/data/meson.build
index b163a052f57c..327462fa2420 100644
--- a/src/ipa/raspberrypi/data/meson.build
+++ b/src/ipa/rpi/vc4/data/meson.build
@@ -23,4 +23,4 @@  conf_files = files([
 ])
 
 install_data(conf_files,
-             install_dir : ipa_data_dir / 'raspberrypi')
+             install_dir : ipa_data_dir / 'rpi/vc4')
diff --git a/src/ipa/raspberrypi/data/ov5647.json b/src/ipa/rpi/vc4/data/ov5647.json
similarity index 100%
rename from src/ipa/raspberrypi/data/ov5647.json
rename to src/ipa/rpi/vc4/data/ov5647.json
diff --git a/src/ipa/raspberrypi/data/ov5647_noir.json b/src/ipa/rpi/vc4/data/ov5647_noir.json
similarity index 100%
rename from src/ipa/raspberrypi/data/ov5647_noir.json
rename to src/ipa/rpi/vc4/data/ov5647_noir.json
diff --git a/src/ipa/raspberrypi/data/ov9281_mono.json b/src/ipa/rpi/vc4/data/ov9281_mono.json
similarity index 100%
rename from src/ipa/raspberrypi/data/ov9281_mono.json
rename to src/ipa/rpi/vc4/data/ov9281_mono.json
diff --git a/src/ipa/raspberrypi/data/se327m12.json b/src/ipa/rpi/vc4/data/se327m12.json
similarity index 100%
rename from src/ipa/raspberrypi/data/se327m12.json
rename to src/ipa/rpi/vc4/data/se327m12.json
diff --git a/src/ipa/raspberrypi/data/uncalibrated.json b/src/ipa/rpi/vc4/data/uncalibrated.json
similarity index 100%
rename from src/ipa/raspberrypi/data/uncalibrated.json
rename to src/ipa/rpi/vc4/data/uncalibrated.json
diff --git a/src/ipa/rpi/vc4/meson.build b/src/ipa/rpi/vc4/meson.build
new file mode 100644
index 000000000000..992d0f1ab5a7
--- /dev/null
+++ b/src/ipa/rpi/vc4/meson.build
@@ -0,0 +1,40 @@ 
+# SPDX-License-Identifier: CC0-1.0
+
+ipa_name = 'ipa_vc4'
+
+vc4_ipa_deps = [
+    libcamera_private,
+    libatomic,
+]
+
+vc4_ipa_includes = [
+    ipa_includes,
+    libipa_includes,
+]
+
+vc4_ipa_sources = files([
+    'raspberrypi.cpp',
+])
+
+vc4_ipa_includes += include_directories('..')
+vc4_ipa_sources += [rpi_ipa_cam_helper_sources, rpi_ipa_controller_sources]
+
+mod = shared_module(ipa_name,
+                    [vc4_ipa_sources, libcamera_generated_ipa_headers],
+                    name_prefix : '',
+                    include_directories : vc4_ipa_includes,
+                    dependencies : vc4_ipa_deps,
+                    link_with : libipa,
+                    install : true,
+                    install_dir : ipa_install_dir)
+
+if ipa_sign_module
+    custom_target(ipa_name + '.so.sign',
+                  input : mod,
+                  output : ipa_name + '.so.sign',
+                  command : [ipa_sign, ipa_priv_key, '@INPUT@', '@OUTPUT@'],
+                  install : false,
+                  build_by_default : true)
+endif
+
+subdir('data')
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/rpi/vc4/raspberrypi.cpp
similarity index 98%
rename from src/ipa/raspberrypi/raspberrypi.cpp
rename to src/ipa/rpi/vc4/raspberrypi.cpp
index 9c29fa9a5e5c..841635ccde2b 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/rpi/vc4/raspberrypi.cpp
@@ -33,29 +33,29 @@ 
 
 #include "libcamera/internal/mapped_framebuffer.h"
 
-#include "af_algorithm.h"
-#include "af_status.h"
-#include "agc_algorithm.h"
-#include "agc_status.h"
-#include "alsc_status.h"
-#include "awb_algorithm.h"
-#include "awb_status.h"
-#include "black_level_status.h"
-#include "cam_helper.h"
-#include "ccm_algorithm.h"
-#include "ccm_status.h"
-#include "contrast_algorithm.h"
-#include "contrast_status.h"
-#include "controller.h"
-#include "denoise_algorithm.h"
-#include "denoise_status.h"
-#include "dpc_status.h"
-#include "geq_status.h"
-#include "lux_status.h"
-#include "metadata.h"
-#include "sharpen_algorithm.h"
-#include "sharpen_status.h"
-#include "statistics.h"
+#include "cam_helper/cam_helper.h"
+#include "controller/af_algorithm.h"
+#include "controller/af_status.h"
+#include "controller/agc_algorithm.h"
+#include "controller/agc_status.h"
+#include "controller/alsc_status.h"
+#include "controller/awb_algorithm.h"
+#include "controller/awb_status.h"
+#include "controller/black_level_status.h"
+#include "controller/ccm_algorithm.h"
+#include "controller/ccm_status.h"
+#include "controller/contrast_algorithm.h"
+#include "controller/contrast_status.h"
+#include "controller/controller.h"
+#include "controller/denoise_algorithm.h"
+#include "controller/denoise_status.h"
+#include "controller/dpc_status.h"
+#include "controller/geq_status.h"
+#include "controller/lux_status.h"
+#include "controller/metadata.h"
+#include "controller/sharpen_algorithm.h"
+#include "controller/sharpen_status.h"
+#include "controller/statistics.h"
 
 namespace libcamera {
 
@@ -1840,7 +1840,7 @@  const struct IPAModuleInfo ipaModuleInfo = {
 	IPA_MODULE_API_VERSION,
 	1,
 	"PipelineHandlerRPi",
-	"raspberrypi",
+	"vc4",
 };
 
 IPAInterface *ipaCreate()
diff --git a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp
index 4595773d2517..cfde7f2e2229 100644
--- a/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp
+++ b/src/libcamera/pipeline/rpi/vc4/raspberrypi.cpp
@@ -1668,7 +1668,7 @@  int RPiCameraData::loadIPA(ipa::RPi::IPAInitResult *result)
 		std::string model = sensor_->model();
 		if (isMonoSensor(sensor_))
 			model += "_mono";
-		configurationFile = ipa_->configurationFile(model + ".json", "");
+		configurationFile = ipa_->configurationFile(model + ".json", "rpi");
 	} else {
 		configurationFile = std::string(configFromEnv);
 	}