diff options
author | codeworkx <daniel.hillenbrand@codeworkx.de> | 2017-01-28 14:56:35 +0100 |
---|---|---|
committer | Chippa-a <vusal1372@gmail.com> | 2019-10-25 15:55:25 +0300 |
commit | 5740fe5b116e7b36d8b67e90742d059fdd750cdf (patch) | |
tree | 24e30939f8fe0209d494044bfcd5f7021a96a425 | |
parent | f578763ab20847d77587ae3d151a82876a47993e (diff) | |
download | android_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.xml | 3 | ||||
-rwxr-xr-x | src/com/android/camera/CameraActivity.java | 23 | ||||
-rwxr-xr-x | src/com/android/camera/util/CameraUtil.java | 31 | ||||
-rwxr-xr-x | src/com/android/camera/util/PersistUtil.java | 6 |
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; } |