File tree Expand file tree Collapse file tree
encoder/src/main/java/com/pedro/encoder/input Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ package com.pedro.encoder.input.sources.video
1919import android.content.Context
2020import android.graphics.SurfaceTexture
2121import android.hardware.camera2.CameraCharacteristics
22+ import android.hardware.camera2.CameraManager
2223import android.os.Build
2324import android.util.Range
2425import android.util.Size
@@ -269,4 +270,22 @@ class Camera2Source(context: Context): VideoSource() {
269270 size?.let { checkResolutionSupported(it.width, it.height) }
270271 camera.setRequiredResolution(size)
271272 }
273+
274+ /* *
275+ * Add a callback to detect the camera availability.
276+ * Set null value to remove the callback
277+ */
278+ fun setAvailabilityCallback (callback : CameraManager .AvailabilityCallback ? ) {
279+ camera.setAvailabilityCallback(callback)
280+ }
281+
282+ /* *
283+ * Re start camera if possible, return true or false depend if can do it or not.
284+ */
285+ fun restart (): Boolean {
286+ if (isRunning()) camera.reOpenCamera(camera.getCurrentCameraId())
287+ else if (camera.isPrepared) camera.openCameraId(camera.getCurrentCameraId())
288+ else return false
289+ return true
290+ }
272291}
Original file line number Diff line number Diff line change @@ -77,7 +77,8 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() {
7777 private val cameraManager = context.getSystemService(Context .CAMERA_SERVICE ) as CameraManager
7878 private var cameraHandler: Handler ? = null
7979 private var cameraCaptureSession: CameraCaptureSession ? = null
80- private var isPrepared: Boolean = false
80+ var isPrepared: Boolean = false
81+ private set
8182 private var cameraId: String = " 0"
8283 private var physicalCameraId: String? = null
8384 private var facing = Facing .BACK
@@ -114,6 +115,7 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() {
114115 private var faceDetectionEnabled = false
115116 private var faceDetectionMode = 0
116117 private var imageReader: ImageReader ? = null
118+ private var availabilityCallback: CameraManager .AvailabilityCallback ? = null
117119
118120 init {
119121 cameraId = try { getCameraIdForFacing(Facing .BACK ) } catch (_: Exception ) { " 0" }
@@ -239,6 +241,15 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() {
239241 this .cameraId = cameraId
240242 }
241243
244+ fun setAvailabilityCallback (callback : CameraManager .AvailabilityCallback ? ) {
245+ if (callback == null ) {
246+ availabilityCallback?.let { cameraManager.unregisterAvailabilityCallback(it) }
247+ } else {
248+ cameraManager.registerAvailabilityCallback(callback, null )
249+ availabilityCallback = callback
250+ }
251+ }
252+
242253 var cameraFacing: Facing
243254 get() = facing
244255 set(cameraFacing) {
You can’t perform that action at this time.
0 commit comments