Camera: derive post RAW sensitivity keys for BC
Derive post RAW sensitivity keys for devices
earlier than HAL3.4.
Bug: 27950762
Change-Id: Icc2232cb722c61a5878a81706885303b15ddee3e
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
index 1caf157..e395935 100644
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
@@ -200,6 +200,14 @@
mDeviceInfo = info.static_camera_characteristics;
mHal3Device = device;
+ // Determine whether we need to derive sensitivity boost values for older devices.
+ // If post-RAW sensitivity boost range is listed, so should post-raw sensitivity control
+ // be listed (as the default value 100)
+ if (mDeviceVersion < CAMERA_DEVICE_API_VERSION_3_4 &&
+ mDeviceInfo.exists(ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE)) {
+ mDerivePostRawSensKey = true;
+ }
+
internalUpdateStatusLocked(STATUS_UNCONFIGURED);
mNextStreamId = 0;
mDummyStreamId = NO_STREAM;
@@ -1310,9 +1318,19 @@
__FUNCTION__, templateId);
return BAD_VALUE;
}
- *request = rawRequest;
+
mRequestTemplateCache[templateId] = rawRequest;
+ // Derive some new keys for backward compatibility
+ if (mDerivePostRawSensKey && !mRequestTemplateCache[templateId].exists(
+ ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST)) {
+ int32_t defaultBoost[1] = {100};
+ mRequestTemplateCache[templateId].update(
+ ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST,
+ defaultBoost, 1);
+ }
+
+ *request = mRequestTemplateCache[templateId];
return OK;
}
@@ -2256,6 +2274,15 @@
captureResult.mMetadata.append(collectedPartialResult);
}
+ // Derive some new keys for backward compaibility
+ if (mDerivePostRawSensKey && !captureResult.mMetadata.exists(
+ ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST)) {
+ int32_t defaultBoost[1] = {100};
+ captureResult.mMetadata.update(
+ ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST,
+ defaultBoost, 1);
+ }
+
captureResult.mMetadata.sort();
// Check that there's a timestamp in the result metadata