diff options
-rw-r--r-- | services/camera/libcameraservice/Camera2Client.cpp | 8 | ||||
-rw-r--r-- | services/camera/libcameraservice/camera2/Parameters.cpp | 12 | ||||
-rw-r--r-- | services/camera/libcameraservice/camera2/Parameters.h | 4 |
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 ¶ms, 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; |