summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/CameraHolder.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/camera/CameraHolder.java')
-rwxr-xr-xsrc/com/android/camera/CameraHolder.java109
1 files changed, 67 insertions, 42 deletions
diff --git a/src/com/android/camera/CameraHolder.java b/src/com/android/camera/CameraHolder.java
index 59b305bc6..585e3bb4d 100755
--- a/src/com/android/camera/CameraHolder.java
+++ b/src/com/android/camera/CameraHolder.java
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2009 The Android Open Source Project
+ * 2015 The CyanogenMod Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -30,8 +31,11 @@ import android.os.Looper;
import android.os.Message;
import android.util.Log;
+import com.android.camera.app.CameraApp;
import com.android.camera.CameraManager.CameraProxy;
+import org.codeaurora.snapcam.R;
+
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -64,11 +68,11 @@ public class CameraHolder {
private static CameraProxy mMockCamera[];
private static CameraInfo mMockCameraInfo[];
private static Context mContext;
- private static boolean mCam2On = true;
+ private static boolean mCam2On = false;
private ArrayList<CameraCharacteristics> mCharacteristics = new ArrayList<>();
/* Debug double-open issue */
- private static final boolean DEBUG_OPEN_RELEASE = true;
+ private static final boolean DEBUG_OPEN_RELEASE = false;
private static class OpenReleaseState {
long time;
int id;
@@ -169,52 +173,46 @@ public class CameraHolder {
HandlerThread ht = new HandlerThread("CameraHolder");
ht.start();
mHandler = new MyHandler(ht.getLooper());
- if (mCam2On) {
- android.hardware.camera2.CameraManager manager =
- (android.hardware.camera2.CameraManager) mContext.getSystemService(
- Context.CAMERA_SERVICE);
- String[] cameraIdList = null;
- try {
- cameraIdList = manager.getCameraIdList();
- for (int i = 0; i < cameraIdList.length; i++) {
- String cameraId = cameraIdList[i];
- CameraCharacteristics characteristics
- = manager.getCameraCharacteristics(cameraId);
- Log.d(TAG,"cameraIdList size ="+cameraIdList.length);
- int facing = characteristics.get(CameraCharacteristics.LENS_FACING);
- if (facing == CameraCharacteristics.LENS_FACING_FRONT) {
- CaptureModule.FRONT_ID = i;
- }
- mCharacteristics.add(i, characteristics);
+ android.hardware.camera2.CameraManager manager =
+ (android.hardware.camera2.CameraManager) mContext.getSystemService(
+ Context.CAMERA_SERVICE);
+ String[] cameraIdList = null;
+ try {
+ cameraIdList = manager.getCameraIdList();
+ mInfo = new CameraInfo[cameraIdList.length];
+ for (int i = 0; i < cameraIdList.length; i++) {
+ String cameraId = cameraIdList[i];
+ CameraCharacteristics characteristics
+ = manager.getCameraCharacteristics(cameraId);
+ Log.d(TAG,"cameraIdList size ="+cameraIdList.length);
+ int facing = characteristics.get(CameraCharacteristics.LENS_FACING);
+ if (facing == CameraCharacteristics.LENS_FACING_FRONT) {
+ CaptureModule.FRONT_ID = i;
}
- } catch (CameraAccessException e) {
- e.printStackTrace();
+ addCameraInfo(i, characteristics);
+ mCharacteristics.add(i, characteristics);
}
- mNumberOfCameras = cameraIdList == null ? 0 : cameraIdList.length;
- } else {
- if (mMockCameraInfo != null) {
- mNumberOfCameras = mMockCameraInfo.length;
- mInfo = mMockCameraInfo;
- } else {
- mNumberOfCameras = android.hardware.Camera.getNumberOfCameras();
- mInfo = new CameraInfo[mNumberOfCameras];
- for (int i = 0; i < mNumberOfCameras; i++) {
- mInfo[i] = new CameraInfo();
- android.hardware.Camera.getCameraInfo(i, mInfo[i]);
- }
- }
- // get the first (smallest) back and first front camera id
- for (int i = 0; i < mNumberOfCameras; i++) {
- if (mBackCameraId == -1 && mInfo[i].facing == CameraInfo.CAMERA_FACING_BACK) {
- mBackCameraId = i;
- } else if (mFrontCameraId == -1 &&
- mInfo[i].facing == CameraInfo.CAMERA_FACING_FRONT) {
- mFrontCameraId = i;
- }
+ } catch (CameraAccessException e) {
+ e.printStackTrace();
+ }
+ mNumberOfCameras = cameraIdList == null ? 0 : cameraIdList.length;
+ // get the first (smallest) back and first front camera id
+ for (int i = 0; i < mNumberOfCameras; i++) {
+ if (mBackCameraId == -1 && mInfo[i].facing == CameraCharacteristics.LENS_FACING_BACK) {
+ mBackCameraId = i;
+ } else if (mFrontCameraId == -1 &&
+ mInfo[i].facing == CameraCharacteristics.LENS_FACING_FRONT) {
+ mFrontCameraId = i;
}
}
}
+ private void addCameraInfo(int index, CameraCharacteristics characteristics) {
+ mInfo[index] = new CameraInfo();
+ mInfo[index].facing = characteristics.get(CameraCharacteristics.LENS_FACING);
+ mInfo[index].orientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);
+ }
+
public CameraCharacteristics getCameraCharacteristics(int id) {
return mCharacteristics.get(id);
}
@@ -230,6 +228,9 @@ public class CameraHolder {
public synchronized CameraProxy open(
Handler handler, int cameraId,
CameraManager.CameraOpenErrorCallback cb) {
+
+ Context context = CameraApp.getContext();
+
if (DEBUG_OPEN_RELEASE) {
collectState(cameraId, mCameraDevice);
if (mCameraOpened) {
@@ -262,6 +263,23 @@ public class CameraHolder {
}
mCameraId = cameraId;
mParameters = mCameraDevice.getCamera().getParameters();
+
+ // Manufacturer specific key values
+ String manufacturerKeyValues =
+ context.getResources().getString(R.string.manufacturer_key_values);
+ if (manufacturerKeyValues != null && !manufacturerKeyValues.isEmpty()) {
+ String[] keyValuesArray = manufacturerKeyValues.split(";");
+ for (String kvPair : keyValuesArray) {
+ String[] manufacturerParamPair = kvPair.split("=");
+ if (!manufacturerParamPair[0].isEmpty() &&
+ !manufacturerParamPair[1].isEmpty()) {
+ Log.d(TAG, "Set manufacturer specific parameter " +
+ manufacturerParamPair[0] + "=" + manufacturerParamPair[1]);
+ mParameters.set(manufacturerParamPair[0], manufacturerParamPair[1]);
+ }
+ }
+ mCameraDevice.setParameters(mParameters);
+ }
} else {
if (!mCameraDevice.reconnect(handler, cb)) {
Log.e(TAG, "fail to reconnect Camera:" + mCameraId + ", aborting.");
@@ -334,4 +352,11 @@ public class CameraHolder {
public int getFrontCameraId() {
return mFrontCameraId;
}
+
+ public class CameraInfo {
+ public static final int CAMERA_FACING_FRONT = CameraCharacteristics.LENS_FACING_FRONT;
+ public static final int CAMERA_FACING_BACK = CameraCharacteristics.LENS_FACING_BACK;
+ public int facing;
+ public int orientation;
+ }
}