summaryrefslogtreecommitdiffstats
path: root/camera/CameraHal.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'camera/CameraHal.cpp')
-rw-r--r--camera/CameraHal.cpp81
1 files changed, 45 insertions, 36 deletions
diff --git a/camera/CameraHal.cpp b/camera/CameraHal.cpp
index 720d2d6..b4fa319 100644
--- a/camera/CameraHal.cpp
+++ b/camera/CameraHal.cpp
@@ -385,7 +385,6 @@ int CameraHal::setParameters(const android::CameraParameters& params)
int w, h;
int framerate;
- int maxFPS, minFPS;
const char *valstr = NULL;
int varint = 0;
status_t ret = NO_ERROR;
@@ -684,54 +683,63 @@ int CameraHal::setParameters(const android::CameraParameters& params)
#endif
// Variable framerate ranges have higher priority over
- // deprecated constant FPS. "KEY_PREVIEW_FPS_RANGE" should
- // be cleared by the client in order for constant FPS to get
- // applied.
- // If Port FPS needs to be used for configuring, then FPS RANGE should not be set by the APP.
- valstr = params.get(android::CameraParameters::KEY_PREVIEW_FPS_RANGE);
- if (valstr != NULL && strlen(valstr)) {
- int curMaxFPS = 0;
- int curMinFPS = 0;
+ // deprecated constant FPS.
+ // There is possible 3 situations :
+ // 1) User change FPS range and HAL use it for fps port value (don't care about
+ // changed or not const FPS).
+ // 2) User change single FPS and not change FPS range - will be applyed single FPS value
+ // to port.
+ // 3) Both FPS range and const FPS are unchanged - FPS range will be applied to port.
+
+ int curFramerate = 0;
+ bool frameRangeUpdated = false, fpsUpdated = false;
+ int curMaxFPS = 0, curMinFPS = 0, maxFPS = 0, minFPS = 0;
- // APP wants to set FPS range
- // Set framerate = MAXFPS
- CAMHAL_LOGDA("APP IS CHANGING FRAME RATE RANGE");
+ mParameters.getPreviewFpsRange(&curMinFPS, &curMaxFPS);
+ params.getPreviewFpsRange(&minFPS, &maxFPS);
- mParameters.getPreviewFpsRange(&curMinFPS, &curMaxFPS);
- CAMHAL_LOGDB("## current minFPS = %d; maxFPS=%d",curMinFPS, curMaxFPS);
+ curFramerate = mParameters.getPreviewFrameRate();
+ framerate = params.getPreviewFrameRate();
- params.getPreviewFpsRange(&minFPS, &maxFPS);
- CAMHAL_LOGDB("## requested minFPS = %d; maxFPS=%d",minFPS, maxFPS);
- // Validate VFR
+ valstr = params.get(android::CameraParameters::KEY_PREVIEW_FPS_RANGE);
+ if (valstr != NULL && strlen(valstr) &&
+ ((curMaxFPS != maxFPS) || (curMinFPS != minFPS))) {
+ CAMHAL_LOGDB("## current minFPS = %d; maxFPS=%d", curMinFPS, curMaxFPS);
+ CAMHAL_LOGDB("## requested minFPS = %d; maxFPS=%d", minFPS, maxFPS);
if (!isFpsRangeValid(minFPS, maxFPS, params.get(android::CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE)) &&
!isFpsRangeValid(minFPS, maxFPS, params.get(TICameraParameters::KEY_FRAMERATE_RANGES_EXT_SUPPORTED))) {
- CAMHAL_LOGEA("Invalid FPS Range");
+ CAMHAL_LOGEA("Trying to set invalid FPS Range (%d,%d)", minFPS, maxFPS);
return BAD_VALUE;
- } else {
- framerate = maxFPS / CameraHal::VFR_SCALE;
- mParameters.setPreviewFrameRate(framerate);
- CAMHAL_LOGDB("SET FRAMERATE %d", framerate);
- mParameters.set(android::CameraParameters::KEY_PREVIEW_FPS_RANGE, valstr);
- CAMHAL_LOGDB("FPS Range = %s", valstr);
- if ( curMaxFPS == (FRAME_RATE_HIGH_HD * CameraHal::VFR_SCALE) &&
- maxFPS < (FRAME_RATE_HIGH_HD * CameraHal::VFR_SCALE) ) {
- restartPreviewRequired = true;
- }
}
- } else {
- framerate = params.getPreviewFrameRate();
+ mParameters.set(android::CameraParameters::KEY_PREVIEW_FPS_RANGE, valstr);
+ CAMHAL_LOGDB("FPS Range = %s", valstr);
+ if ( curMaxFPS == (FRAME_RATE_HIGH_HD * CameraHal::VFR_SCALE) &&
+ maxFPS < (FRAME_RATE_HIGH_HD * CameraHal::VFR_SCALE) ) {
+ restartPreviewRequired = true;
+ }
+ frameRangeUpdated = true;
+ }
+
+ valstr = params.get(android::CameraParameters::KEY_PREVIEW_FRAME_RATE);
+ if (valstr != NULL && strlen(valstr) && (framerate != curFramerate)) {
+ CAMHAL_LOGD("current framerate = %d reqested framerate = %d", curFramerate, framerate);
if (!isParameterValid(framerate, params.get(android::CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES)) &&
!isParameterValid(framerate, params.get(TICameraParameters::KEY_FRAMERATES_EXT_SUPPORTED))) {
- CAMHAL_LOGEA("Invalid frame rate");
+ CAMHAL_LOGEA("Trying to set invalid frame rate %d", framerate);
return BAD_VALUE;
}
- char tmpBuffer[MAX_PROP_VALUE_LENGTH];
+ mParameters.setPreviewFrameRate(framerate);
+ CAMHAL_LOGDB("Set frame rate %d", framerate);
+ fpsUpdated = true;
+ }
+ if (frameRangeUpdated) {
+ mParameters.set(TICameraParameters::KEY_PREVIEW_FRAME_RATE_RANGE,
+ mParameters.get(android::CameraParameters::KEY_PREVIEW_FPS_RANGE));
+ } else if (fpsUpdated) {
+ char tmpBuffer[MAX_PROP_VALUE_LENGTH];
sprintf(tmpBuffer, "%d,%d", framerate * CameraHal::VFR_SCALE, framerate * CameraHal::VFR_SCALE);
- mParameters.setPreviewFrameRate(framerate);
- CAMHAL_LOGDB("SET FRAMERATE %d", framerate);
- mParameters.set(android::CameraParameters::KEY_PREVIEW_FPS_RANGE, tmpBuffer);
- CAMHAL_LOGDB("FPS Range = %s", tmpBuffer);
+ mParameters.set(TICameraParameters::KEY_PREVIEW_FRAME_RATE_RANGE, tmpBuffer);
}
if ((valstr = params.get(TICameraParameters::KEY_GBCE)) != NULL) {
@@ -4555,6 +4563,7 @@ void CameraHal::initDefaultParameters()
//Insert default values
p.setPreviewFrameRate(atoi(mCameraProperties->get(CameraProperties::PREVIEW_FRAME_RATE)));
p.set(android::CameraParameters::KEY_PREVIEW_FPS_RANGE, mCameraProperties->get(CameraProperties::FRAMERATE_RANGE));
+ p.set(TICameraParameters::KEY_PREVIEW_FRAME_RATE_RANGE, mCameraProperties->get(CameraProperties::FRAMERATE_RANGE));
p.setPreviewFormat(mCameraProperties->get(CameraProperties::PREVIEW_FORMAT));
p.setPictureFormat(mCameraProperties->get(CameraProperties::PICTURE_FORMAT));
p.set(android::CameraParameters::KEY_JPEG_QUALITY, mCameraProperties->get(CameraProperties::JPEG_QUALITY));