diff --git a/src/gstreamer/gstlibcamerasrc.cpp b/src/gstreamer/gstlibcamerasrc.cpp
index 11f15068..fda5610f 100644
--- a/src/gstreamer/gstlibcamerasrc.cpp
+++ b/src/gstreamer/gstlibcamerasrc.cpp
@@ -32,8 +32,6 @@
 #include <queue>
 #include <vector>
 
-#include <libcamera/base/mutex.h>
-
 #include <libcamera/camera.h>
 #include <libcamera/camera_manager.h>
 #include <libcamera/control_ids.h>
@@ -125,11 +123,9 @@ struct GstLibcameraSrcState {
 	 * be held while calling into other graph elements (e.g. when calling
 	 * gst_pad_query()).
 	 */
-	Mutex lock_;
-	std::queue<std::unique_ptr<RequestWrap>> queuedRequests_
-		LIBCAMERA_TSA_GUARDED_BY(lock_);
-	std::queue<std::unique_ptr<RequestWrap>> completedRequests_
-		LIBCAMERA_TSA_GUARDED_BY(lock_);
+	GMutex lock_;
+	std::queue<std::unique_ptr<RequestWrap>> queuedRequests_;
+	std::queue<std::unique_ptr<RequestWrap>> completedRequests_;
 
 	ControlList initControls_;
 	guint group_id_;
@@ -208,7 +204,7 @@ int GstLibcameraSrcState::queueRequest()
 	cam_->queueRequest(wrap->request_.get());
 
 	{
-		MutexLocker locker(lock_);
+		GLibLocker locker(&lock_);
 		queuedRequests_.push(std::move(wrap));
 	}
 
@@ -224,7 +220,7 @@ GstLibcameraSrcState::requestCompleted(Request *request)
 	std::unique_ptr<RequestWrap> wrap;
 
 	{
-		MutexLocker locker(lock_);
+		GLibLocker locker(&lock_);
 		wrap = std::move(queuedRequests_.front());
 		queuedRequests_.pop();
 	}
@@ -251,7 +247,7 @@ GstLibcameraSrcState::requestCompleted(Request *request)
 	}
 
 	{
-		MutexLocker locker(lock_);
+		GLibLocker locker(&lock_);
 		completedRequests_.push(std::move(wrap));
 	}
 
@@ -265,7 +261,7 @@ int GstLibcameraSrcState::processRequest()
 	int err = 0;
 
 	{
-		MutexLocker locker(lock_);
+		GLibLocker locker(&lock_);
 
 		if (!completedRequests_.empty()) {
 			wrap = std::move(completedRequests_.front());
@@ -639,7 +635,7 @@ gst_libcamera_src_task_leave([[maybe_unused]] GstTask *task,
 	state->cam_->stop();
 
 	{
-		MutexLocker locker(state->lock_);
+		GLibLocker locker(&state->lock_);
 		state->completedRequests_ = {};
 	}
 
diff --git a/src/gstreamer/meson.build b/src/gstreamer/meson.build
index eda246d7..77c79140 100644
--- a/src/gstreamer/meson.build
+++ b/src/gstreamer/meson.build
@@ -42,7 +42,7 @@ endif
 libcamera_gst = shared_library('gstlibcamera',
     libcamera_gst_sources,
     cpp_args : libcamera_gst_cpp_args,
-    dependencies : [libcamera_private, gstvideo_dep, gstallocator_dep],
+    dependencies : [libcamera_public, gstvideo_dep, gstallocator_dep],
     install: true,
     install_dir : '@0@/gstreamer-1.0'.format(get_option('libdir')),
 )
