diff --git a/src/libcamera/pipeline/meson.build b/src/libcamera/pipeline/meson.build
index 0d466225a72e..c1a6ab0484f0 100644
--- a/src/libcamera/pipeline/meson.build
+++ b/src/libcamera/pipeline/meson.build
@@ -1,7 +1,4 @@
-libcamera_sources += files([
-    'uvcvideo.cpp',
-    'vimc.cpp',
-])
-
 subdir('ipu3')
 subdir('rkisp1')
+subdir('uvcvideo')
+subdir('vimc')
diff --git a/src/libcamera/pipeline/uvcvideo/meson.build b/src/libcamera/pipeline/uvcvideo/meson.build
new file mode 100644
index 000000000000..c19ae2389f48
--- /dev/null
+++ b/src/libcamera/pipeline/uvcvideo/meson.build
@@ -0,0 +1,3 @@
+libcamera_sources += files([
+    'uvcvideo.cpp',
+])
diff --git a/src/libcamera/pipeline/uvcvideo.cpp b/src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
similarity index 100%
rename from src/libcamera/pipeline/uvcvideo.cpp
rename to src/libcamera/pipeline/uvcvideo/uvcvideo.cpp
diff --git a/src/libcamera/pipeline/vimc/meson.build b/src/libcamera/pipeline/vimc/meson.build
new file mode 100644
index 000000000000..615ecd20f1a2
--- /dev/null
+++ b/src/libcamera/pipeline/vimc/meson.build
@@ -0,0 +1,3 @@
+libcamera_sources += files([
+    'vimc.cpp',
+])
diff --git a/src/libcamera/pipeline/vimc.cpp b/src/libcamera/pipeline/vimc/vimc.cpp
similarity index 100%
rename from src/libcamera/pipeline/vimc.cpp
rename to src/libcamera/pipeline/vimc/vimc.cpp
