From 8fae1b167a70f488ba081026ec983ec44a57658f Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 9 Jul 2018 23:51:58 +0200 Subject: [PATCH] fix a glitch preventing capturing multiple images in a row --- .../camera/activities/MainActivity.kt | 1 + .../camera/interfaces/MyPreview.kt | 2 ++ .../camera/views/PreviewCameraOne.kt | 2 ++ .../camera/views/PreviewCameraTwo.kt | 23 ++++++++++++------- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt index 52d4d909..5bb8154b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/activities/MainActivity.kt @@ -555,6 +555,7 @@ class MainActivity : SimpleActivity(), PhotoProcessor.MediaSavedListener { fun drawFocusCircle(x: Float, y: Float) = mFocusCircleView.drawFocusCircle(x, y) override fun mediaSaved(path: String) { + mPreview?.imageSaved() rescanPaths(arrayListOf(path)) { setupPreviewImage(true) Intent(BROADCAST_REFRESH_MEDIA).apply { diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/interfaces/MyPreview.kt b/app/src/main/kotlin/com/simplemobiletools/camera/interfaces/MyPreview.kt index d73bb033..8cd8bf5c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/interfaces/MyPreview.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/interfaces/MyPreview.kt @@ -36,4 +36,6 @@ interface MyPreview { fun deviceOrientationChanged() fun resumeCamera(): Boolean + + fun imageSaved() } diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraOne.kt b/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraOne.kt index bbed22f4..2b5499c7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraOne.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraOne.kt @@ -155,6 +155,8 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback, MyPreview { return true } + override fun imageSaved() {} + private fun initCamera(): Boolean { if (mCamera == null) return false diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraTwo.kt b/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraTwo.kt index c33879c2..d682f7d9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraTwo.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraTwo.kt @@ -591,14 +591,7 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie } val captureCallback = object : CameraCaptureSession.CaptureCallback() { - override fun onCaptureCompleted(session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult) { - mActivity.toggleBottomButtons(false) - if (shouldLockFocus()) { - unlockFocus() - } else { - resetPreviewSession() - } - } + override fun onCaptureCompleted(session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult) {} override fun onCaptureFailed(session: CameraCaptureSession?, request: CaptureRequest?, failure: CaptureFailure?) { super.onCaptureFailed(session, request, failure) @@ -753,6 +746,10 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie val texture = mTextureView.surfaceTexture!! texture.setDefaultBufferSize(mPreviewSize!!.width, mPreviewSize!!.height) + val currentResolution = getCurrentResolution() + mImageReader = ImageReader.newInstance(currentResolution.width, currentResolution.height, ImageFormat.JPEG, 2) + mImageReader!!.setOnImageAvailableListener(imageAvailableListener, mBackgroundHandler) + val surface = Surface(texture) mCameraDevice!!.createCaptureSession(Arrays.asList(surface, mImageReader!!.surface), stateCallback, null) } catch (e: Exception) { @@ -1019,5 +1016,15 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie override fun resumeCamera() = true + override fun imageSaved() { + mImageReader?.close() + mActivity.toggleBottomButtons(false) + if (shouldLockFocus()) { + unlockFocus() + } else { + resetPreviewSession() + } + } + override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {} }