diff --git a/src/libcamera/include/pipeline_handler.h b/src/libcamera/include/pipeline_handler.h
index 320740746bc6e998..6024357e266c2e2b 100644
--- a/src/libcamera/include/pipeline_handler.h
+++ b/src/libcamera/include/pipeline_handler.h
@@ -39,6 +39,8 @@ public:
 	}
 	virtual ~CameraData() {}
 
+	Request *requestFromBuffer(Buffer *buffer);
+
 	Camera *camera_;
 	PipelineHandler *pipe_;
 	std::list<Request *> queuedRequests_;
diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
index f9ae767d529d44d9..d70e286661aded8e 100644
--- a/src/libcamera/pipeline_handler.cpp
+++ b/src/libcamera/pipeline_handler.cpp
@@ -58,6 +58,16 @@ LOG_DEFINE_CATEGORY(Pipeline)
  * exists.
  */
 
+Request *CameraData::requestFromBuffer(Buffer *buffer)
+{
+	for (Request *request : queuedRequests_)
+		for (const auto &it : request->buffers())
+			if (it.second == buffer)
+				return request;
+
+	return nullptr;
+}
+
 /**
  * \var CameraData::camera_
  * \brief The camera related to this CameraData instance
