summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/camera/libcameraservice/Camera2Client.cpp8
-rw-r--r--services/camera/libcameraservice/camera2/Parameters.cpp12
-rw-r--r--services/camera/libcameraservice/camera2/Parameters.h4
3 files changed, 19 insertions, 5 deletions
diff --git a/services/camera/libcameraservice/Camera2Client.cpp b/services/camera/libcameraservice/Camera2Client.cpp
index a83977f..d315abb 100644
--- a/services/camera/libcameraservice/Camera2Client.cpp
+++ b/services/camera/libcameraservice/Camera2Client.cpp
@@ -624,7 +624,13 @@ status_t Camera2Client::startPreview() {
status_t Camera2Client::startPreviewL(Parameters &params, bool restart) {
ATRACE_CALL();
status_t res;
- if (params.state >= Parameters::PREVIEW && !restart) {
+ if (params.state == Parameters::PREVIEW && !restart) {
+ // Succeed attempt to re-enter preview state
+ ALOGI("%s: Not starting preview; already in preview state.",
+ __FUNCTION__);
+ return OK;
+ }
+ if (params.state > Parameters::PREVIEW && !restart) {
ALOGE("%s: Can't start preview in state %s",
__FUNCTION__,
Parameters::getStateName(params.state));
diff --git a/services/camera/libcameraservice/camera2/Parameters.cpp b/services/camera/libcameraservice/camera2/Parameters.cpp
index ec85f9c..6383434 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);
@@ -170,6 +170,7 @@ status_t Parameters::initialize(const CameraMetadata *info) {
// PREVIEW_FRAME_RATE / SUPPORTED_PREVIEW_FRAME_RATES are deprecated, but
// still have to do something sane for them
+ // NOTE: Not scaled like FPS range values are.
params.set(CameraParameters::KEY_PREVIEW_FRAME_RATE,
previewFpsRange[0]);
@@ -894,6 +895,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;
diff --git a/services/camera/libcameraservice/camera2/Parameters.h b/services/camera/libcameraservice/camera2/Parameters.h
index 7789ebb..af23a4e 100644
--- a/services/camera/libcameraservice/camera2/Parameters.h
+++ b/services/camera/libcameraservice/camera2/Parameters.h
@@ -223,6 +223,10 @@ struct Parameters {
// Map from camera orientation + facing to gralloc transform enum
static int degToTransform(int degrees, bool mirror);
+ // API specifies FPS ranges are done in fixed point integer, with LSB = 0.001.
+ // Note that this doesn't apply to the (deprecated) single FPS value.
+ 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;