Camera: Support querying session config with parameters
Existing isSessionConfigurationSupported doesn't consider session
parameters. However, many features are modeled as a session parameters.
Add a new API to query session configuration support considring session
parameters.
Test: Camera CTS
Bug: 309627704
Change-Id: If64d878cb0052c0f78db277ebe605d36197eb618
diff --git a/camera/camera2/SessionConfiguration.cpp b/camera/camera2/SessionConfiguration.cpp
index 7cf6087..2f1f22d 100644
--- a/camera/camera2/SessionConfiguration.cpp
+++ b/camera/camera2/SessionConfiguration.cpp
@@ -22,10 +22,13 @@
#include <camera/camera2/SessionConfiguration.h>
#include <camera/camera2/OutputConfiguration.h>
+#include <com_android_internal_camera_flags.h>
#include <binder/Parcel.h>
namespace android {
+namespace flags = com::android::internal::camera::flags;
+
status_t SessionConfiguration::readFromParcel(const android::Parcel* parcel) {
status_t err = OK;
int operatingMode = 0;
@@ -67,6 +70,22 @@
return err;
}
+ bool hasSessionParameters = false;
+ CameraMetadata settings;
+ if (flags::feature_combination_query()) {
+ if ((err = parcel->readBool(&hasSessionParameters)) != OK) {
+ ALOGE("%s: Failed to read hasSessionParameters flag from parcel", __FUNCTION__);
+ return err;
+ }
+
+ if (hasSessionParameters) {
+ if ((err = settings.readFromParcel(parcel)) != OK) {
+ ALOGE("%s: Failed to read metadata flag from parcel", __FUNCTION__);
+ return err;
+ }
+ }
+ }
+
mOperatingMode = operatingMode;
mInputWidth = inputWidth;
mInputHeight = inputHeight;
@@ -75,7 +94,10 @@
for (auto& stream : outputStreams) {
mOutputStreams.push_back(stream);
}
-
+ if (flags::feature_combination_query()) {
+ mHasSessionParameters = hasSessionParameters;
+ mSessionParameters = std::move(settings);
+ }
return err;
}
@@ -103,6 +125,16 @@
err = parcel->writeParcelableVector(mOutputStreams);
if (err != OK) return err;
+ if (flags::feature_combination_query()) {
+ err = parcel->writeBool(mHasSessionParameters);
+ if (err != OK) return err;
+
+ if (mHasSessionParameters) {
+ err = mSessionParameters.writeToParcel(parcel);
+ if (err != OK) return err;
+ }
+ }
+
return OK;
}