diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in
index c3fe5f663f7c..5f4847523c53 100644
--- a/Documentation/Doxyfile.in
+++ b/Documentation/Doxyfile.in
@@ -794,8 +794,7 @@ WARN_LOGFILE           =
 # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
 # Note: If this tag is empty the current directory is searched.
 
-INPUT                  = "@TOP_SRCDIR@/include/ipa" \
-			 "@TOP_SRCDIR@/include/libcamera" \
+INPUT                  = "@TOP_SRCDIR@/include/libcamera" \
 			 "@TOP_SRCDIR@/src/ipa/libipa" \
 			 "@TOP_SRCDIR@/src/libcamera" \
 			 "@TOP_BUILDDIR@/include/libcamera" \
diff --git a/include/libcamera/internal/ipa_context_wrapper.h b/include/libcamera/internal/ipa_context_wrapper.h
index a717d4067498..bd770e132c0c 100644
--- a/include/libcamera/internal/ipa_context_wrapper.h
+++ b/include/libcamera/internal/ipa_context_wrapper.h
@@ -7,7 +7,7 @@
 #ifndef __LIBCAMERA_IPA_CONTEXT_WRAPPER_H__
 #define __LIBCAMERA_IPA_CONTEXT_WRAPPER_H__
 
-#include <ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_interface.h>
 
 #include "libcamera/internal/control_serializer.h"
 
diff --git a/include/libcamera/internal/ipa_manager.h b/include/libcamera/internal/ipa_manager.h
index f07d91fc7bbf..2412d75746ac 100644
--- a/include/libcamera/internal/ipa_manager.h
+++ b/include/libcamera/internal/ipa_manager.h
@@ -10,8 +10,8 @@
 #include <stdint.h>
 #include <vector>
 
-#include <ipa/ipa_interface.h>
-#include <ipa/ipa_module_info.h>
+#include <libcamera/ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_module_info.h>
 
 #include "libcamera/internal/ipa_module.h"
 #include "libcamera/internal/pipeline_handler.h"
diff --git a/include/libcamera/internal/ipa_module.h b/include/libcamera/internal/ipa_module.h
index 2f569db0b848..5b54cb31a48a 100644
--- a/include/libcamera/internal/ipa_module.h
+++ b/include/libcamera/internal/ipa_module.h
@@ -11,8 +11,8 @@
 #include <string>
 #include <vector>
 
-#include <ipa/ipa_interface.h>
-#include <ipa/ipa_module_info.h>
+#include <libcamera/ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_module_info.h>
 
 #include "libcamera/internal/log.h"
 #include "libcamera/internal/pipeline_handler.h"
diff --git a/include/libcamera/internal/ipa_proxy.h b/include/libcamera/internal/ipa_proxy.h
index 1111065b36a7..e9a36608bd31 100644
--- a/include/libcamera/internal/ipa_proxy.h
+++ b/include/libcamera/internal/ipa_proxy.h
@@ -11,7 +11,7 @@
 #include <string>
 #include <vector>
 
-#include <ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_interface.h>
 
 namespace libcamera {
 
diff --git a/include/ipa/ipa_controls.h b/include/libcamera/ipa/ipa_controls.h
similarity index 100%
rename from include/ipa/ipa_controls.h
rename to include/libcamera/ipa/ipa_controls.h
diff --git a/include/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h
similarity index 100%
rename from include/ipa/ipa_interface.h
rename to include/libcamera/ipa/ipa_interface.h
diff --git a/include/ipa/ipa_module_info.h b/include/libcamera/ipa/ipa_module_info.h
similarity index 100%
rename from include/ipa/ipa_module_info.h
rename to include/libcamera/ipa/ipa_module_info.h
diff --git a/include/ipa/ipa_vimc.h b/include/libcamera/ipa/ipa_vimc.h
similarity index 100%
rename from include/ipa/ipa_vimc.h
rename to include/libcamera/ipa/ipa_vimc.h
diff --git a/include/ipa/meson.build b/include/libcamera/ipa/meson.build
similarity index 100%
rename from include/ipa/meson.build
rename to include/libcamera/ipa/meson.build
diff --git a/include/ipa/raspberrypi.h b/include/libcamera/ipa/raspberrypi.h
similarity index 100%
rename from include/ipa/raspberrypi.h
rename to include/libcamera/ipa/raspberrypi.h
diff --git a/include/ipa/rkisp1.h b/include/libcamera/ipa/rkisp1.h
similarity index 100%
rename from include/ipa/rkisp1.h
rename to include/libcamera/ipa/rkisp1.h
diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build
index f9c8e64bd50c..32b8d14211a4 100644
--- a/include/libcamera/meson.build
+++ b/include/libcamera/meson.build
@@ -24,6 +24,7 @@ libcamera_api = files([
 include_dir = join_paths(libcamera_include_dir, 'libcamera')
 
 subdir('internal')
+subdir('ipa')
 
 install_headers(libcamera_api,
                 subdir : include_dir)
diff --git a/include/meson.build b/include/meson.build
index 4f41c9ceeb4c..2ac9a3a049f2 100644
--- a/include/meson.build
+++ b/include/meson.build
@@ -3,5 +3,4 @@
 libcamera_include_dir = 'libcamera'
 
 subdir('android')
-subdir('ipa')
 subdir('libcamera')
diff --git a/src/ipa/libipa/ipa_interface_wrapper.cpp b/src/ipa/libipa/ipa_interface_wrapper.cpp
index 90f270c021a9..2a2e43abc708 100644
--- a/src/ipa/libipa/ipa_interface_wrapper.cpp
+++ b/src/ipa/libipa/ipa_interface_wrapper.cpp
@@ -12,7 +12,7 @@
 #include <unistd.h>
 #include <vector>
 
-#include <ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_interface.h>
 
 #include "libcamera/internal/byte_stream_buffer.h"
 #include "libcamera/internal/camera_sensor.h"
diff --git a/src/ipa/libipa/ipa_interface_wrapper.h b/src/ipa/libipa/ipa_interface_wrapper.h
index b426034d551d..a1c701599b56 100644
--- a/src/ipa/libipa/ipa_interface_wrapper.h
+++ b/src/ipa/libipa/ipa_interface_wrapper.h
@@ -9,7 +9,7 @@
 
 #include <memory>
 
-#include <ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_interface.h>
 
 #include "libcamera/internal/control_serializer.h"
 
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 46b244538e32..9669f2126e6c 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -12,14 +12,15 @@
 #include <string.h>
 #include <sys/mman.h>
 
-#include <ipa/ipa_interface.h>
-#include <ipa/ipa_module_info.h>
-#include <ipa/raspberrypi.h>
 #include <libcamera/buffer.h>
 #include <libcamera/control_ids.h>
 #include <libcamera/controls.h>
+#include <libcamera/ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_module_info.h>
+#include <libcamera/ipa/raspberrypi.h>
 #include <libcamera/request.h>
 #include <libcamera/span.h>
+
 #include <libipa/ipa_interface_wrapper.h>
 
 #include "libcamera/internal/camera_sensor.h"
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index 4f6e0342dac1..fbdc908fc816 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -14,12 +14,13 @@
 
 #include <linux/rkisp1-config.h>
 
-#include <ipa/ipa_interface.h>
-#include <ipa/ipa_module_info.h>
-#include <ipa/rkisp1.h>
 #include <libcamera/buffer.h>
 #include <libcamera/control_ids.h>
+#include <libcamera/ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_module_info.h>
+#include <libcamera/ipa/rkisp1.h>
 #include <libcamera/request.h>
+
 #include <libipa/ipa_interface_wrapper.h>
 
 #include "libcamera/internal/log.h"
diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp
index 3fa6be6535e2..af278a482b8a 100644
--- a/src/ipa/vimc/vimc.cpp
+++ b/src/ipa/vimc/vimc.cpp
@@ -5,7 +5,7 @@
  * ipa_vimc.cpp - Vimc Image Processing Algorithm module
  */
 
-#include <ipa/ipa_vimc.h>
+#include <libcamera/ipa/ipa_vimc.h>
 
 #include <fcntl.h>
 #include <string.h>
@@ -14,8 +14,8 @@
 
 #include <iostream>
 
-#include <ipa/ipa_interface.h>
-#include <ipa/ipa_module_info.h>
+#include <libcamera/ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_module_info.h>
 
 #include <libipa/ipa_interface_wrapper.h>
 
diff --git a/src/libcamera/control_serializer.cpp b/src/libcamera/control_serializer.cpp
index bf162b6cc471..258db6dfbf5a 100644
--- a/src/libcamera/control_serializer.cpp
+++ b/src/libcamera/control_serializer.cpp
@@ -11,9 +11,9 @@
 #include <memory>
 #include <vector>
 
-#include <ipa/ipa_controls.h>
 #include <libcamera/control_ids.h>
 #include <libcamera/controls.h>
+#include <libcamera/ipa/ipa_controls.h>
 #include <libcamera/span.h>
 
 #include "libcamera/internal/byte_stream_buffer.h"
diff --git a/src/libcamera/ipa_controls.cpp b/src/libcamera/ipa_controls.cpp
index b1d14190e3fe..8fd726513182 100644
--- a/src/libcamera/ipa_controls.cpp
+++ b/src/libcamera/ipa_controls.cpp
@@ -5,7 +5,7 @@
  * ipa_controls.cpp - IPA control handling
  */
 
-#include <ipa/ipa_controls.h>
+#include <libcamera/ipa/ipa_controls.h>
 
 /**
  * \file ipa_controls.h
diff --git a/src/libcamera/ipa_interface.cpp b/src/libcamera/ipa_interface.cpp
index c890eadaf6c8..69835e63ab46 100644
--- a/src/libcamera/ipa_interface.cpp
+++ b/src/libcamera/ipa_interface.cpp
@@ -5,7 +5,7 @@
  * ipa_interface.cpp - Image Processing Algorithm interface
  */
 
-#include <ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_interface.h>
 
 /**
  * \file ipa_interface.h
diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
index e254e5558d92..07ca9f5d7f53 100644
--- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
+++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
@@ -11,9 +11,9 @@
 #include <queue>
 #include <sys/mman.h>
 
-#include <ipa/raspberrypi.h>
 #include <libcamera/camera.h>
 #include <libcamera/control_ids.h>
+#include <libcamera/ipa/raspberrypi.h>
 #include <libcamera/logging.h>
 #include <libcamera/request.h>
 #include <libcamera/stream.h>
diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
index 7a0c8771ba54..d807fc2cf535 100644
--- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
+++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
@@ -13,10 +13,10 @@
 
 #include <linux/media-bus-format.h>
 
-#include <ipa/rkisp1.h>
 #include <libcamera/buffer.h>
 #include <libcamera/camera.h>
 #include <libcamera/control_ids.h>
+#include <libcamera/ipa/rkisp1.h>
 #include <libcamera/request.h>
 #include <libcamera/stream.h>
 
diff --git a/src/libcamera/pipeline/vimc/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
index 50a9f2df4c24..ca36348a5eb6 100644
--- a/src/libcamera/pipeline/vimc/vimc.cpp
+++ b/src/libcamera/pipeline/vimc/vimc.cpp
@@ -14,11 +14,11 @@
 #include <linux/media-bus-format.h>
 #include <linux/version.h>
 
-#include <ipa/ipa_interface.h>
-#include <ipa/ipa_module_info.h>
 #include <libcamera/camera.h>
 #include <libcamera/control_ids.h>
 #include <libcamera/controls.h>
+#include <libcamera/ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_module_info.h>
 #include <libcamera/request.h>
 #include <libcamera/stream.h>
 
diff --git a/src/libcamera/proxy/ipa_proxy_linux.cpp b/src/libcamera/proxy/ipa_proxy_linux.cpp
index 7d6f8799f8ff..be34f20aa857 100644
--- a/src/libcamera/proxy/ipa_proxy_linux.cpp
+++ b/src/libcamera/proxy/ipa_proxy_linux.cpp
@@ -7,8 +7,8 @@
 
 #include <vector>
 
-#include <ipa/ipa_interface.h>
-#include <ipa/ipa_module_info.h>
+#include <libcamera/ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_module_info.h>
 
 #include "libcamera/internal/ipa_module.h"
 #include "libcamera/internal/ipa_proxy.h"
diff --git a/src/libcamera/proxy/ipa_proxy_thread.cpp b/src/libcamera/proxy/ipa_proxy_thread.cpp
index 03d4c0d927b9..6fbebed2ba72 100644
--- a/src/libcamera/proxy/ipa_proxy_thread.cpp
+++ b/src/libcamera/proxy/ipa_proxy_thread.cpp
@@ -7,8 +7,8 @@
 
 #include <memory>
 
-#include <ipa/ipa_interface.h>
-#include <ipa/ipa_module_info.h>
+#include <libcamera/ipa/ipa_interface.h>
+#include <libcamera/ipa/ipa_module_info.h>
 
 #include "libcamera/internal/ipa_context_wrapper.h"
 #include "libcamera/internal/ipa_module.h"
diff --git a/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp b/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp
index 9ba94d01d0ca..0c4687f737a3 100644
--- a/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp
+++ b/src/libcamera/proxy/worker/ipa_proxy_linux_worker.cpp
@@ -9,8 +9,8 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#include <ipa/ipa_interface.h>
 #include <libcamera/event_dispatcher.h>
+#include <libcamera/ipa/ipa_interface.h>
 #include <libcamera/logging.h>
 
 #include "libcamera/internal/ipa_module.h"
diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp
index c394377dacd0..2f02af49cce9 100644
--- a/test/ipa/ipa_interface_test.cpp
+++ b/test/ipa/ipa_interface_test.cpp
@@ -14,10 +14,9 @@
 
 #include <libcamera/event_dispatcher.h>
 #include <libcamera/event_notifier.h>
+#include <libcamera/ipa/ipa_vimc.h>
 #include <libcamera/timer.h>
 
-#include <ipa/ipa_vimc.h>
-
 #include "libcamera/internal/device_enumerator.h"
 #include "libcamera/internal/ipa_manager.h"
 #include "libcamera/internal/ipa_module.h"
