properly handle autoexposure and auto flash

This commit is contained in:
tibbi 2018-06-04 14:56:25 +02:00
parent ffd25d0cdf
commit 16a2745652

View File

@ -323,7 +323,7 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
mCaptureSession = cameraCaptureSession mCaptureSession = cameraCaptureSession
mPreviewRequestBuilder!!.apply { mPreviewRequestBuilder!!.apply {
set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE) set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE)
set(CaptureRequest.FLASH_MODE, getFlashlightMode()) setFlashAndExposure(this)
mPreviewRequest = build() mPreviewRequest = build()
} }
mCaptureSession!!.setRepeatingRequest(mPreviewRequest, mCaptureCallback, mBackgroundHandler) mCaptureSession!!.setRepeatingRequest(mPreviewRequest, mCaptureCallback, mBackgroundHandler)
@ -399,10 +399,11 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
mRotationAtCapture = mActivity.mLastHandledOrientation mRotationAtCapture = mActivity.mLastHandledOrientation
val captureBuilder = mCameraDevice!!.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE).apply { val captureBuilder = mCameraDevice!!.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE).apply {
addTarget(mImageReader!!.surface) addTarget(mImageReader!!.surface)
set(CaptureRequest.FLASH_MODE, getFlashlightMode()) setFlashAndExposure(this)
set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE) set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE)
set(CaptureRequest.JPEG_ORIENTATION, mSensorOrientation) set(CaptureRequest.JPEG_ORIENTATION, mSensorOrientation)
set(CaptureRequest.SCALER_CROP_REGION, mZoomRect) set(CaptureRequest.SCALER_CROP_REGION, mZoomRect)
set(CaptureRequest.CONTROL_CAPTURE_INTENT, CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE)
} }
val captureCallback = object : CameraCaptureSession.CaptureCallback() { val captureCallback = object : CameraCaptureSession.CaptureCallback() {
@ -557,6 +558,14 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
} }
} }
private fun setFlashAndExposure(builder: CaptureRequest.Builder) {
val aeMode = if (mFlashlightState == FLASH_AUTO) CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH else CameraMetadata.CONTROL_AE_MODE_ON
builder.apply {
set(CaptureRequest.FLASH_MODE, getFlashlightMode())
set(CaptureRequest.CONTROL_AE_MODE, aeMode)
}
}
private fun getCameraManager() = mActivity.getSystemService(Context.CAMERA_SERVICE) as CameraManager private fun getCameraManager() = mActivity.getSystemService(Context.CAMERA_SERVICE) as CameraManager
private fun getCameraCharacteristics(cameraId: String = mCameraId) = getCameraManager().getCameraCharacteristics(cameraId) private fun getCameraCharacteristics(cameraId: String = mCameraId) = getCameraManager().getCameraCharacteristics(cameraId)
@ -619,7 +628,7 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie
override fun checkFlashlight() { override fun checkFlashlight() {
if (mCameraState == STATE_PREVIEW && mIsFlashSupported) { if (mCameraState == STATE_PREVIEW && mIsFlashSupported) {
mPreviewRequestBuilder!!.set(CaptureRequest.FLASH_MODE, getFlashlightMode()) setFlashAndExposure(mPreviewRequestBuilder!!)
mPreviewRequest = mPreviewRequestBuilder!!.build() mPreviewRequest = mPreviewRequestBuilder!!.build()
mCaptureSession!!.setRepeatingRequest(mPreviewRequest, mCaptureCallback, mBackgroundHandler) mCaptureSession!!.setRepeatingRequest(mPreviewRequest, mCaptureCallback, mBackgroundHandler)
mActivity.updateFlashlightState(mFlashlightState) mActivity.updateFlashlightState(mFlashlightState)