Camera2: Fix FPS value scaling between HAL2 and API

API assumes FPS values are in fixed-point with LSB 0.001; HAL2 just
uses ints with no fractional part.

HAL should probably use floats or something similar, but for now, fix
scaling so the two agree on FPS values.

Bug: 7230239
Change-Id: Ie18a4f11fc9d17d9ae2d04781511a273213eda55
diff --git a/services/camera/libcameraservice/camera2/Parameters.cpp b/services/camera/libcameraservice/camera2/Parameters.cpp
index ec85f9c..95e9d83 100644
--- a/services/camera/libcameraservice/camera2/Parameters.cpp
+++ b/services/camera/libcameraservice/camera2/Parameters.cpp
@@ -94,16 +94,16 @@
 
     params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE,
             String8::format("%d,%d",
-                    previewFpsRange[0],
-                    previewFpsRange[1]));
+                    previewFpsRange[0] * kFpsToApiScale,
+                    previewFpsRange[1] * kFpsToApiScale));
 
     {
         String8 supportedPreviewFpsRange;
         for (size_t i=0; i < availableFpsRanges.count; i += 2) {
             if (i != 0) supportedPreviewFpsRange += ",";
             supportedPreviewFpsRange += String8::format("(%d,%d)",
-                    availableFpsRanges.data.i32[i],
-                    availableFpsRanges.data.i32[i+1]);
+                    availableFpsRanges.data.i32[i] * kFpsToApiScale,
+                    availableFpsRanges.data.i32[i+1] * kFpsToApiScale);
         }
         params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE,
                 supportedPreviewFpsRange);
@@ -171,14 +171,14 @@
     // still have to do something sane for them
 
     params.set(CameraParameters::KEY_PREVIEW_FRAME_RATE,
-            previewFpsRange[0]);
+            previewFpsRange[0] * kFpsToApiScale);
 
     {
         String8 supportedPreviewFrameRates;
         for (size_t i=0; i < availableFpsRanges.count; i += 2) {
             if (i != 0) supportedPreviewFrameRates += ",";
             supportedPreviewFrameRates += String8::format("%d",
-                    availableFpsRanges.data.i32[i]);
+                    availableFpsRanges.data.i32[i] * kFpsToApiScale);
         }
         params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES,
                 supportedPreviewFrameRates);
@@ -894,6 +894,9 @@
     bool fpsRangeChanged = false;
     newParams.getPreviewFpsRange(&validatedParams.previewFpsRange[0],
             &validatedParams.previewFpsRange[1]);
+    validatedParams.previewFpsRange[0] /= kFpsToApiScale;
+    validatedParams.previewFpsRange[1] /= kFpsToApiScale;
+
     if (validatedParams.previewFpsRange[0] != previewFpsRange[0] ||
             validatedParams.previewFpsRange[1] != previewFpsRange[1]) {
         fpsRangeChanged = true;
@@ -943,7 +946,7 @@
     // Deprecated, only use if the preview fps range is unchanged this time.
     // The single-value FPS is the same as the minimum of the range.
     if (!fpsRangeChanged) {
-        validatedParams.previewFps = newParams.getPreviewFrameRate();
+        validatedParams.previewFps = newParams.getPreviewFrameRate() / kFpsToApiScale;
         if (validatedParams.previewFps != previewFps) {
             camera_metadata_ro_entry_t availableFrameRates =
                 staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
diff --git a/services/camera/libcameraservice/camera2/Parameters.h b/services/camera/libcameraservice/camera2/Parameters.h
index 7789ebb..5dd3391 100644
--- a/services/camera/libcameraservice/camera2/Parameters.h
+++ b/services/camera/libcameraservice/camera2/Parameters.h
@@ -223,6 +223,8 @@
     // Map from camera orientation + facing to gralloc transform enum
     static int degToTransform(int degrees, bool mirror);
 
+    static const int kFpsToApiScale = 1000;
+
     // Transform between (-1000,-1000)-(1000,1000) normalized coords from camera
     // API and HAL2 (0,0)-(activePixelArray.width/height) coordinates
     int arrayXToNormalized(int width) const;