summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/values/config.xml4
-rw-r--r--src/com/android/camera/PhotoModule.java41
2 files changed, 33 insertions, 12 deletions
diff --git a/res/values/config.xml b/res/values/config.xml
index 9bb3b8b73..fde705275 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -43,4 +43,8 @@
<bool name="enableHDRWithZSL">false</bool>
<!-- Enable histogram support -->
<bool name="enableHistogram">false</bool>
+
+ <!-- Controls whether or not the HAL allows a multi-threaded
+ camera startup -->
+ <bool name="enableThreadedCameraStartup">true</bool>
</resources>
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 5a1013b63..ababaf291 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -237,6 +237,28 @@ public class PhotoModule
}
private OpenCameraThread mOpenCameraThread = null;
+ private boolean mEnableThreadedCameraStartup = true;
+
+ private void startOpenCameraThread() {
+ mOpenCameraThread = new OpenCameraThread();
+ if (mEnableThreadedCameraStartup) {
+ mOpenCameraThread.start();
+ } else {
+ mOpenCameraThread.run();
+ }
+ }
+
+ private void stopOpenCameraThread() {
+ if (mOpenCameraThread != null && mEnableThreadedCameraStartup) {
+ try {
+ mOpenCameraThread.join();
+ } catch (InterruptedException ex) {
+ // ignore
+ }
+ }
+ mOpenCameraThread = null;
+ }
+
/**
* An unpublished intent flag requesting to return as soon as capturing
* is completed.
@@ -520,9 +542,11 @@ public class PhotoModule
// Max brightness
mActivity.initMaxBrightness(mPreferences);
+ mEnableThreadedCameraStartup = mActivity.getResources().getBoolean(
+ R.bool.enableThreadedCameraStartup);
+
if (mOpenCameraThread == null && !mActivity.mIsModuleSwitchInProgress) {
- mOpenCameraThread = new OpenCameraThread();
- mOpenCameraThread.start();
+ startOpenCameraThread();
}
initializeControlByIntent();
mQuickCapture = mActivity.getIntent().getBooleanExtra(EXTRA_QUICK_CAPTURE, false);
@@ -1886,8 +1910,7 @@ public class PhotoModule
if (mOpenCameraFail || mCameraDisabled) return;
if (mOpenCameraThread == null) {
- mOpenCameraThread = new OpenCameraThread();
- mOpenCameraThread.start();
+ startOpenCameraThread();
}
mJpegPictureCallbackTime = 0;
@@ -1950,14 +1973,8 @@ public class PhotoModule
Log.v(TAG, "On pause.");
mUI.showPreviewCover();
- try {
- if (mOpenCameraThread != null) {
- mOpenCameraThread.join();
- }
- } catch (InterruptedException ex) {
- // ignore
- }
- mOpenCameraThread = null;
+ stopOpenCameraThread();
+
// Reset the focus first. Camera CTS does not guarantee that
// cancelAutoFocus is allowed after preview stops.
if (mCameraDevice != null && mCameraState != PREVIEW_STOPPED) {