diff options
author | Eino-Ville Talvala <etalvala@google.com> | 2012-09-27 14:18:13 -0700 |
---|---|---|
committer | Eino-Ville Talvala <etalvala@google.com> | 2012-09-27 14:18:13 -0700 |
commit | b5d91138fddcb1c4acdc91ddc68a9f4097da5b40 (patch) | |
tree | f483004bb421e7ce7f44e04181280b759e4e1b16 /services/camera/libcameraservice | |
parent | 8000e368cbdcb8a2a712c9c92f6c97526b36f0ed (diff) | |
download | frameworks_av-b5d91138fddcb1c4acdc91ddc68a9f4097da5b40.zip frameworks_av-b5d91138fddcb1c4acdc91ddc68a9f4097da5b40.tar.gz frameworks_av-b5d91138fddcb1c4acdc91ddc68a9f4097da5b40.tar.bz2 |
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
Diffstat (limited to 'services/camera/libcameraservice')
-rw-r--r-- | services/camera/libcameraservice/camera2/Parameters.cpp | 17 | ||||
-rw-r--r-- | services/camera/libcameraservice/camera2/Parameters.h | 2 |
2 files changed, 12 insertions, 7 deletions
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 @@ status_t Parameters::initialize(const CameraMetadata *info) { 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 @@ status_t Parameters::initialize(const CameraMetadata *info) { // 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 @@ status_t Parameters::set(const String8& params) { 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 @@ status_t Parameters::set(const String8& params) { // 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 @@ struct Parameters { // 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; |