diff options
author | junjiez <junjiez@codeaurora.org> | 2017-04-12 14:42:15 +0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-04-11 23:58:35 -0700 |
commit | c1eeffffac8f6d75b65604741493b67040ca1beb (patch) | |
tree | e705ecb1bf686273cd183bafdd6bd46ddbb0e9a0 /src/com/android/camera/imageprocessor | |
parent | eedec4a69b1ce642f95f28dc434d0405ade1c1b6 (diff) | |
download | android_packages_apps_Snap-c1eeffffac8f6d75b65604741493b67040ca1beb.tar.gz android_packages_apps_Snap-c1eeffffac8f6d75b65604741493b67040ca1beb.tar.bz2 android_packages_apps_Snap-c1eeffffac8f6d75b65604741493b67040ca1beb.zip |
SnapdragonCamera: Fix image quality of ChromaFlash
When start to take picture with flash on, keep
capturing until AeState becomes right.
Change-Id: Id34166d44f444ddd44156921aae4c9add2efbc55
Diffstat (limited to 'src/com/android/camera/imageprocessor')
-rwxr-xr-x[-rw-r--r--] | src/com/android/camera/imageprocessor/filter/ChromaflashFilter.java | 60 |
1 files changed, 55 insertions, 5 deletions
diff --git a/src/com/android/camera/imageprocessor/filter/ChromaflashFilter.java b/src/com/android/camera/imageprocessor/filter/ChromaflashFilter.java index 607908ebf..4682e3947 100644..100755 --- a/src/com/android/camera/imageprocessor/filter/ChromaflashFilter.java +++ b/src/com/android/camera/imageprocessor/filter/ChromaflashFilter.java @@ -32,8 +32,10 @@ import android.graphics.Rect; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCaptureSession; import android.hardware.camera2.CameraCharacteristics; +import android.hardware.camera2.CameraDevice; import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.CaptureResult; +import android.hardware.camera2.TotalCaptureResult; import android.os.Handler; import android.util.Log; @@ -155,20 +157,33 @@ public class ChromaflashFilter implements ImageFilter{ for (int i = 0; i < NUM_REQUIRED_IMAGE; i++) { if (i == 0) { captureSession.capture(builder.build(), callback, handler); + waitForImage(i); } else if (i == 1) { //To change the setting builder.set(CaptureRequest.CONTROL_AE_LOCK, Boolean.FALSE); + builder.set(CaptureRequest.FLASH_MODE, + CaptureRequest.FLASH_MODE_SINGLE); captureSession.capture(builder.build(), callback, handler); waitForImage(i); } else if (i == 2) { //To change the setting - builder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON); - builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE); - builder.set(CaptureRequest.CONTROL_AE_LOCK, Boolean.TRUE); - captureSession.capture(builder.build(), callback, handler); - waitForImage(i); + builder.set(CaptureRequest.CONTROL_AE_MODE, + CaptureRequest.CONTROL_AE_MODE_ON); + CaptureRequest.Builder AeTunningBuilder = captureSession.getDevice(). + createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); + CaptureRequest request = builder.build(); + for (CaptureRequest.Key key : request.getKeys()) { + AeTunningBuilder.set(key, request.get(key)); + } + AeTunningBuilder.addTarget(mModule.getPreviewSurfaceForSession( + mModule.getMainCameraId())); + + waitForAeBlock(AeTunningBuilder,builder,callback, + captureSession,handler,5); } else if (i == 3) { captureSession.capture(builder.build(), callback, handler); + waitForImage(i); } else if (i == 4) { //To change the setting builder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF); + builder.set(CaptureRequest.CONTROL_AE_LOCK, Boolean.FALSE); captureSession.capture(builder.build(), callback, handler); waitForImage(i); } else if (i == 5) { @@ -190,6 +205,41 @@ public class ChromaflashFilter implements ImageFilter{ } } + private void waitForAeBlock(final CaptureRequest.Builder tuningBuilder, + final CaptureRequest.Builder captureBuilder, + final CameraCaptureSession.CaptureCallback callback, + final CameraCaptureSession captureSession, + final Handler handler, final int AeTunningTime) { + try{ + captureSession.capture(tuningBuilder.build(), + new CameraCaptureSession.CaptureCallback() { + private boolean mAeStateConverged = false; + + @Override + public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, + TotalCaptureResult result) { + Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE); + Log.d(TAG,"AE tunning onCaptureCompleted aeState = " + aeState); + if (aeState != null && aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) { + mAeStateConverged = true; + } + Log.d(TAG,"AE tunning completed mAeStateConverged = " + mAeStateConverged); + if(!mAeStateConverged && AeTunningTime >= 2) { + int resetTime = AeTunningTime - 1; + waitForAeBlock(tuningBuilder,captureBuilder,callback, + captureSession,handler,resetTime); + } else { + try{ + captureSession.capture(captureBuilder.build(),callback,handler); + } catch (CameraAccessException e){} + } + } + }, handler); + }catch (CameraAccessException e){ + + } + } + public static boolean isSupportedStatic() { return mIsSupported; } |