camera: Fix sensor pixel modes unparcelling in OutputConfiguration.

Also fix a corner case in checkAndOverrideSensorPixelModes

Bug: 184396641

Test: atest RobustnessTest.java#testConfigureInvalidSensorPixelModes

Change-Id: I990a8e4c16a6442a146b1d6c867d4e8132954a70
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
index 6dcf440..5afdfb9 100644
--- a/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
+++ b/services/camera/libcameraservice/utils/SessionConfigurationUtils.cpp
@@ -669,15 +669,22 @@
         const std::vector<int32_t> &sensorPixelModesUsed, int format, int width, int height,
         const CameraMetadata &staticInfo, bool flexibleConsumer,
         std::unordered_set<int32_t> *overriddenSensorPixelModesUsed) {
+
+    const std::unordered_set<int32_t> &sensorPixelModesUsedSet =
+            convertToSet(sensorPixelModesUsed);
     if (!isUltraHighResolutionSensor(staticInfo)) {
+        if (sensorPixelModesUsedSet.find(ANDROID_SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION) !=
+                sensorPixelModesUsedSet.end()) {
+            // invalid value for non ultra high res sensors
+            return BAD_VALUE;
+        }
         overriddenSensorPixelModesUsed->clear();
         overriddenSensorPixelModesUsed->insert(ANDROID_SENSOR_PIXEL_MODE_DEFAULT);
         return OK;
     }
 
     StreamConfigurationPair streamConfigurationPair = getStreamConfigurationPair(staticInfo);
-    const std::unordered_set<int32_t> &sensorPixelModesUsedSet =
-            convertToSet(sensorPixelModesUsed);
+
     bool isInDefaultStreamConfigurationMap =
             inStreamConfigurationMap(format, width, height,
                     streamConfigurationPair.mDefaultStreamConfigurationMap);