summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/CameraSource.cpp
diff options
context:
space:
mode:
authorPraveen Chavan <pchavan@codeaurora.org>2015-07-23 22:24:59 -0700
committerLinux Build Service Account <lnxbuild@localhost>2015-10-06 03:24:24 -0600
commitb5ccf81c19a7e9ce9b330abe734f1bae76d50796 (patch)
tree7a3e03ef5f6ba11b043b5be7f177a7c17051f7a3 /media/libstagefright/CameraSource.cpp
parentc22f84212a7ac2398069fa56b91e1d4d668e8c6e (diff)
downloadframeworks_av-b5ccf81c19a7e9ce9b330abe734f1bae76d50796.zip
frameworks_av-b5ccf81c19a7e9ce9b330abe734f1bae76d50796.tar.gz
frameworks_av-b5ccf81c19a7e9ce9b330abe734f1bae76d50796.tar.bz2
Stagefright: Allow setting high-framerates in CameraSource
CameraSource (legacy Camera) treats framerate set via MediaRecorder.setVideoFrameRate as _both_ camera-preview-fps and video-encoder-fps. Trying to set high fps for encoder will inadvertently fail trying to set the same value for camera-preview. Read the custom camera parameter to detect if this is a high-speed request, selectively set the fps only for video, and default to 30fps for preview fps. Change-Id: If66211dd81b2a08d4df4c6f23e87304e9e7013f4
Diffstat (limited to 'media/libstagefright/CameraSource.cpp')
-rw-r--r--media/libstagefright/CameraSource.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp
index 66280da..ed3d520 100644
--- a/media/libstagefright/CameraSource.cpp
+++ b/media/libstagefright/CameraSource.cpp
@@ -298,6 +298,12 @@ status_t CameraSource::isCameraColorFormatSupported(
return OK;
}
+static int32_t getHighSpeedFrameRate(const CameraParameters& params) {
+ const char* hsr = params.get("video-hsr");
+ int32_t rate = (hsr != NULL && strncmp(hsr, "off", 3)) ? atoi(hsr) : 0;
+ return rate > 240 ? 240 : rate;
+}
+
/*
* Configure the camera to use the requested video size
* (width and height) and/or frame rate. If both width and
@@ -350,6 +356,10 @@ status_t CameraSource::configureCamera(
params->get(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES);
CHECK(supportedFrameRates != NULL);
ALOGV("Supported frame rates: %s", supportedFrameRates);
+ if (getHighSpeedFrameRate(*params)) {
+ ALOGI("Use default 30fps for HighSpeed %dfps", frameRate);
+ frameRate = 30;
+ }
char buf[4];
snprintf(buf, 4, "%d", frameRate);
if (strstr(supportedFrameRates, buf) == NULL) {
@@ -451,6 +461,8 @@ status_t CameraSource::checkFrameRate(
ALOGE("Failed to retrieve preview frame rate (%d)", frameRateActual);
return UNKNOWN_ERROR;
}
+ int32_t highSpeedRate = getHighSpeedFrameRate(params);
+ frameRateActual = highSpeedRate ? highSpeedRate : frameRateActual;
// Check the actual video frame rate against the target/requested
// video frame rate.