diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2018-10-06 07:18:04 -0700 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2018-10-06 07:18:04 -0700 |
| commit | 4feab910ab9efada7a911a8638856c55ee09b9ca (patch) | |
| tree | 1fd24a47ee24950afa47b60839ad044b33a9bc06 /src/com/android/camera/imageprocessor | |
| parent | c6cde759cd7d38d28b3b2e75a36161b041cd6e9c (diff) | |
| parent | 9530e578cb7c92f8abd1dbf921113387bfb9b047 (diff) | |
Change-Id: I8cb5d9eee763cfc5df1a95b1148cd054ffda62eb
Diffstat (limited to 'src/com/android/camera/imageprocessor')
| -rwxr-xr-x | src/com/android/camera/imageprocessor/PostProcessor.java | 105 | ||||
| -rwxr-xr-x[-rw-r--r--] | src/com/android/camera/imageprocessor/ZSLQueue.java | 13 |
2 files changed, 49 insertions, 69 deletions
diff --git a/src/com/android/camera/imageprocessor/PostProcessor.java b/src/com/android/camera/imageprocessor/PostProcessor.java index 8cec1b8a7..a8ed2dc8d 100755 --- a/src/com/android/camera/imageprocessor/PostProcessor.java +++ b/src/com/android/camera/imageprocessor/PostProcessor.java @@ -102,7 +102,7 @@ public class PostProcessor{ public static final int FILTER_MAX = 8; //BestPicture requires 10 which is the biggest among filters - private static final int MAX_REQUIRED_IMAGE_NUM = 11; + private static final int MAX_REQUIRED_IMAGE_NUM = 3; private int mCurrentNumImage = 0; private ImageFilter mFilter; private int mFilterIndex; @@ -134,6 +134,7 @@ public class PostProcessor{ private ImageReader mImageReader; private ImageReader mZSLReprocessImageReader; private boolean mUseZSL = true; + private boolean mProcessZSL = true; private boolean mSaveRaw = false; private Handler mZSLHandler; private HandlerThread mZSLHandlerThread; @@ -144,7 +145,6 @@ public class PostProcessor{ private TotalCaptureResult mZSLFallOffResult = null; private boolean mIsZSLFallOff = false; private TotalCaptureResult mLatestResultForLongShot = null; - private LinkedList<ZSLQueue.ImageItem> mFallOffImages = new LinkedList<ZSLQueue.ImageItem>(); private int mPendingContinuousRequestCount = 0; public int mMaxRequiredImageNum; @@ -199,50 +199,6 @@ public class PostProcessor{ } } - private void clearFallOffImage() { - for(ZSLQueue.ImageItem item: mFallOffImages ) { - try { - item.getImage().close(); - Image raw = item.getRawImage(); - if (raw != null) { - raw.close(); - } - } catch(Exception e) { - } - } - mFallOffImages.clear(); - } - - private ZSLQueue.ImageItem findFallOffImage(long timestamp) { - ZSLQueue.ImageItem foundImage = null; - for(ZSLQueue.ImageItem item: mFallOffImages ) { - if(item.getImage().getTimestamp() == timestamp) { - foundImage = item; - break; - } - } - if(foundImage != null) { - mFallOffImages.remove(foundImage); - } - return foundImage; - } - - private void addFallOffImage(ZSLQueue.ImageItem item) { - mFallOffImages.add(item); - if(mFallOffImages.size() >= MAX_REQUIRED_IMAGE_NUM - 1) { - ZSLQueue.ImageItem it = mFallOffImages.getFirst(); - try { - it.getImage().close(); - Image raw = item.getRawImage(); - if (raw != null) { - raw.close(); - } - } catch(Exception e) { - } - mFallOffImages.removeFirst(); - } - } - class ImageHandlerTask implements Runnable, ImageReader.OnImageAvailableListener { private ImageWrapper mImageWrapper = null; private ImageReader mRawImageReader = null; @@ -250,6 +206,18 @@ public class PostProcessor{ @Override public void onImageAvailable(ImageReader reader) { + if (!mProcessZSL) { + Image image = reader.acquireNextImage(); + if (image != null) { + image.close(); + } + if (mSaveRaw && mRawImageReader != null) { + Image rawImage = mRawImageReader.acquireNextImage(); + if (rawImage != null) + rawImage.close(); + } + return; + } try { if(mUseZSL) { if(mController.isLongShotActive() && mPendingContinuousRequestCount > 0) { @@ -268,35 +236,18 @@ public class PostProcessor{ } return; } + if(mIsZSLFallOff) { - Image image = reader.acquireNextImage(); - Image rawImage = null; - if (mSaveRaw && mRawImageReader != null) { - rawImage = mRawImageReader.acquireNextImage(); - } - ZSLQueue.ImageItem imageItem = new ZSLQueue.ImageItem(); - imageItem.setImage(image,rawImage); - if(mZSLFallOffResult == null) { - addFallOffImage(imageItem); - return; - } - addFallOffImage(imageItem); - ZSLQueue.ImageItem foundImage = findFallOffImage( - mZSLFallOffResult.get(CaptureResult.SENSOR_TIMESTAMP).longValue()); - if(foundImage != null && foundImage.getImage() != null) { - Log.d(TAG,"ZSL fall off image is found"); - reprocessImage(foundImage.getImage(), mZSLFallOffResult); - Image raw = foundImage.getRawImage(); + ZSLQueue.ImageItem foundImage = mZSLQueue.tryToGetMatchingItem(); + if (foundImage != null) { + reprocessImage(foundImage.getImage(),foundImage.getMetadata()); + Image raw = foundImage.getRawImage(); if (raw != null) { onRawImageToProcess(raw); } mIsZSLFallOff = false; - clearFallOffImage(); mZSLFallOffResult = null; - } else { - clearFallOffImage(); } - return; } Image image = reader.acquireLatestImage(); @@ -350,7 +301,6 @@ public class PostProcessor{ Log.e(TAG, "Max images has been already acquired. "); mIsZSLFallOff = false; mZSLFallOffResult = null; - clearFallOffImage(); } } @@ -456,12 +406,18 @@ public class PostProcessor{ if(mController.getPreviewCaptureResult() == null || mController.getPreviewCaptureResult().get(CaptureResult.CONTROL_AE_STATE) == CameraMetadata.CONTROL_AE_STATE_FLASH_REQUIRED) { if(DEBUG_ZSL) Log.d(TAG, "Flash required image"); + if (imageItem != null) + imageItem.closeImage(); imageItem = null; } if (mController.isSelfieFlash()) { + if (imageItem != null) + imageItem.closeImage(); imageItem = null; } if (mController.isLongShotActive()) { + if (imageItem != null) + imageItem.closeImage(); imageItem = null; } if (imageItem != null) { @@ -757,6 +713,17 @@ public class PostProcessor{ mPendingContinuousRequestCount = 0; } + public void enableZSLQueue(boolean enable) { + if (enable) { + mProcessZSL = true; + } else { + mProcessZSL = false; + if (mZSLQueue != null) { + mZSLQueue.clear(); + } + } + } + private void startBackgroundThread() { mHandlerThread = new HandlerThread("PostProcessorThread"); mHandlerThread.start(); diff --git a/src/com/android/camera/imageprocessor/ZSLQueue.java b/src/com/android/camera/imageprocessor/ZSLQueue.java index 0509b8fb5..bf29267e3 100644..100755 --- a/src/com/android/camera/imageprocessor/ZSLQueue.java +++ b/src/com/android/camera/imageprocessor/ZSLQueue.java @@ -207,6 +207,19 @@ public class ZSLQueue { } } + public void clear() { + synchronized (mLock) { + for (int i = 0; i < mBuffer.length; i++) { + if (mBuffer[i] != null) { + mBuffer[i].closeImage(); + mBuffer[i].closeMeta(); + } + } + mImageHead = 0; + mMetaHead = 0; + } + } + private boolean checkImageRequirement(TotalCaptureResult captureResult) { if( (captureResult.get(CaptureResult.LENS_STATE) != null && captureResult.get(CaptureResult.LENS_STATE).intValue() == CaptureResult.LENS_STATE_MOVING) |
