summaryrefslogtreecommitdiffstats
path: root/services/camera/libcameraservice
diff options
context:
space:
mode:
authorEino-Ville Talvala <etalvala@google.com>2012-09-27 14:18:13 -0700
committerEino-Ville Talvala <etalvala@google.com>2012-09-27 14:18:13 -0700
commitb5d91138fddcb1c4acdc91ddc68a9f4097da5b40 (patch)
treef483004bb421e7ce7f44e04181280b759e4e1b16 /services/camera/libcameraservice
parent8000e368cbdcb8a2a712c9c92f6c97526b36f0ed (diff)
downloadframeworks_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.cpp17
-rw-r--r--services/camera/libcameraservice/camera2/Parameters.h2
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;