summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/VideoModule.java
diff options
context:
space:
mode:
authorEmilian Peev <epeevs@codeaurora.org>2014-04-29 14:10:03 -0700
committerLeena Winterrowd <lenhardw@codeaurora.org>2014-08-21 16:43:23 -0700
commit759452b4bf1c28769fb1b151f0abb79331ce3f36 (patch)
treea142f7125c20600b0b620a1784226d10a8646ca4 /src/com/android/camera/VideoModule.java
parent2da28faf3c8b24b228c0cb895d1585b1fab67d69 (diff)
downloadandroid_packages_apps_Snap-759452b4bf1c28769fb1b151f0abb79331ce3f36.tar.gz
android_packages_apps_Snap-759452b4bf1c28769fb1b151f0abb79331ce3f36.tar.bz2
android_packages_apps_Snap-759452b4bf1c28769fb1b151f0abb79331ce3f36.zip
SnapdragonCamera: Set video size for preview in HFR case
Due to HW limitations, the preview size needs to match the video size in HFR use cases. Otherwise the framerate may be lower than expected. Change-Id: I09ce25befa781b683e167da1ab4c20b5214df59b CRs-Fixed: 656181
Diffstat (limited to 'src/com/android/camera/VideoModule.java')
-rw-r--r--src/com/android/camera/VideoModule.java58
1 files changed, 57 insertions, 1 deletions
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 224f9f7eb..9d0700dd1 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -828,6 +828,61 @@ public class VideoModule implements CameraModule,
}
}
+ boolean isHFREnabled(int videoWidth, int videoHeight) {
+ if ((null == mPreferences) || (null == mParameters)) {
+ return false;
+ }
+
+ String HighFrameRate = mPreferences.getString(
+ CameraSettings.KEY_VIDEO_HIGH_FRAME_RATE,
+ mActivity. getString(R.string.pref_camera_hfr_default));
+
+ if(!("off".equals(HighFrameRate)) && !("hsr".equals(HighFrameRate))) {
+ Size size = null;
+ try {
+ if (isSupported(HighFrameRate, mParameters.getSupportedVideoHighFrameRateModes())) {
+ int index = mParameters.getSupportedVideoHighFrameRateModes().indexOf(
+ HighFrameRate);
+ size = mParameters.getSupportedHfrSizes().get(index);
+ } else {
+ return false;
+ }
+ } catch (NullPointerException e) {
+ return false;
+ } catch (IndexOutOfBoundsException e) {
+ return false;
+ }
+
+ if (size != null) {
+ if (videoWidth > size.width || videoHeight > size.height) {
+ return false;
+ }
+ } else {
+ return false;
+ }
+
+ int hfrFps = Integer.parseInt(HighFrameRate);
+ int inputBitrate = videoWidth * videoHeight * hfrFps;
+
+ boolean supported = false;
+ List<VideoEncoderCap> videoEncoders = EncoderCapabilities.getVideoEncoders();
+ for (VideoEncoderCap videoEncoder: videoEncoders) {
+ if (videoEncoder.mCodec == mVideoEncoder) {
+ int maxBitrate = (videoEncoder.mMaxHFRFrameWidth *
+ videoEncoder.mMaxHFRFrameHeight *
+ videoEncoder.mMaxHFRMode);
+ if (inputBitrate > 0 && inputBitrate <= maxBitrate ) {
+ supported = true;
+ }
+ break;
+ }
+ }
+
+ return supported;
+ }
+
+ return false;
+ }
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void getDesiredPreviewSize() {
@@ -835,7 +890,8 @@ public class VideoModule implements CameraModule,
return;
}
mParameters = mCameraDevice.getParameters();
- if (mParameters.getSupportedVideoSizes() == null || is1080pEnabled()) {
+ if (mParameters.getSupportedVideoSizes() == null || is1080pEnabled() ||
+ isHFREnabled(mProfile.videoFrameWidth, mProfile.videoFrameHeight)) {
mDesiredPreviewWidth = mProfile.videoFrameWidth;
mDesiredPreviewHeight = mProfile.videoFrameHeight;
} else { // Driver supports separates outputs for preview and video.