summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcodeworkx <daniel.hillenbrand@codeworkx.de>2017-01-28 14:56:35 +0100
committerChippa-a <vusal1372@gmail.com>2019-10-25 15:55:25 +0300
commit5740fe5b116e7b36d8b67e90742d059fdd750cdf (patch)
tree24e30939f8fe0209d494044bfcd5f7021a96a425
parentf578763ab20847d77587ae3d151a82876a47993e (diff)
downloadandroid_packages_apps_Snap-5740fe5b116e7b36d8b67e90742d059fdd750cdf.tar.gz
android_packages_apps_Snap-5740fe5b116e7b36d8b67e90742d059fdd750cdf.tar.bz2
android_packages_apps_Snap-5740fe5b116e7b36d8b67e90742d059fdd750cdf.zip
Snap: Detect and use Camera2 if available
Author: codeworkx <daniel.hillenbrand@codeworkx.de> Date: Sat Jan 28 14:56:35 2017 +0100 Snap: detect and use Camera2 if available Also add overlay option to enable support for Camera2 to retain current behaviour. Change-Id: I20939e33f4bb687e4abea11bbcdb9bf246b156e4 Author: codeworkx <daniel.hillenbrand@codeworkx.de> Date: Sun Aug 13 12:22:05 2017 +0200 Snap: Add missing null check on isCamera2Supported Change-Id: I61c04c7cb8d344573ab7fb11f7114f09aaf24fb7 Change-Id: I339ead08d10ddff5dad491987d94367354a4b3f3
-rw-r--r--res/values/config.xml3
-rwxr-xr-xsrc/com/android/camera/CameraActivity.java23
-rwxr-xr-xsrc/com/android/camera/util/CameraUtil.java31
-rwxr-xr-xsrc/com/android/camera/util/PersistUtil.java6
4 files changed, 52 insertions, 11 deletions
diff --git a/res/values/config.xml b/res/values/config.xml
index 023ce2dd4..300c2d906 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -28,6 +28,9 @@
of the fullscreen pano preview. -->
<bool name="enable_warped_pano_preview">true</bool>
+ <!-- Enable support for camera api v2 -->
+ <bool name="support_camera_api_v2">false</bool>
+
<!-- Opens back camera using openLegacy() and forces api v1 -->
<bool name="back_camera_open_legacy">true</bool>
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 831e84268..14944dbc9 100755
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -193,11 +193,15 @@ public class CameraActivity extends Activity
private static boolean PIE_MENU_ENABLED = false;
private boolean mDeveloperMenuEnabled = false;
+ private boolean mCamera2supported = false;
+ private boolean mCamera2enabled = false;
+
/** This data adapter is used by FilmStripView. */
private LocalDataAdapter mDataAdapter;
/** This data adapter represents the real local camera data. */
private LocalDataAdapter mWrappedDataAdapter;
+ private Context mContext;
private PanoramaStitchingManager mPanoramaManager;
private PlaceholderManager mPlaceholderManager;
private int mCurrentModuleIndex;
@@ -1520,6 +1524,9 @@ public class CameraActivity extends Activity
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
+
+ mContext = getApplicationContext();
+
// Check if this is in the secure camera mode.
Intent intent = getIntent();
String action = intent.getAction();
@@ -1596,9 +1603,16 @@ public class CameraActivity extends Activity
}
}
- boolean cam2on = PersistUtil.getCamera2Mode();
- CameraHolder.setCamera2Mode(this, cam2on);
- if (cam2on && (moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX ||
+ // Check if the device supports Camera API 2
+ mCamera2supported = CameraUtil.isCamera2Supported(mContext);
+ Log.d(TAG, "Camera API 2 supported: " + mCamera2supported);
+
+ mCamera2enabled = mCamera2supported &&
+ mContext.getResources().getBoolean(R.bool.support_camera_api_v2);
+ Log.d(TAG, "Camera API 2 enabled: " + mCamera2enabled);
+
+ CameraHolder.setCamera2Mode(this, mCamera2enabled);
+ if (mCamera2enabled && (moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX ||
moduleIndex == ModuleSwitcher.VIDEO_MODULE_INDEX))
moduleIndex = ModuleSwitcher.CAPTURE_MODULE_INDEX;
@@ -2176,9 +2190,8 @@ public class CameraActivity extends Activity
@Override
public void onModuleSelected(int moduleIndex) {
- boolean cam2on = PersistUtil.getCamera2Mode();
mForceReleaseCamera = moduleIndex == ModuleSwitcher.CAPTURE_MODULE_INDEX ||
- (cam2on && moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX);
+ (mCamera2enabled && moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX);
if (mForceReleaseCamera) {
moduleIndex = ModuleSwitcher.CAPTURE_MODULE_INDEX;
}
diff --git a/src/com/android/camera/util/CameraUtil.java b/src/com/android/camera/util/CameraUtil.java
index 2d0439223..92254b786 100755
--- a/src/com/android/camera/util/CameraUtil.java
+++ b/src/com/android/camera/util/CameraUtil.java
@@ -409,6 +409,37 @@ public class CameraUtil {
}
}
+ public static boolean isCamera2Supported(Context context) {
+ android.hardware.camera2.CameraManager manager = (android.hardware.camera2.CameraManager)
+ context.getSystemService(Context.CAMERA_SERVICE);
+
+ try {
+ String[] cameraIds = manager.getCameraIdList();
+
+ if (cameraIds != null && cameraIds.length > 0) {
+ CameraCharacteristics characteristics =
+ manager.getCameraCharacteristics(cameraIds[0]);
+ int deviceLevel =
+ characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
+
+ switch (deviceLevel) {
+ case CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED:
+ return true;
+ case CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL:
+ return true;
+ case CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_3:
+ return true;
+ default:
+ return false;
+ }
+ }
+ } catch(CameraAccessException | NumberFormatException e) {
+ Log.e(TAG, "exception trying to get camera characteristics");
+ }
+
+ return false;
+ }
+
public static CameraManager.CameraProxy openCamera(
Activity activity, final int cameraId,
Handler handler, final CameraManager.CameraOpenErrorCallback cb) {
diff --git a/src/com/android/camera/util/PersistUtil.java b/src/com/android/camera/util/PersistUtil.java
index 647082995..05a0e91cb 100755
--- a/src/com/android/camera/util/PersistUtil.java
+++ b/src/com/android/camera/util/PersistUtil.java
@@ -54,8 +54,6 @@ public class PersistUtil {
SystemProperties.get("persist.sys.camera.video.snapshotsize", "");
private static final String PERSIST_CAMERA_VIDEO_SIZE =
SystemProperties.get("persist.sys.camera.video.size", "");
- private static final boolean PERSIST_CAMERA_CAMERA2 =
- SystemProperties.getBoolean("persist.sys.camera.camera2", true);
private static final boolean PERSIST_CAMERA_ZSL =
SystemProperties.getBoolean("persist.sys.camera.zsl.disabled", false);
private static final int PERSIST_CAMERA_CANCEL_TOUCHFOCUS_DELAY =
@@ -173,10 +171,6 @@ public class PersistUtil {
return result;
}
- public static boolean getCamera2Mode() {
- return PERSIST_CAMERA_CAMERA2;
- }
-
public static boolean getCameraZSLDisabled() {
return PERSIST_CAMERA_ZSL;
}