@@ -1312,9 +1312,14 @@  void RPiCameraData::statsMetadataComplete(uint32_t bufferId, const ControlList &
 
 	handleStreamBuffer(buffer, &isp_[Isp::Stats]);
 
-	/* Fill the Request metadata buffer with what the IPA has provided */
+	/*
+	 * Add to the Request metadata buffer what the IPA has provided.
+	 *
+	 * Do not overwrite controls set by the pipeline handler, for example
+	 * SensorTimestamp.
+	 */
 	Request *request = requestQueue_.front();
-	request->metadata() = controls;
+	request->metadata().merge(const_cast<ControlList &>(controls));
 
 	/*
 	 * Also update the ScalerCrop in the metadata with what we actually
 
  
When a Request is completed upon receiving the IPA produced metadata, the metadata associated with the Request are over-written, deleting the information set at output buffer completion, such as the SensorTimestamp. This commit applies to the RaspberryPi pipeline handler the same change applied to IPU3 in commit 13a7ed7b1f1f ("libcamera: ipu3: Do not over-write metadata") but compared to that commit it uses the newly introduced ControlList::merge() function. Reviewed-by: Naushir Patuck <naush@raspberrypi.com> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> --- src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)