diff options
author | Jack Yoo <jyoo@codeaurora.org> | 2016-09-06 10:00:42 -0700 |
---|---|---|
committer | Jay Wang <jaywang@codeaurora.org> | 2016-09-27 15:54:47 -0700 |
commit | 6b4a36b3b4f55c8dd2e18d8f84c4106ce0590f50 (patch) | |
tree | 04b8eb0f8ec8871658bd15e1443390b653bc790b /src/com/android/camera/imageprocessor/FrameProcessor.java | |
parent | 21576c048827ed0f376d25a9487d43a0d6ca475f (diff) | |
download | android_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.java | 35 |
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) { |