[libcamera-devel] [RFC PATCH v4 15/21] android: Plumb AwbMode control
Paul Elder
paul.elder at ideasonboard.com
Fri Jul 16 12:56:25 CEST 2021
Plumb the AwbMode control into the HAL for
CONTROL_AWB_AVAILABLE_MODES for static metadata.
Bug: https://bugs.libcamera.org/show_bug.cgi?id=44
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
TODO: check templates
---
Changes in v4:
- remove capability check
- plumb into processControls
Changes in v3:
- use new setMetadata
- rebase on camera capabilities refactor
---
src/android/camera_capabilities.cpp | 14 +++++---------
src/android/camera_device.cpp | 9 +++++++--
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
index ac3d88b5..85c39498 100644
--- a/src/android/camera_capabilities.cpp
+++ b/src/android/camera_capabilities.cpp
@@ -910,15 +910,11 @@ int CameraCapabilities::initializeStaticMetadata()
staticMetadata_->addEntry(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES,
availableStabilizationModes);
- /*
- * \todo Inspect the camera capabilities to report the available
- * AWB modes. Default to AUTO as CTS tests require it.
- */
- std::vector<uint8_t> availableAwbModes = {
- ANDROID_CONTROL_AWB_MODE_AUTO,
- };
- staticMetadata_->addEntry(ANDROID_CONTROL_AWB_AVAILABLE_MODES,
- availableAwbModes);
+ setMetadata<uint8_t, int32_t>(
+ staticMetadata_.get(),
+ ANDROID_CONTROL_AWB_AVAILABLE_MODES,
+ controlsInfo, &controls::AwbMode,
+ { ANDROID_CONTROL_AWB_MODE_AUTO });
std::vector<int32_t> availableMaxRegions = {
0, 0, 0,
diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index 1721e0e8..8a9abd34 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -787,6 +787,9 @@ int CameraDevice::processControls(Camera3RequestDescriptor *descriptor)
if (settings.getEntry(ANDROID_CONTROL_AE_LOCK, &entry))
controls.set(controls::AeLock, *entry.data.u8);
+ if (settings.getEntry(ANDROID_CONTROL_AWB_MODE, &entry))
+ controls.set(controls::AwbMode, *entry.data.u8);
+
return 0;
}
@@ -1244,8 +1247,10 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) cons
value = ANDROID_CONTROL_AF_TRIGGER_IDLE;
resultMetadata->addEntry(ANDROID_CONTROL_AF_TRIGGER, value);
- value = ANDROID_CONTROL_AWB_MODE_AUTO;
- resultMetadata->addEntry(ANDROID_CONTROL_AWB_MODE, value);
+ if (metadata.contains(controls::AwbMode)) {
+ uint8_t awbMode = metadata.get<int32_t>(controls::AwbMode);
+ resultMetadata->addEntry(ANDROID_CONTROL_AWB_MODE, awbMode);
+ }
value = ANDROID_CONTROL_AWB_LOCK_OFF;
resultMetadata->addEntry(ANDROID_CONTROL_AWB_LOCK, value);
--
2.27.0
More information about the libcamera-devel
mailing list