@@ -7,6 +7,7 @@
#include "camera_capabilities.h"
+#include <algorithm>
#include <array>
#include <cmath>
#include <map>
@@ -561,11 +562,19 @@ int CameraCapabilities::initializeStaticMetadata()
staticMetadata_->addEntry(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES,
aeAvailableAntiBandingModes);
- std::vector<uint8_t> aeAvailableModes = {
- ANDROID_CONTROL_AE_MODE_ON,
- };
- staticMetadata_->addEntry(ANDROID_CONTROL_AE_AVAILABLE_MODES,
- aeAvailableModes);
+ std::vector<uint8_t> aeModes = setMetadata<uint8_t, bool>(
+ staticMetadata_.get(),
+ ANDROID_CONTROL_AE_AVAILABLE_MODES,
+ controlsInfo, &controls::AeEnable,
+ std::vector<uint8_t>({ ANDROID_CONTROL_AE_MODE_ON }));
+
+ if (std::find(aeModes.begin(), aeModes.end(),
+ ANDROID_CONTROL_AE_MODE_OFF) == aeModes.end()) {
+ LOG(HAL, Info) << "AE cannot be turned off";
+ hwLevels.erase(ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_FULL);
+ /* \todo Double check if this is the correct capability */
+ capabilities.erase(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR);
+ }
int64_t minFrameDurationNsec = -1;
int64_t maxFrameDurationNsec = -1;
@@ -1202,8 +1202,10 @@ CameraDevice::getResultMetadata(const Camera3RequestDescriptor &descriptor) cons
value = ANDROID_CONTROL_AE_LOCK_OFF;
resultMetadata->addEntry(ANDROID_CONTROL_AE_LOCK, value);
- value = ANDROID_CONTROL_AE_MODE_ON;
- resultMetadata->addEntry(ANDROID_CONTROL_AE_MODE, value);
+ if (metadata.contains(controls::AeEnable)) {
+ uint8_t aeMode = metadata.get<bool>(controls::AeEnable);
+ resultMetadata->addEntry(ANDROID_CONTROL_AE_MODE, aeMode);
+ }
if (settings.getEntry(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, &entry))
/*
Plumb the AeEnable control into the HAL for CONTROL_AE_AVAILABLE_MODES for static metadata, and CONTROL_AE_MODE for result metadata. Bug: https://bugs.libcamera.org/show_bug.cgi?id=42 Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> --- Changes in v3 - use new setMetadata - rebase on camera capabilities refactor --- src/android/camera_capabilities.cpp | 19 ++++++++++++++----- src/android/camera_device.cpp | 6 ++++-- 2 files changed, 18 insertions(+), 7 deletions(-)