fix a glitch preventing capturing multiple images in a row

This commit is contained in:
tibbi 2018-07-09 23:51:58 +02:00
parent 15ba3462c1
commit 8fae1b167a
4 changed files with 20 additions and 8 deletions

View File

@ -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 {

View File

@ -36,4 +36,6 @@ interface MyPreview {
fun deviceOrientationChanged()
fun resumeCamera(): Boolean
fun imageSaved()
}

View File

@ -155,6 +155,8 @@ class PreviewCameraOne : ViewGroup, SurfaceHolder.Callback, MyPreview {
return true
}
override fun imageSaved() {}
private fun initCamera(): Boolean {
if (mCamera == null)
return false

View File

@ -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) {}
}