From 35a38acb7943b018c5d239d00c4ad48da5072b87 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Fri, 11 Sep 2015 00:52:56 +0300 Subject: Snap: Cleanup video profile handling * Fix camcorder crashes on older devices Revert "SnapdragonCamera: Fix compatibility issues with KK." This reverts commit 0d33346534a728a1f8efaec05fcdccbe3e5440e1. Revert "SnapdragonCamera: Throw error popup for unsupported video profile." This reverts commit 3e50703cff0bc243b922a2299c58a45a4cbd91a9. Change-Id: I1152180a590650a7583430936f3759d1831e91dd --- res/values/arrays.xml | 42 ++++++++++++++------- res/values/qcomstrings.xml | 3 -- .../android/camera/AndroidCameraManagerImpl.java | 9 ++++- src/com/android/camera/CameraSettings.java | 43 ++++------------------ src/com/android/camera/VideoModule.java | 28 ++++---------- 5 files changed, 52 insertions(+), 73 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 706d7a412..1d5ef0604 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -31,21 +31,35 @@ @string/pref_video_quality_entry_cif @string/pref_video_quality_entry_qvga @string/pref_video_quality_entry_qcif - + + - 4096x2160 - 3840x2160 - 1920x1080 - 1280x720 - 720x480 - 864x480 - 800x480 - 640x480 - 480x360 - 400x240 - 352x288 - 320x240 - 176x144 + + 13 + + 8 + + 6 + + 5 + + 4 + + 12 + + 9 + + 10 + + 19 + + 11 + + 3 + + 7 + + 2 diff --git a/res/values/qcomstrings.xml b/res/values/qcomstrings.xml index 135ab48d5..0779868b8 100644 --- a/res/values/qcomstrings.xml +++ b/res/values/qcomstrings.xml @@ -319,9 +319,6 @@ Unsupported video resolution for this encoder type - - Unsupported video profile - Raw picture format is not supported in zsl mode, change to JPEG diff --git a/src/com/android/camera/AndroidCameraManagerImpl.java b/src/com/android/camera/AndroidCameraManagerImpl.java index 621be067b..a03631a89 100644 --- a/src/com/android/camera/AndroidCameraManagerImpl.java +++ b/src/com/android/camera/AndroidCameraManagerImpl.java @@ -202,7 +202,14 @@ class AndroidCameraManagerImpl implements CameraManager { try { switch (msg.what) { case OPEN_CAMERA: - mCamera = android.hardware.Camera.open(msg.arg1); + try { + mCamera = android.hardware.Camera.openLegacy(msg.arg1, + android.hardware.Camera.CAMERA_HAL_API_VERSION_1_0); + } catch (RuntimeException e) { + /* Retry with open if openLegacy fails */ + Log.v(TAG, "openLegacy failed. Using open instead"); + mCamera = android.hardware.Camera.open(msg.arg1); + } if (mCamera != null) { mParametersIsDirty = true; diff --git a/src/com/android/camera/CameraSettings.java b/src/com/android/camera/CameraSettings.java index 3eab068c3..7761fa15c 100644 --- a/src/com/android/camera/CameraSettings.java +++ b/src/com/android/camera/CameraSettings.java @@ -253,31 +253,13 @@ public class CameraSettings { private final int mCameraId; private static final HashMap VIDEO_ENCODER_TABLE = new HashMap(); - public static final HashMap - VIDEO_QUALITY_TABLE = new HashMap(); static { - //video encoders VIDEO_ENCODER_TABLE.put(MediaRecorder.VideoEncoder.H263, "h263"); VIDEO_ENCODER_TABLE.put(MediaRecorder.VideoEncoder.H264, "h264"); VIDEO_ENCODER_TABLE.put(MediaRecorder.VideoEncoder.H265, "h265"); VIDEO_ENCODER_TABLE.put(MediaRecorder.VideoEncoder.MPEG_4_SP, "m4v"); - - //video qualities - VIDEO_QUALITY_TABLE.put("4096x2160", CamcorderProfile.QUALITY_4kDCI); - VIDEO_QUALITY_TABLE.put("3840x2160", CamcorderProfile.QUALITY_2160P); - VIDEO_QUALITY_TABLE.put("1920x1080", CamcorderProfile.QUALITY_1080P); - VIDEO_QUALITY_TABLE.put("1280x720", CamcorderProfile.QUALITY_720P); - VIDEO_QUALITY_TABLE.put("720x480", CamcorderProfile.QUALITY_480P); - VIDEO_QUALITY_TABLE.put("864x480", CamcorderProfile.QUALITY_FWVGA); - VIDEO_QUALITY_TABLE.put("800x480", CamcorderProfile.QUALITY_WVGA); - VIDEO_QUALITY_TABLE.put("640x480", CamcorderProfile.QUALITY_VGA); - VIDEO_QUALITY_TABLE.put("480x360", CamcorderProfile.QUALITY_HVGA); - VIDEO_QUALITY_TABLE.put("400x240", CamcorderProfile.QUALITY_WQVGA); - VIDEO_QUALITY_TABLE.put("352x288", CamcorderProfile.QUALITY_CIF); - VIDEO_QUALITY_TABLE.put("320x240", CamcorderProfile.QUALITY_QVGA); - VIDEO_QUALITY_TABLE.put("176x144", CamcorderProfile.QUALITY_QCIF); - } + } public CameraSettings(Activity activity, Parameters parameters, int cameraId, CameraInfo[] cameraInfo) { @@ -299,7 +281,7 @@ public class CameraSettings { int cameraId, Parameters parameters) { // When launching the camera app first time, we will set the video quality // to the first one (i.e. highest quality) in the supported list - List supported = getSupportedVideoQualities(cameraId,parameters); + List supported = getSupportedVideoQuality(cameraId,parameters); assert (supported != null) : "No supported video quality is found"; return supported.get(0); } @@ -779,7 +761,7 @@ public class CameraSettings { } if (videoQuality != null) { - filterUnsupportedOptions(group, videoQuality, getSupportedVideoQualities( + filterUnsupportedOptions(group, videoQuality, getSupportedVideoQuality( mCameraId,mParameters)); } @@ -1234,6 +1216,11 @@ public class CameraSettings { supported.add(Integer.toString(CamcorderProfile.QUALITY_VGA)); } } + if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_HVGA)) { + if (checkSupportedVideoQuality(parameters,480,360)){ + supported.add(Integer.toString(CamcorderProfile.QUALITY_HVGA)); + } + } if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_CIF)) { if (checkSupportedVideoQuality(parameters,352,288)){ supported.add(Integer.toString(CamcorderProfile.QUALITY_CIF)); @@ -1251,20 +1238,6 @@ public class CameraSettings { } } - public static ArrayList getSupportedVideoQualities(int cameraId,Parameters parameters) { - ArrayList supported = new ArrayList(); - List temp = sizeListToStringList(parameters.getSupportedVideoSizes()); - for (String videoSize : temp) { - if (VIDEO_QUALITY_TABLE.containsKey(videoSize)) { - int profile = VIDEO_QUALITY_TABLE.get(videoSize); - if (CamcorderProfile.hasProfile(cameraId, profile)) { - supported.add(videoSize); - } - } - } - return supported; - } - public static boolean isInternalPreviewSupported(Parameters params) { boolean ret = false; if (null != params) { diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java index fadd3ee6e..54aa86685 100644 --- a/src/com/android/camera/VideoModule.java +++ b/src/com/android/camera/VideoModule.java @@ -318,7 +318,6 @@ public class VideoModule implements CameraModule, private boolean mUnsupportedHSRVideoSize = false; private boolean mUnsupportedHFRVideoCodec = false; private String mDefaultAntibanding = null; - boolean mUnsupportedProfile = false; // This Handler is used to post message back onto the main thread of the // application @@ -772,16 +771,18 @@ public class VideoModule implements CameraModule, mParameters = mCameraDevice.getParameters(); String defaultQuality = mActivity.getResources().getString( R.string.pref_video_quality_default); - if (!defaultQuality.equals("")){ - videoQuality = defaultQuality; + if (!defaultQuality.equals("")) { + if (CamcorderProfile.hasProfile(Integer.parseInt(defaultQuality))) { + videoQuality = defaultQuality; + } } else { - // check for highest quality supported - videoQuality = CameraSettings.getSupportedHighestVideoQuality( - mCameraId, mParameters); + // check for highest quality supported + videoQuality = CameraSettings.getSupportedHighestVideoQuality( + mCameraId, mParameters); } mPreferences.edit().putString(CameraSettings.KEY_VIDEO_QUALITY, videoQuality).apply(); } - int quality = CameraSettings.VIDEO_QUALITY_TABLE.get(videoQuality); + int quality = Integer.valueOf(videoQuality); // Set video quality. Intent intent = mActivity.getIntent(); @@ -803,12 +804,6 @@ public class VideoModule implements CameraModule, mCaptureTimeLapse = (mTimeBetweenTimeLapseFrameCaptureMs != 0); // TODO: This should be checked instead directly +1000. if (mCaptureTimeLapse) quality += 1000; - mUnsupportedProfile = false; - boolean hasProfile = CamcorderProfile.hasProfile(mCameraId, quality); - if (!hasProfile) { - mUnsupportedProfile = true; - return; - } mProfile = CamcorderProfile.get(mCameraId, quality); getDesiredPreviewSize(); qcomReadVideoPreferences(); @@ -1678,13 +1673,6 @@ public class VideoModule implements CameraModule, mStartRecPending = false; return; } - if (mUnsupportedProfile == true) { - Log.e(TAG, "Unsupported video profile"); - RotateTextToast.makeText(mActivity, R.string.error_app_unsupported_profile, - Toast.LENGTH_SHORT).show(); - mStartRecPending = false; - return; - } //?? //if (!mCameraDevice.waitDone()) return; mCurrentVideoUri = null; -- cgit v1.2.3