summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorcodeworkx <daniel.hillenbrand@codeworkx.de>2017-01-28 14:56:35 +0100
committercodeworkx <daniel.hillenbrand@codeworkx.de>2017-02-17 21:14:30 +0100
commitb8af8f18c0f7c6f26b6529adbe23ec51f97ce27a (patch)
tree3ab9ee3856e750edff69fed69d63aec70e9a59cb /src
parent198d1f827cf09c2b06680a14ffde2ccc4d85b185 (diff)
downloadandroid_packages_apps_Snap-b8af8f18c0f7c6f26b6529adbe23ec51f97ce27a.tar.gz
android_packages_apps_Snap-b8af8f18c0f7c6f26b6529adbe23ec51f97ce27a.tar.bz2
android_packages_apps_Snap-b8af8f18c0f7c6f26b6529adbe23ec51f97ce27a.zip
Snap: detect and use Camera2 if available
Also add overlay option to enable support for Camera2 to retain current behaviour. Change-Id: I20939e33f4bb687e4abea11bbcdb9bf246b156e4
Diffstat (limited to 'src')
-rw-r--r--src/com/android/camera/CameraActivity.java25
-rw-r--r--src/com/android/camera/util/CameraUtil.java26
2 files changed, 44 insertions, 7 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index cce365ebc..1bd452b18 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -189,11 +189,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 = -1;
@@ -1428,6 +1432,9 @@ public class CameraActivity extends Activity
finish();
return;
}
+
+ mContext = getApplicationContext();
+
// Check if this is in the secure camera mode.
Intent intent = getIntent();
String action = intent.getAction();
@@ -1502,8 +1509,14 @@ public class CameraActivity extends Activity
}
}
- boolean cam2on = mSettingsManager.isCamera2On();
- 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);
+
+ if (mCamera2enabled && moduleIndex == ModuleSwitcher.PHOTO_MODULE_INDEX)
moduleIndex = ModuleSwitcher.CAPTURE_MODULE_INDEX;
mOrientationListener = new MyOrientationEventListener(this);
@@ -1613,12 +1626,11 @@ public class CameraActivity extends Activity
registerSDcardMountedReceiver();
if (!Glide.isSetup()) {
- Context context = getApplicationContext();
- Glide.setup(new GlideBuilder(context)
+ Glide.setup(new GlideBuilder(mContext)
.setDecodeFormat(DecodeFormat.ALWAYS_ARGB_8888)
.setResizeService(new FifoPriorityThreadPoolExecutor(2)));
- Glide glide = Glide.get(context);
+ Glide glide = Glide.get(mContext);
// As a camera we will use a large amount of memory
// for displaying images.
@@ -2047,9 +2059,8 @@ public class CameraActivity extends Activity
@Override
public void onModuleSelected(int moduleIndex, final Point hotspot) {
- boolean cam2on = mSettingsManager.isCamera2On();
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 bda83a1d9..9ae37080e 100644
--- a/src/com/android/camera/util/CameraUtil.java
+++ b/src/com/android/camera/util/CameraUtil.java
@@ -35,6 +35,8 @@ import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.Size;
+import android.hardware.camera2.CameraAccessException;
+import android.hardware.camera2.CameraCharacteristics;
import android.location.Location;
import android.media.MediaRecorder;
import android.net.Uri;
@@ -377,6 +379,30 @@ public class CameraUtil {
}
}
+ public static boolean isCamera2Supported(Context context) {
+ android.hardware.camera2.CameraManager manager = (android.hardware.camera2.CameraManager)context.getSystemService(Context.CAMERA_SERVICE);
+
+ try {
+ CameraCharacteristics characteristics = manager.getCameraCharacteristics(manager.getCameraIdList()[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) {