[libcamera-devel,v5,7/8] android: camera_device: Cache request metadata
diff mbox series

Message ID 20210126102825.147026-8-paul.elder@ideasonboard.com
State Accepted
Headers show
Series
  • Fill in android result metadata and EXIF tags
Related show

Commit Message

Paul Elder Jan. 26, 2021, 10:28 a.m. UTC
The settings in an android capture request may be null, in which case
the settings from the most recently submitted capture request should be
used. Cache the request settings to achieve this.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>

---
Changes in v5:
- expand todo

Changes in v4:
- use default CameraMetadata constructor for lastSettings_ (so no
  initialization in CameraDevice constructor)
- add todo for incremental caching of android request settings

Changes in v3:
- rebase on "android: camera device and metatada improvements", so it's
  a bit cleaner

New in v2
---
 src/android/camera_device.cpp | 10 ++++++++++
 src/android/camera_device.h   |  2 ++
 2 files changed, 12 insertions(+)

Patch
diff mbox series

diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index f0a24514..d297bdf4 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -1694,6 +1694,16 @@  int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques
 	 */
 	Camera3RequestDescriptor *descriptor =
 		new Camera3RequestDescriptor(camera_.get(), camera3Request);
+	/*
+	 * \todo The Android request model is incremental, settings passed in
+	 * previous requests are to be effective until overridden explicitly in
+	 * a new request. Do we need to cache settings incrementally here, or is
+	 * it handled by the Android camera service ?
+	 */
+	if (camera3Request->settings)
+		lastSettings_ = camera3Request->settings;
+	else
+		descriptor->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 4b0d8575..9cbfcad3 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -134,6 +134,8 @@  private:
 	int orientation_;
 
 	unsigned int maxJpegBufferSize_;
+
+	CameraMetadata lastSettings_;
 };
 
 #endif /* __ANDROID_CAMERA_DEVICE_H__ */