Camera: Filter small JPEG sizes based on targetSdkVersion
To maintain backward compatbility, filter out small (<1080p) JPEG sizes
for Performance Class 12 primary cameras in camera service if the
application targets sdk version 31.
Maintain old behavior for applications targetting older sdk version.
Also remove some redundant code in CameraProviderManager.
Test: Camera CTS
Bug: 187913092
Change-Id: I302fb90e331dc9c7da26f51ab99ab150bba68493
diff --git a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
index 5afdfb9..ed6ee9b 100644
--- a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
+++ b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
@@ -13,6 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+#include <cutils/properties.h>
+
#include "SessionConfigurationUtils.h"
#include "../api2/DepthCompositeStream.h"
#include "../api2/HeicCompositeStream.h"
@@ -29,6 +31,11 @@
namespace android {
namespace camera3 {
+int32_t SessionConfigurationUtils::PERF_CLASS_LEVEL =
+ property_get_int32("ro.odm.build.media_performance_class", 0);
+
+bool SessionConfigurationUtils::IS_PERF_CLASS = (PERF_CLASS_LEVEL == SDK_VERSION_S);
+
void StreamConfiguration::getStreamConfigurations(
const CameraMetadata &staticInfo, int configuration,
std::unordered_map<int, std::vector<StreamConfiguration>> *scm) {
@@ -480,7 +487,8 @@
const SessionConfiguration& sessionConfiguration,
const String8 &logicalCameraId, const CameraMetadata &deviceInfo,
metadataGetter getMetadata, const std::vector<std::string> &physicalCameraIds,
- hardware::camera::device::V3_7::StreamConfiguration &streamConfiguration, bool *earlyExit) {
+ hardware::camera::device::V3_7::StreamConfiguration &streamConfiguration,
+ bool overrideForPerfClass, bool *earlyExit) {
auto operatingMode = sessionConfiguration.getOperatingMode();
binder::Status res = checkOperatingMode(operatingMode, deviceInfo, logicalCameraId);
@@ -539,7 +547,8 @@
String8 physicalCameraId = String8(it.getPhysicalCameraId());
std::vector<int32_t> sensorPixelModesUsed = it.getSensorPixelModesUsed();
- const CameraMetadata &physicalDeviceInfo = getMetadata(physicalCameraId);
+ const CameraMetadata &physicalDeviceInfo = getMetadata(physicalCameraId,
+ overrideForPerfClass);
const CameraMetadata &metadataChosen =
physicalCameraId.size() > 0 ? physicalDeviceInfo : deviceInfo;
@@ -768,5 +777,13 @@
return true;
}
+bool SessionConfigurationUtils::targetPerfClassPrimaryCamera(
+ const std::set<std::string>& perfClassPrimaryCameraIds, const std::string& cameraId,
+ int targetSdkVersion) {
+ bool isPerfClassPrimaryCamera =
+ perfClassPrimaryCameraIds.find(cameraId) != perfClassPrimaryCameraIds.end();
+ return targetSdkVersion >= SDK_VERSION_S && isPerfClassPrimaryCamera;
+}
+
} // namespace camera3
} // namespace android