mirror of
https://github.com/SimpleMobileTools/Simple-Camera.git
synced 2025-04-28 14:08:45 +02:00
fix toggling between flash on/off
This commit is contained in:
parent
4aed627b7c
commit
3fd08d3940
@ -212,6 +212,7 @@ class MainActivity : SimpleActivity(), PreviewListener, PhotoProcessor.MediaSave
|
|||||||
|
|
||||||
val initialFlashlightState = if (config.turnFlashOffAtStartup) FLASH_OFF else config.flashlightState
|
val initialFlashlightState = if (config.turnFlashOffAtStartup) FLASH_OFF else config.flashlightState
|
||||||
mPreview!!.setFlashlightState(initialFlashlightState)
|
mPreview!!.setFlashlightState(initialFlashlightState)
|
||||||
|
updateFlashlightState(initialFlashlightState)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initButtons() {
|
private fun initButtons() {
|
||||||
|
@ -29,8 +29,9 @@ const val FLASH_ON = 1
|
|||||||
const val FLASH_AUTO = 2
|
const val FLASH_AUTO = 2
|
||||||
|
|
||||||
// camera states
|
// camera states
|
||||||
const val STATE_PREVIEW = 0
|
const val STATE_INIT = 0
|
||||||
const val STATE_PICTURE_TAKEN = 1
|
const val STATE_PREVIEW = 1
|
||||||
const val STATE_WAITING_LOCK = 2
|
const val STATE_PICTURE_TAKEN = 2
|
||||||
const val STATE_WAITING_PRECAPTURE = 3
|
const val STATE_WAITING_LOCK = 3
|
||||||
const val STATE_WAITING_NON_PRECAPTURE = 4
|
const val STATE_WAITING_PRECAPTURE = 4
|
||||||
|
const val STATE_WAITING_NON_PRECAPTURE = 5
|
||||||
|
@ -41,8 +41,10 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
private var mSensorOrientation = 0
|
private var mSensorOrientation = 0
|
||||||
private var mIsFlashSupported = true
|
private var mIsFlashSupported = true
|
||||||
private var mIsImageCaptureIntent = false
|
private var mIsImageCaptureIntent = false
|
||||||
|
private var mIsInVideoMode = false
|
||||||
private var mCameraId = ""
|
private var mCameraId = ""
|
||||||
private var mCameraState = STATE_PREVIEW
|
private var mCameraState = STATE_INIT
|
||||||
|
private var mFlashlightState = FLASH_OFF
|
||||||
|
|
||||||
private var mBackgroundThread: HandlerThread? = null
|
private var mBackgroundThread: HandlerThread? = null
|
||||||
private var mBackgroundHandler: Handler? = null
|
private var mBackgroundHandler: Handler? = null
|
||||||
@ -74,6 +76,10 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
|
|
||||||
override fun onPaused() {
|
override fun onPaused() {
|
||||||
stopBackgroundThread()
|
stopBackgroundThread()
|
||||||
|
mCaptureSession?.close()
|
||||||
|
mCameraDevice?.close()
|
||||||
|
mCameraDevice = null
|
||||||
|
mCaptureSession = null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture?, width: Int, height: Int) {
|
override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture?, width: Int, height: Int) {
|
||||||
@ -276,9 +282,10 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
mCaptureSession = cameraCaptureSession
|
mCaptureSession = cameraCaptureSession
|
||||||
try {
|
try {
|
||||||
mPreviewRequestBuilder!!.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE)
|
mPreviewRequestBuilder!!.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE)
|
||||||
setAutoFlash(mPreviewRequestBuilder!!)
|
setupPreviewProperties(mPreviewRequestBuilder!!)
|
||||||
mPreviewRequest = mPreviewRequestBuilder!!.build()
|
mPreviewRequest = mPreviewRequestBuilder!!.build()
|
||||||
mCaptureSession!!.setRepeatingRequest(mPreviewRequest, mCaptureCallback, mBackgroundHandler)
|
mCaptureSession!!.setRepeatingRequest(mPreviewRequest, mCaptureCallback, mBackgroundHandler)
|
||||||
|
mCameraState = STATE_PREVIEW
|
||||||
} catch (e: CameraAccessException) {
|
} catch (e: CameraAccessException) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -291,10 +298,9 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setAutoFlash(requestBuilder: CaptureRequest.Builder) {
|
private fun setupPreviewProperties(requestBuilder: CaptureRequest.Builder) {
|
||||||
if (mIsFlashSupported) {
|
val flashMode = if (mFlashlightState == FLASH_ON) CameraMetadata.FLASH_MODE_TORCH else CameraMetadata.FLASH_MODE_OFF
|
||||||
requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH)
|
requestBuilder.set(CaptureRequest.FLASH_MODE, flashMode)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private val mCaptureCallback = object : CameraCaptureSession.CaptureCallback() {
|
private val mCaptureCallback = object : CameraCaptureSession.CaptureCallback() {
|
||||||
@ -358,7 +364,8 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
captureBuilder.addTarget(mImageReader!!.surface)
|
captureBuilder.addTarget(mImageReader!!.surface)
|
||||||
|
|
||||||
captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE)
|
captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE)
|
||||||
setAutoFlash(captureBuilder)
|
val flashMode = if (mFlashlightState == FLASH_ON) CameraMetadata.FLASH_MODE_TORCH else CameraMetadata.FLASH_MODE_OFF
|
||||||
|
captureBuilder.set(CaptureRequest.FLASH_MODE, flashMode)
|
||||||
|
|
||||||
val rotation = mActivity.windowManager.defaultDisplay.rotation
|
val rotation = mActivity.windowManager.defaultDisplay.rotation
|
||||||
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation))
|
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation))
|
||||||
@ -383,7 +390,7 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
private fun unlockFocus() {
|
private fun unlockFocus() {
|
||||||
try {
|
try {
|
||||||
mPreviewRequestBuilder!!.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL)
|
mPreviewRequestBuilder!!.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL)
|
||||||
setAutoFlash(mPreviewRequestBuilder!!)
|
setupPreviewProperties(mPreviewRequestBuilder!!)
|
||||||
mCaptureSession!!.capture(mPreviewRequestBuilder!!.build(), mCaptureCallback, mBackgroundHandler)
|
mCaptureSession!!.capture(mPreviewRequestBuilder!!.build(), mCaptureCallback, mBackgroundHandler)
|
||||||
mCameraState = STATE_PREVIEW
|
mCameraState = STATE_PREVIEW
|
||||||
mCaptureSession!!.setRepeatingRequest(mPreviewRequest, mCaptureCallback, mBackgroundHandler)
|
mCaptureSession!!.setRepeatingRequest(mPreviewRequest, mCaptureCallback, mBackgroundHandler)
|
||||||
@ -413,15 +420,15 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun setFlashlightState(state: Int) {
|
override fun setFlashlightState(state: Int) {
|
||||||
|
mFlashlightState = state
|
||||||
|
checkFlashlight()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setCamera(cameraId: Int): Boolean {
|
override fun setCamera(cameraId: Int): Boolean {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getCameraState(): Int {
|
override fun getCameraState() = mCameraState
|
||||||
return STATE_PREVIEW
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun releaseCamera() {
|
override fun releaseCamera() {
|
||||||
}
|
}
|
||||||
@ -433,6 +440,8 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun toggleFlashlight() {
|
override fun toggleFlashlight() {
|
||||||
|
val newState = ++mFlashlightState % if (mIsInVideoMode) 2 else 3
|
||||||
|
setFlashlightState(newState)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun tryTakePicture() {
|
override fun tryTakePicture() {
|
||||||
@ -447,13 +456,21 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun initPhotoMode() {
|
override fun initPhotoMode() {
|
||||||
|
mIsInVideoMode = false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun initVideoMode(): Boolean {
|
override fun initVideoMode(): Boolean {
|
||||||
|
mIsInVideoMode = true
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun checkFlashlight() {
|
override fun checkFlashlight() {
|
||||||
|
if (mCameraState == STATE_PREVIEW) {
|
||||||
|
val flashMode = if (mFlashlightState == FLASH_ON) CameraMetadata.FLASH_MODE_TORCH else CameraMetadata.FLASH_MODE_OFF
|
||||||
|
mPreviewRequestBuilder!!.set(CaptureRequest.FLASH_MODE, flashMode)
|
||||||
|
mCaptureSession!!.setRepeatingRequest(mPreviewRequestBuilder!!.build(), mCaptureCallback, mBackgroundHandler)
|
||||||
|
mActivity.updateFlashlightState(mFlashlightState)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun deviceOrientationChanged() {
|
override fun deviceOrientationChanged() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user