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.java56
1 files changed, 45 insertions, 11 deletions
diff --git a/src/com/android/camera/AndroidCameraManagerImpl.java b/src/com/android/camera/AndroidCameraManagerImpl.java
index cad136cde..414ff8101 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.
@@ -99,6 +103,7 @@ class AndroidCameraManagerImpl implements CameraManager {
private static final int SEND_HISTOGRAM_DATA = 602;
//LONGSHOT
private static final int SET_LONGSHOT = 701;
+ private static final int STOP_LONGSHOT = 702;
private static final int SET_AUTO_HDR_MODE = 801;
//HAL1 version code
@@ -235,16 +240,36 @@ 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();
+
+ CameraHolder.CameraInfo info =
+ CameraHolder.instance().getCameraInfo()[cameraId];
+
+ final boolean isBackCamera =
+ info.facing == CameraHolder.CameraInfo.CAMERA_FACING_BACK;
+ final boolean isFrontCamera =
+ info.facing == CameraHolder.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 +281,7 @@ class AndroidCameraManagerImpl implements CameraManager {
}
} else {
if (msg.obj != null) {
- ((CameraOpenErrorCallback) msg.obj).onDeviceOpenFailure(msg.arg1);
+ ((CameraOpenErrorCallback) msg.obj).onDeviceOpenFailure(cameraId);
}
}
return;
@@ -402,6 +427,10 @@ class AndroidCameraManagerImpl implements CameraManager {
CameraWrapper.setLongshot(mCamera, (Boolean) msg.obj);
break;
+ case STOP_LONGSHOT:
+ CameraWrapper.stopLongshot(mCamera);
+ break;
+
case SET_AUTO_HDR_MODE:
CameraWrapper.setMetadataCb(mCamera, (CameraMetaDataCallback) msg.obj);
break;
@@ -663,6 +692,11 @@ class AndroidCameraManagerImpl implements CameraManager {
}
@Override
+ public void stopLongshot() {
+ mCameraHandler.sendEmptyMessage(STOP_LONGSHOT);
+ }
+
+ @Override
public void setHistogramMode(CameraDataCallback cb) {
mCameraHandler.obtainMessage(SET_HISTOGRAM_MODE, cb).sendToTarget();
}