summaryrefslogtreecommitdiffstats
path: root/src/com/android/camera/imageprocessor/FrameProcessor.java
diff options
context:
space:
mode:
authorJack Yoo <jyoo@codeaurora.org>2016-09-06 10:00:42 -0700
committerJay Wang <jaywang@codeaurora.org>2016-09-27 15:54:47 -0700
commit6b4a36b3b4f55c8dd2e18d8f84c4106ce0590f50 (patch)
tree04b8eb0f8ec8871658bd15e1443390b653bc790b /src/com/android/camera/imageprocessor/FrameProcessor.java
parent21576c048827ed0f376d25a9487d43a0d6ca475f (diff)
downloadandroid_packages_apps_Snap-6b4a36b3b4f55c8dd2e18d8f84c4106ce0590f50.tar.gz
android_packages_apps_Snap-6b4a36b3b4f55c8dd2e18d8f84c4106ce0590f50.tar.bz2
android_packages_apps_Snap-6b4a36b3b4f55c8dd2e18d8f84c4106ce0590f50.zip
SnapdragonCamera: Init optimization and concurrency fixes
1. Frameprocessor init call to be in parallel. 2. Fix concurrency issue on filters with background saving feature. 3. Various other capture module concurrency issue fixes. Change-Id: Icce713b0d6e4ea1c15bbe9ac2cfb3977b0a9c1d7 CRs-Fixed: 1067848
Diffstat (limited to 'src/com/android/camera/imageprocessor/FrameProcessor.java')
-rw-r--r--src/com/android/camera/imageprocessor/FrameProcessor.java35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/com/android/camera/imageprocessor/FrameProcessor.java b/src/com/android/camera/imageprocessor/FrameProcessor.java
index 4bee19194..193e8ee17 100644
--- a/src/com/android/camera/imageprocessor/FrameProcessor.java
+++ b/src/com/android/camera/imageprocessor/FrameProcessor.java
@@ -90,6 +90,7 @@ public class FrameProcessor {
public static final int LISTENER_TRACKING_FOCUS = 2;
private CaptureModule mModule;
private boolean mIsVideoOn = false;
+ private boolean mIsInitialized = false;
public FrameProcessor(Activity activity, CaptureModule module) {
mActivity = activity;
@@ -98,7 +99,7 @@ public class FrameProcessor {
mFinalFilters = new ArrayList<ImageFilter>();
}
- public void init(Size previewDim) {
+ private void init(Size previewDim) {
mIsActive = true;
mSize = previewDim;
synchronized (mAllocationLock) {
@@ -135,6 +136,7 @@ public class FrameProcessor {
mTask = new ProcessingTask();
mInputImageReader.setOnImageAvailableListener(mTask, mProcessingHandler);
mIsAllocationEverUsed = false;
+ mIsInitialized = true;
}
}
@@ -177,13 +179,22 @@ public class FrameProcessor {
mFinalFilters = new ArrayList<ImageFilter>();
}
- public void onOpen(ArrayList<Integer> filterIds) {
+ public void onOpen(ArrayList<Integer> filterIds, final Size size) {
cleanFilterSet();
if (filterIds != null) {
for (Integer i : filterIds) {
addFilter(i.intValue());
}
}
+ if(isFrameFilterEnabled() || isFrameListnerEnabled()) {
+ new Thread() {
+ public void run() {
+ init(size);
+ }
+ }.start();
+ } else {
+ mIsInitialized = true;
+ }
}
private void addFilter(int filterId) {
@@ -203,8 +214,18 @@ public class FrameProcessor {
}
+ private void waitForInitialization() {
+ while(!mIsInitialized) {
+ try {
+ Thread.sleep(10);
+ } catch(InterruptedException e) {
+ }
+ }
+ }
+
public void onClose() {
mIsActive = false;
+ waitForInitialization();
synchronized (mAllocationLock) {
if (mIsAllocationEverUsed) {
if (mInputAllocation != null) {
@@ -228,6 +249,7 @@ public class FrameProcessor {
mOutputAllocation = null;
mInputAllocation = null;
mVideoOutputAllocation = null;
+ mIsInitialized = false;
}
if (mProcessingThread != null) {
mProcessingThread.quitSafely();
@@ -299,7 +321,15 @@ public class FrameProcessor {
return true;
}
+ public boolean isFrameListnerEnabled() {
+ if (mPreviewFilters.size() == 0) {
+ return false;
+ }
+ return true;
+ }
+
public void setOutputSurface(Surface surface) {
+ waitForInitialization();
mSurfaceAsItIs = surface;
if (mFinalFilters.size() != 0) {
mOutputAllocation.setSurface(surface);
@@ -307,6 +337,7 @@ public class FrameProcessor {
}
public void setVideoOutputSurface(Surface surface) {
+ waitForInitialization();
if (surface == null) {
synchronized (mAllocationLock) {
if (mVideoOutputAllocation != null) {