summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/com/android/camera/CaptureModule.java106
-rwxr-xr-xsrc/com/android/camera/SettingsManager.java4
-rwxr-xr-x[-rw-r--r--]src/com/android/camera/imageprocessor/FrameProcessor.java14
3 files changed, 97 insertions, 27 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index a91e02ef3..ef62333e4 100755
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -140,10 +140,11 @@ public class CaptureModule implements CameraModule, PhotoController,
public static final int DUAL_MODE = 0;
public static final int BAYER_MODE = 1;
public static final int MONO_MODE = 2;
+ public static final int SWITCH_MODE = 3;
public static final int BAYER_ID = 0;
public static int MONO_ID = -1;
public static int FRONT_ID = -1;
- public static int LOGICAL_ID = -1;
+ public static int SWITCH_ID = -1;
public static final int INTENT_MODE_NORMAL = 0;
public static final int INTENT_MODE_CAPTURE = 1;
public static final int INTENT_MODE_VIDEO = 2;
@@ -663,8 +664,10 @@ public class CaptureModule implements CameraModule, PhotoController,
public void onError(CameraDevice cameraDevice, int error) {
int id = Integer.parseInt(cameraDevice.getId());
Log.e(TAG, "onError " + id + " " + error);
- cameraDevice.close();
- mCameraDevice[id] = null;
+ if (mCamerasOpened) {
+ mCameraDevice[id].close();
+ mCameraDevice[id] = null;
+ }
mCameraOpenCloseLock.release();
mCamerasOpened = false;
@@ -834,7 +837,13 @@ public class CaptureModule implements CameraModule, PhotoController,
public boolean isBackCamera() {
String switchValue = mSettingsManager.getValue(SettingsManager.KEY_SWITCH_CAMERA);
- if (switchValue != null && !switchValue.equals("-1") ) return false;
+ if (switchValue != null && !switchValue.equals("-1") ) {
+ CharSequence[] value = mSettingsManager.getEntryValues(SettingsManager.KEY_SWITCH_CAMERA);
+ if (value.toString().contains("front"))
+ return false;
+ else
+ return true;
+ }
String value = mSettingsManager.getValue(SettingsManager.KEY_CAMERA_ID);
if (value == null) return true;
if (Integer.parseInt(value) == BAYER_ID) return true;
@@ -842,6 +851,10 @@ public class CaptureModule implements CameraModule, PhotoController,
}
public int getCameraMode() {
+ String switchValue = mSettingsManager.getValue(SettingsManager.KEY_SWITCH_CAMERA);
+ if (switchValue != null && !switchValue.equals("-1") ) {
+ return SWITCH_MODE;
+ }
String value = mSettingsManager.getValue(SettingsManager.KEY_SCENE_MODE);
if (value != null && value.equals(SettingsManager.SCENE_MODE_DUAL_STRING)) return DUAL_MODE;
value = mSettingsManager.getValue(SettingsManager.KEY_MONO_ONLY);
@@ -991,9 +1004,12 @@ public class CaptureModule implements CameraModule, PhotoController,
case MONO_MODE:
createSession(MONO_ID);
break;
+ case SWITCH_MODE:
+ createSession(SWITCH_ID);
+ break;
}
} else {
- int cameraId = LOGICAL_ID == -1? FRONT_ID : LOGICAL_ID;
+ int cameraId = SWITCH_ID == -1? FRONT_ID : SWITCH_ID;
createSession(cameraId);
}
}
@@ -1008,10 +1024,13 @@ public class CaptureModule implements CameraModule, PhotoController,
return builder;
}
- private void waitForPreviewSurfaceReady() {
+ private boolean waitForPreviewSurfaceReady() {
try {
if (!mSurfaceReady) {
if (!mSurfaceReadyLock.tryAcquire(2000, TimeUnit.MILLISECONDS)) {
+ if (mPaused) {
+ return true;// camera has closed, don'r create session
+ }
Log.d(TAG, "Time out waiting for surface.");
throw new RuntimeException("Time out waiting for surface.");
}
@@ -1020,6 +1039,7 @@ public class CaptureModule implements CameraModule, PhotoController,
} catch (InterruptedException e) {
e.printStackTrace();
}
+ return false;
}
private void updatePreviewSurfaceReadyState(boolean rdy) {
@@ -1119,7 +1139,9 @@ public class CaptureModule implements CameraModule, PhotoController,
Log.d(TAG, "cameracapturesession - onClosed");
}
};
- waitForPreviewSurfaceReady();
+ if (waitForPreviewSurfaceReady()) {
+ return;//if camera closed, don't create session
+ }
Surface surface = getPreviewSurfaceForSession(id);
if(id == getMainCameraId()) {
@@ -1347,9 +1369,12 @@ public class CaptureModule implements CameraModule, PhotoController,
case MONO_MODE:
lockFocus(MONO_ID);
break;
+ case SWITCH_MODE:
+ lockFocus(SWITCH_ID);
+ break;
}
} else {
- int cameraId = LOGICAL_ID == -1? FRONT_ID : LOGICAL_ID;
+ int cameraId = SWITCH_ID == -1? FRONT_ID : SWITCH_ID;
if(takeZSLPicture(cameraId)) {
return;
}
@@ -1382,9 +1407,12 @@ public class CaptureModule implements CameraModule, PhotoController,
case MONO_MODE:
cameraId = MONO_ID;
break;
+ case SWITCH_MODE:
+ cameraId = SWITCH_ID;
+ break;
}
} else {
- cameraId = LOGICAL_ID == -1? FRONT_ID : LOGICAL_ID;
+ cameraId = SWITCH_ID == -1? FRONT_ID : SWITCH_ID;
}
captureStillPicture(cameraId);
}
@@ -1522,6 +1550,8 @@ public class CaptureModule implements CameraModule, PhotoController,
}
applySettingsForJpegInformation(captureBuilder, id);
+ applyAFRegions(captureBuilder, id);
+ applyAERegions(captureBuilder, id);
if (!mIsSupportedQcfa) {
addPreviewSurface(captureBuilder, null, id);
}
@@ -2529,9 +2559,13 @@ public class CaptureModule implements CameraModule, PhotoController,
msg.arg1 = MONO_ID;
mCameraHandler.sendMessage(msg);
break;
+ case SWITCH_MODE:
+ msg.arg1 = SWITCH_ID;
+ mCameraHandler.sendMessage(msg);
+ break;
}
} else {
- int cameraId = LOGICAL_ID == -1? FRONT_ID : LOGICAL_ID;
+ int cameraId = SWITCH_ID == -1? FRONT_ID : SWITCH_ID;
msg.arg1 = cameraId;
mCameraHandler.sendMessage(msg);
}
@@ -2673,9 +2707,12 @@ public class CaptureModule implements CameraModule, PhotoController,
case MONO_MODE:
applyZoomAndUpdate(MONO_ID);
break;
+ case SWITCH_MODE:
+ applyZoomAndUpdate(SWITCH_ID);
+ break;
}
} else {
- int cameraId = LOGICAL_ID == -1? FRONT_ID : LOGICAL_ID;
+ int cameraId = SWITCH_ID == -1? FRONT_ID : SWITCH_ID;
applyZoomAndUpdate(cameraId);
}
mUI.updateFaceViewCameraBound(mCropRegion[getMainCameraId()]);
@@ -2690,9 +2727,11 @@ public class CaptureModule implements CameraModule, PhotoController,
return cameraId == BAYER_ID;
case MONO_MODE:
return cameraId == MONO_ID;
+ case SWITCH_MODE:
+ return cameraId == SWITCH_ID;
}
- } else if (LOGICAL_ID != -1) {
- return cameraId == LOGICAL_ID;
+ } else if (SWITCH_ID != -1) {
+ return cameraId == SWITCH_ID;
} else {
return cameraId == FRONT_ID;
}
@@ -2859,9 +2898,12 @@ public class CaptureModule implements CameraModule, PhotoController,
case MONO_MODE:
triggerFocusAtPoint(x, y, MONO_ID);
break;
+ case SWITCH_MODE:
+ triggerFocusAtPoint(x, y, SWITCH_ID);
+ break;
}
} else {
- int cameraId = LOGICAL_ID == -1? FRONT_ID : LOGICAL_ID;
+ int cameraId = SWITCH_ID == -1? FRONT_ID : SWITCH_ID;
triggerFocusAtPoint(x, y, cameraId);
}
}
@@ -2874,10 +2916,12 @@ public class CaptureModule implements CameraModule, PhotoController,
return BAYER_ID;
case MONO_MODE:
return MONO_ID;
+ case SWITCH_MODE:
+ return SWITCH_ID;
}
return 0;
} else {
- int cameraId = LOGICAL_ID == -1? FRONT_ID : LOGICAL_ID;
+ int cameraId = SWITCH_ID == -1? FRONT_ID : SWITCH_ID;
return cameraId;
}
}
@@ -3216,7 +3260,6 @@ public class CaptureModule implements CameraModule, PhotoController,
}
Log.d(TAG, "StartRecordingVideo " + cameraId);
mStartRecPending = true;
- mIsRecordingVideo = true;
mMediaRecorderPausing = false;
checkAndPlayRecordSound(cameraId, true);
@@ -3369,14 +3412,26 @@ public class CaptureModule implements CameraModule, PhotoController,
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
+ } catch (IllegalArgumentException e) {
+ //surface of mediaRecorder is not valid
+ Toast.makeText(mActivity,"Could not start media recorder.\n " +
+ "Can't start video recording.", Toast.LENGTH_LONG).show();
+ releaseMediaRecorder();
+ releaseAudioFocus();
+ mStartRecPending = false;
+ mIsRecordingVideo = false;
+ mUI.showUIafterRecording();
+ mFrameProcessor.setVideoOutputSurface(null);
+ restartSession(true);
}
- mStartRecPending = false;
return true;
}
private boolean startMediaRecorder() {
try {
mMediaRecorder.start(); // Recording is now started
+ mIsRecordingVideo = true;
+ mStartRecPending = false;
Log.d(TAG, "StartRecordingVideo done.");
} catch (RuntimeException e) {
Toast.makeText(mActivity,"Could not start media recorder.\n " +
@@ -3594,10 +3649,14 @@ public class CaptureModule implements CameraModule, PhotoController,
}
public void onButtonPause() {
+ if (!isRecorderReady())
+ return;
pauseVideoRecording();
}
public void onButtonContinue() {
+ if (!isRecorderReady())
+ return;
resumeVideoRecording();
}
@@ -4793,9 +4852,12 @@ public class CaptureModule implements CameraModule, PhotoController,
updatePreviewBayer |= applyPreferenceToPreview(BAYER_ID, key, value);
updatePreviewMono |= applyPreferenceToPreview(MONO_ID, key, value);
break;
+ case SWITCH_MODE:
+ updatePreviewMono |= applyPreferenceToPreview(SWITCH_ID, key, value);
+ break;
}
- } else if (LOGICAL_ID != -1) {
- updatePreviewLogical = applyPreferenceToPreview(LOGICAL_ID,key,value);
+ } else if (SWITCH_ID != -1) {
+ updatePreviewLogical = applyPreferenceToPreview(SWITCH_ID,key,value);
}else {
updatePreviewFront |= applyPreferenceToPreview(FRONT_ID, key, value);
}
@@ -4842,9 +4904,9 @@ public class CaptureModule implements CameraModule, PhotoController,
if (updatePreviewLogical) {
try {
- if (checkSessionAndBuilder(mCaptureSession[LOGICAL_ID],
- mPreviewRequestBuilder[LOGICAL_ID])) {
- mCaptureSession[LOGICAL_ID].setRepeatingRequest(mPreviewRequestBuilder[LOGICAL_ID]
+ if (checkSessionAndBuilder(mCaptureSession[SWITCH_ID],
+ mPreviewRequestBuilder[SWITCH_ID])) {
+ mCaptureSession[SWITCH_ID].setRepeatingRequest(mPreviewRequestBuilder[SWITCH_ID]
.build(), mCaptureCallback, mCameraHandler);
}
} catch (CameraAccessException | IllegalStateException e) {
diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java
index 0e42dfbfc..5c3a2c7bd 100755
--- a/src/com/android/camera/SettingsManager.java
+++ b/src/com/android/camera/SettingsManager.java
@@ -620,8 +620,8 @@ public class SettingsManager implements ListMenu.SettingsListener {
public int getInitialCameraId(SharedPreferences pref) {
int switchId = Integer.parseInt(
pref.getString(SettingsManager.KEY_SWITCH_CAMERA,"-1"));
- CaptureModule.LOGICAL_ID = switchId;
- Log.d(TAG,"LOGICAL_ID = " + switchId);
+ CaptureModule.SWITCH_ID = switchId;
+ Log.d(TAG,"SWITCH_ID = " + switchId);
if (switchId != -1) return switchId;
String value = pref.getString(SettingsManager.KEY_CAMERA_ID, "0");
int frontBackId = Integer.parseInt(value);
diff --git a/src/com/android/camera/imageprocessor/FrameProcessor.java b/src/com/android/camera/imageprocessor/FrameProcessor.java
index 6b0c97732..2e7ded169 100644..100755
--- a/src/com/android/camera/imageprocessor/FrameProcessor.java
+++ b/src/com/android/camera/imageprocessor/FrameProcessor.java
@@ -59,7 +59,7 @@ import java.util.concurrent.Semaphore;
import org.codeaurora.snapcam.R;
public class FrameProcessor {
-
+ private static final String TAG = "FrameProcessor";
private ImageReader mInputImageReader;
private Allocation mInputAllocation;
private Allocation mProcessAllocation;
@@ -326,7 +326,11 @@ public class FrameProcessor {
public void setOutputSurface(Surface surface) {
mSurfaceAsItIs = surface;
if (mFinalFilters.size() != 0) {
- mOutputAllocation.setSurface(surface);
+ if (surface != null && surface.isValid()) {
+ mOutputAllocation.setSurface(surface);
+ } else {
+ Log.d(TAG,"OutputSurface is not valid");
+ }
}
}
@@ -352,7 +356,11 @@ public class FrameProcessor {
mVideoOutputAllocation = Allocation.createTyped(mRs, rgbTypeBuilder.create(),
Allocation.USAGE_SCRIPT | Allocation.USAGE_IO_OUTPUT);
}
- mVideoOutputAllocation.setSurface(surface);
+ if (surface != null && surface.isValid()) {
+ mVideoOutputAllocation.setSurface(surface);
+ } else {
+ Log.d(TAG,"Video outputSurface is not valid");
+ }
}
}
}