Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package com.pedro.encoder.input.sources.video
import android.content.Context
import android.graphics.SurfaceTexture
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraManager
import android.os.Build
import android.util.Range
import android.util.Size
Expand Down Expand Up @@ -269,4 +270,22 @@ class Camera2Source(context: Context): VideoSource() {
size?.let { checkResolutionSupported(it.width, it.height) }
camera.setRequiredResolution(size)
}

/**
* Add a callback to detect the camera availability.
* Set null value to remove the callback
*/
fun setAvailabilityCallback(callback: CameraManager.AvailabilityCallback?) {
camera.setAvailabilityCallback(callback)
}

/**
* Re start camera if possible, return true or false depend if can do it or not.
*/
fun restart(): Boolean {
if (isRunning()) camera.reOpenCamera(camera.getCurrentCameraId())
else if (camera.isPrepared) camera.openCameraId(camera.getCurrentCameraId())
else return false
return true
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,8 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() {
private val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
private var cameraHandler: Handler? = null
private var cameraCaptureSession: CameraCaptureSession? = null
private var isPrepared: Boolean = false
var isPrepared: Boolean = false
private set
private var cameraId: String = "0"
private var physicalCameraId: String? = null
private var facing = Facing.BACK
Expand Down Expand Up @@ -114,6 +115,7 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() {
private var faceDetectionEnabled = false
private var faceDetectionMode = 0
private var imageReader: ImageReader? = null
private var availabilityCallback: CameraManager.AvailabilityCallback? = null

init {
cameraId = try { getCameraIdForFacing(Facing.BACK) } catch (_: Exception) { "0" }
Expand Down Expand Up @@ -239,6 +241,15 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() {
this.cameraId = cameraId
}

fun setAvailabilityCallback(callback: CameraManager.AvailabilityCallback?) {
if (callback == null) {
availabilityCallback?.let { cameraManager.unregisterAvailabilityCallback(it) }
} else {
cameraManager.registerAvailabilityCallback(callback, null)
availabilityCallback = callback
}
}

var cameraFacing: Facing
get() = facing
set(cameraFacing) {
Expand Down