diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 1b803c92..4f92cecc 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -337,7 +337,9 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor()
 
 CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr<Camera> &camera)
 	: id_(id), running_(false), camera_(camera), staticMetadata_(nullptr),
-	  facing_(CAMERA_FACING_FRONT), orientation_(0)
+	  facing_(CAMERA_FACING_FRONT), orientation_(0),
+	  /* \todo Keep this in sync with the actual number of entries. */
+	  lastSettings_(CameraMetadata(40, 163))
 {
 	camera_->requestCompleted.connect(this, &CameraDevice::requestComplete);
 
@@ -1692,12 +1694,12 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
 	 * The descriptor and the associated memory reserved here are freed
 	 * at request complete time.
 	 */
-	/* \todo Handle null request settings */
-	CameraMetadata settings(camera3Request->settings);
+	if (camera3Request->settings)
+		lastSettings_ = CameraMetadata(camera3Request->settings);
 	Camera3RequestDescriptor *descriptor =
 		new Camera3RequestDescriptor(camera_.get(), camera3Request->frame_number,
 					     camera3Request->num_output_buffers,
-					     settings);
+					     lastSettings_);
 
 	LOG(HAL, Debug) << "Queueing Request to libcamera with "
 			<< descriptor->numBuffers_ << " HAL streams";
diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index 111a7d8f..d3a9f777 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -139,6 +139,8 @@ private:
 	int orientation_;
 
 	unsigned int maxJpegBufferSize_;
+
+	CameraMetadata lastSettings_;
 };
 
 #endif /* __ANDROID_CAMERA_DEVICE_H__ */
