diff --git a/src/meson.build b/src/meson.build
index 8eb8f05b362f..9b63c8e845d8 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -55,7 +55,21 @@ if (pipelines.contains('virtual') or get_option('android').allowed()) and \
          '-Wno-unused-parameter')
     libyuv_vars.append_link_args('-ljpeg')
     libyuv = cmake.subproject('libyuv', options : libyuv_vars)
-    libyuv_dep = libyuv.dependency('yuv')
+
+    # Meson fails to apply the -fPIC flag to static libraries produced by CMake
+    # that wraps other static libraries without adding any source file, despite
+    # setting CMAKE_POSITION_INDEPENDENT_CODE to ON. See
+    # https://github.com/mesonbuild/meson/issues/10764.
+    #
+    # Work around the issue by wrapping the libyuv static library into another
+    # static library with 'pic' set to true.
+    libyuv_static = static_library('libyuv-static',
+                                   dependencies : libyuv.dependency('yuv'),
+                                   pic : true,
+                                   install : false)
+    libyuv_include = libyuv.include_directories('yuv')
+    libyuv_dep = declare_dependency(link_with : libyuv_static,
+                                    include_directories : libyuv_include)
 endif
 
 # libcamera must be built first as a dependency to the other components.
diff --git a/subprojects/libyuv.wrap b/subprojects/libyuv.wrap
index 3417e73f376c..70039b705925 100644
--- a/subprojects/libyuv.wrap
+++ b/subprojects/libyuv.wrap
@@ -3,4 +3,4 @@
 [wrap-git]
 directory = libyuv
 url = https://chromium.googlesource.com/libyuv/libyuv.git
-revision = 93b1b332cd60b56ab90aea14182755e379c28a80
+revision = 23d416d6f32539bc7e44afa2bec6ce0128dbed0b
