[libcamera-devel] [PATCH 7/7] android: Add CONTROL_MODE_OFF in template and static metadata

Paul Elder paul.elder at ideasonboard.com
Tue Nov 23 11:40:42 CET 2021


Add CONTROL_MODE_OFF to the available control modes in static metadata,
if both AE off and AWB off are available. Also set CONTROL_MODE_OFF in
the manual template.

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
 src/android/camera_capabilities.cpp | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
index f7397d27..5d90047b 100644
--- a/src/android/camera_capabilities.cpp
+++ b/src/android/camera_capabilities.cpp
@@ -999,7 +999,17 @@ int CameraCapabilities::initializeStaticMetadata()
 	staticMetadata_->addEntry(ANDROID_CONTROL_AWB_LOCK_AVAILABLE,
 				  awbLockAvailable);
 
-	char availableControlModes = ANDROID_CONTROL_MODE_AUTO;
+	/*
+	 * \todo Get this from some combination of the available AE and AWB
+	 * modes
+	 */
+	std::vector<uint8_t> availableControlModes = { ANDROID_CONTROL_MODE_AUTO };
+	if (staticMetadata_->entryContains<uint8_t>(ANDROID_CONTROL_AE_AVAILABLE_MODES,
+						    ANDROID_CONTROL_AE_MODE_OFF) &&
+	    staticMetadata_->entryContains<uint8_t>(ANDROID_CONTROL_AWB_AVAILABLE_MODES,
+						    ANDROID_CONTROL_AWB_MODE_OFF)) {
+		availableControlModes.push_back(ANDROID_CONTROL_MODE_OFF);
+	}
 	staticMetadata_->addEntry(ANDROID_CONTROL_AVAILABLE_MODES,
 				  availableControlModes);
 
@@ -1467,6 +1477,12 @@ std::unique_ptr<CameraMetadata> CameraCapabilities::requestTemplateManual() cons
 	if (!manualTemplate)
 		return nullptr;
 
+	if (staticMetadata_->entryContains<uint8_t>(ANDROID_CONTROL_AVAILABLE_MODES,
+						    ANDROID_CONTROL_MODE_OFF)) {
+		uint8_t mode = ANDROID_CONTROL_MODE_OFF;
+		manualTemplate->appendEntry(ANDROID_CONTROL_MODE, mode);
+	}
+
 	return manualTemplate;
 }
 
-- 
2.27.0



More information about the libcamera-devel mailing list