1 /* 2 * Copyright 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package androidx.camera.integration.antelope 18 19 import android.hardware.camera2.CameraCaptureSession 20 import android.hardware.camera2.CameraCharacteristics 21 import android.hardware.camera2.CameraDevice 22 import android.hardware.camera2.CaptureRequest 23 import android.media.ImageReader 24 import android.os.Handler 25 import android.os.HandlerThread 26 import android.util.Size 27 import androidx.camera.core.ImageCapture 28 import androidx.camera.core.Preview 29 import androidx.camera.integration.antelope.MainActivity.Companion.FIXED_FOCUS_DISTANCE 30 import androidx.camera.integration.antelope.MainActivity.Companion.INVALID_FOCAL_LENGTH 31 import androidx.camera.integration.antelope.MainActivity.Companion.NO_APERTURE 32 import androidx.camera.integration.antelope.cameracontrollers.Camera2CaptureSessionCallback 33 import androidx.camera.integration.antelope.cameracontrollers.Camera2DeviceStateCallback 34 import androidx.camera.integration.antelope.cameracontrollers.CameraState 35 import androidx.camera.integration.antelope.cameracontrollers.CameraXCaptureSessionCallback 36 import androidx.camera.integration.antelope.cameracontrollers.CameraXDeviceStateCallback 37 import androidx.camera.integration.antelope.cameracontrollers.CameraXPreviewSessionStateCallback 38 39 /** 40 * CameraParams contains a list of device characteristics for a given camera device. 41 * 42 * These are populated on app startup using initializeCameras in CameraUtils to prevent multiple 43 * calls to the CameraManager. 44 * 45 * In addition, some convenience variables for camera API callbacks, UI surfaces, and ImageReaders 46 * are included to facilitate testing. The calling Activity is responsible to make sure these 47 * convenience variables are coordinated with the active camera device. 48 */ 49 class CameraParams { 50 // Intrinsic device characteristics 51 internal var id: String = "" 52 internal var device: CameraDevice? = null 53 internal var isFront: Boolean = false 54 internal var isExternal: Boolean = false 55 internal var hasFlash: Boolean = false 56 internal var hasMulti: Boolean = false 57 internal var hasManualControl: Boolean = false 58 internal var physicalCameras: Set<String> = HashSet<String>() 59 internal var focalLengths: FloatArray = FloatArray(0) 60 internal var apertures: FloatArray = FloatArray(0) 61 internal var smallestFocalLength: Float = INVALID_FOCAL_LENGTH 62 internal var minDeltaFromNormal: Float = INVALID_FOCAL_LENGTH 63 internal var minFocusDistance: Float = FIXED_FOCUS_DISTANCE 64 internal var largestAperture: Float = NO_APERTURE 65 internal var effects: IntArray = IntArray(0) 66 internal var hasSepia: Boolean = false 67 internal var hasMono: Boolean = false 68 internal var hasAF: Boolean = false 69 internal var megapixels: Int = 0 70 internal var isLegacy: Boolean = false 71 internal var cam1AFSupported: Boolean = false 72 internal var characteristics: CameraCharacteristics? = null 73 74 // Camera1/Camera2 min/max size (sometimes different for some devices) 75 internal var cam1MinSize: Size = Size(0, 0) 76 internal var cam1MaxSize: Size = Size(0, 0) 77 internal var cam2MinSize: Size = Size(0, 0) 78 internal var cam2MaxSize: Size = Size(0, 0) 79 80 // Current state 81 internal var state = CameraState.UNINITIALIZED 82 internal var isOpen: Boolean = false 83 internal var isPreviewing: Boolean = false 84 85 // Thread to use for this device 86 internal var backgroundThread: HandlerThread? = null 87 internal var backgroundHandler: Handler? = null 88 89 // Convenience UI references 90 internal var imageReader: ImageReader? = null 91 internal var previewSurfaceView: AutoFitSurfaceView? = null 92 internal var cameraXPreviewTexture: AutoFitTextureView? = null 93 94 // Camera 2 API callback references 95 internal var captureRequestBuilder: CaptureRequest.Builder? = null 96 97 internal var camera2CaptureSession: CameraCaptureSession? = null 98 internal var camera2CaptureSessionCallback: Camera2CaptureSessionCallback? = null 99 internal var camera2DeviceStateCallback: Camera2DeviceStateCallback? = null 100 internal var imageAvailableListener: ImageAvailableListener? = null 101 102 // Camera X 103 internal var cameraXDeviceStateCallback: CameraXDeviceStateCallback? = null 104 internal var cameraXPreviewSessionStateCallback: CameraXPreviewSessionStateCallback? = null 105 internal var cameraXCaptureSessionCallback: CameraXCaptureSessionCallback? = null 106 internal var cameraXPreviewBuilder: Preview.Builder = Preview.Builder() 107 internal var cameraXCaptureBuilder: ImageCapture.Builder = ImageCapture.Builder() 108 109 // Custom lifecycle for CameraX API 110 internal var cameraXLifecycle: CustomLifecycle = CustomLifecycle() 111 internal var cameraXImageCaptureUseCase: ImageCapture = ImageCapture.Builder().build() 112 113 // Testing variables 114 internal var timer: CameraTimer = CameraTimer() 115 internal var autoFocusStuckCounter = 0 116 } 117