@@ -117,6 +117,8 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() {
117117 private var imageReader: ImageReader ? = null
118118 private var availabilityCallback: CameraManager .AvailabilityCallback ? = null
119119
120+ private var customCaptureCompletedCallback: ((session: CameraCaptureSession , request: CaptureRequest , result: TotalCaptureResult ) -> Unit )? = null
121+
120122 init {
121123 cameraId = try { getCameraIdForFacing(Facing .BACK ) } catch (_: Exception ) { " 0" }
122124 }
@@ -161,7 +163,7 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() {
161163 try {
162164 it.setRepeatingRequest(
163165 captureRequest,
164- if (faceDetectionEnabled || frameCapturedCallback != null ) cb else null ,
166+ if (faceDetectionEnabled || frameCapturedCallback != null || customCaptureCompletedCallback != null ) cb else null ,
165167 cameraHandler
166168 )
167169 } catch (_: IllegalStateException ) {
@@ -203,6 +205,12 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() {
203205 return applyRequest(builderInputSurface)
204206 }
205207
208+ fun setCustomOnCaptureCompletedCallback (
209+ callback : ((CameraCaptureSession , CaptureRequest , TotalCaptureResult ) -> Unit )?
210+ ) {
211+ this .customCaptureCompletedCallback = callback
212+ }
213+
206214 fun getSupportedFps (size : Size ? , facing : Facing ): List <Range <Int >> {
207215 try {
208216 val characteristics = cameraManager.getCameraCharacteristics(getCameraIdForFacing(facing))
@@ -321,7 +329,7 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() {
321329 try {
322330 cameraCaptureSession.setRepeatingRequest(
323331 builder.build(),
324- if (faceDetectionEnabled || frameCapturedCallback != null ) cb else null , null
332+ if (faceDetectionEnabled || frameCapturedCallback != null || customCaptureCompletedCallback != null ) cb else null , null
325333 )
326334 return true
327335 } catch (e: Exception ) {
@@ -681,6 +689,8 @@ class Camera2ApiManager(context: Context) : CameraDevice.StateCallback() {
681689 request : CaptureRequest ,
682690 result : TotalCaptureResult
683691 ) {
692+ customCaptureCompletedCallback?.invoke(session, request, result)
693+
684694 val faces = result.get(CaptureResult .STATISTICS_FACES ) ? : return
685695 faceDetectorCallback?.onGetFaces(
686696 faces = mapCamera2Faces(faces = faces),
0 commit comments