summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/AndroidCameraManagerImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/camera/AndroidCameraManagerImpl.java')
-rw-r--r--src/com/android/camera/AndroidCameraManagerImpl.java45
1 files changed, 34 insertions, 11 deletions
diff --git a/src/com/android/camera/AndroidCameraManagerImpl.java b/src/com/android/camera/AndroidCameraManagerImpl.java
index cad136cde..f2cb69f67 100644
--- a/src/com/android/camera/AndroidCameraManagerImpl.java
+++ b/src/com/android/camera/AndroidCameraManagerImpl.java
@@ -21,10 +21,12 @@ import static com.android.camera.util.CameraUtil.Assert;
import java.io.IOException;
import android.annotation.TargetApi;
+import android.content.Context;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.AutoFocusMoveCallback;
+import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.ErrorCallback;
import android.hardware.Camera.FaceDetectionListener;
import android.hardware.Camera.OnZoomChangeListener;
@@ -41,11 +43,13 @@ import android.util.Log;
import android.view.SurfaceHolder;
import android.hardware.Camera.CameraDataCallback;
import android.hardware.Camera.CameraMetaDataCallback;
+import com.android.camera.app.CameraApp;
import com.android.camera.util.ApiHelper;
import android.os.ConditionVariable;
import java.lang.reflect.Method;
import org.codeaurora.snapcam.wrapper.CameraWrapper;
+import org.codeaurora.snapcam.R;
/**
* A class to implement {@link CameraManager} of the Android camera framework.
@@ -235,16 +239,35 @@ class AndroidCameraManagerImpl implements CameraManager {
try {
switch (msg.what) {
case OPEN_CAMERA:
- try {
- Method openMethod = Class.forName("android.hardware.Camera").getMethod(
- "openLegacy", int.class, int.class);
- mCamera = (android.hardware.Camera) openMethod.invoke(
- null, msg.arg1, CAMERA_HAL_API_VERSION_1_0);
- } catch (Exception e) {
- /* Retry with open if openLegacy doesn't exist/fails */
- Log.v(TAG, "openLegacy failed due to " + e.getMessage()
- + ", using open instead");
- mCamera = android.hardware.Camera.open(msg.arg1);
+ final int cameraId = msg.arg1;
+ Context context = CameraApp.getContext();
+
+ CameraInfo info = CameraHolder.instance().getCameraInfo()[cameraId];
+
+ final boolean isBackCamera =
+ info.facing == CameraInfo.CAMERA_FACING_BACK;
+ final boolean isFrontCamera =
+ info.facing == CameraInfo.CAMERA_FACING_FRONT;
+ final boolean useOpenLegacyForBackCamera = context.getResources()
+ .getBoolean(R.bool.back_camera_open_legacy);
+ final boolean useOpenLegacyForFrontCamera = context.getResources()
+ .getBoolean(R.bool.front_camera_open_legacy);
+
+ if (isBackCamera && useOpenLegacyForBackCamera ||
+ isFrontCamera && useOpenLegacyForFrontCamera) {
+ try {
+ Method openMethod = Class.forName("android.hardware.Camera")
+ .getMethod("openLegacy", int.class, int.class);
+ mCamera = (android.hardware.Camera) openMethod.invoke(null,
+ cameraId, CAMERA_HAL_API_VERSION_1_0);
+ } catch (Exception e) {
+ /* Retry with open if openLegacy doesn't exist/fails */
+ Log.v(TAG, "openLegacy failed due to " + e.getMessage()
+ + ", using open instead");
+ mCamera = android.hardware.Camera.open(cameraId);
+ }
+ } else {
+ mCamera = android.hardware.Camera.open(cameraId);
}
if (mCamera != null) {
@@ -256,7 +279,7 @@ class AndroidCameraManagerImpl implements CameraManager {
}
} else {
if (msg.obj != null) {
- ((CameraOpenErrorCallback) msg.obj).onDeviceOpenFailure(msg.arg1);
+ ((CameraOpenErrorCallback) msg.obj).onDeviceOpenFailure(cameraId);
}
}
return;