Expose ProcessProgressed Callback in CameraPipe
Pipe onCaptureProcessProgressed from Requests.Listener to
ExtensionSessionWrapper.
Bug: 360878524
Test: ./gradlew --info --strict \
:camera:camera-camera2-pipe:testDebugUnitTest \
:camera:camera-camera2-pipe:compileDebugUnitTestKotlin \
:camera:camera-camera2-pipe-testing:testDebugUnitTest \
:camera:camera-camera2-pipe-testing:compileDebugUnitTestKotlin \
:camera:camera-camera2-pipe-integration:testDebugUnitTest \
:camera:camera-camera2-pipe-integration:compileDebugUnitTestKotlin \
:camera:integration-tests:camera-testapp-camera2-pipe:testDebugUnitTest \
:camera:integration-tests:camera-testapp-camera2-pipe:compileDebugUnitTestKotlin
Change-Id: If99a4752bbc89bfe4b2a2e3b1b43e86df02b5499
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/Requests.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/Requests.kt
index d75b9f9..89467a3 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/Requests.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/Requests.kt
@@ -18,6 +18,8 @@
import android.hardware.camera2.CameraCaptureSession
import android.hardware.camera2.CameraDevice
+import android.hardware.camera2.CameraExtensionCharacteristics
+import android.hardware.camera2.CameraExtensionSession
import android.hardware.camera2.CaptureFailure
import android.hardware.camera2.CaptureRequest
import android.view.Surface
@@ -107,6 +109,25 @@
) {}
/**
+ * This event provides clients with an estimate of the post-processing progress of a capture
+ * which could take significantly more time relative to the rest of the
+ * [CameraExtensionSession.capture] sequence. The callback will be triggered only by
+ * extensions that return true from calls
+ * [CameraExtensionCharacteristics.isCaptureProcessProgressAvailable]. If support for this
+ * callback is present, then clients will be notified at least once with progress value 100.
+ * The callback will be triggered only for still capture requests
+ * [CameraExtensionSession.capture] and is not supported for repeating requests
+ * [CameraExtensionSession.setRepeatingRequest].
+ *
+ * @param requestMetadata the data about the camera2 request that was sent to the camera.
+ * @param progress the value indicating the current post-processing progress (between 0 and
+ * 100 inclusive)
+ * @see
+ * android.hardware.camera2.CameraExtensionSession.ExtensionCaptureCallback.onCaptureProcessProgressed
+ */
+ public fun onCaptureProgress(requestMetadata: RequestMetadata, progress: Int) {}
+
+ /**
* This event indicates that all of the metadata associated with this frame has been
* produced. If [onPartialCaptureResult] was invoked, the values returned in the
* totalCaptureResult map be a superset of the values produced from the
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureCallback.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureCallback.kt
index 9d10ac0..ebc244d 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureCallback.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureCallback.kt
@@ -46,6 +46,8 @@
frameNumber: FrameNumber
)
+ fun onCaptureProcessProgressed(captureRequest: CaptureRequest, progress: Int)
+
fun onCaptureFailed(captureRequest: CaptureRequest, frameNumber: FrameNumber)
fun onCaptureSequenceCompleted(captureSequenceId: Int, captureFrameNumber: Long)
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequence.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequence.kt
index 34a0a1d..cc5e292 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequence.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequence.kt
@@ -184,6 +184,15 @@
Debug.traceStop() // onCaptureCompleted
}
+ override fun onCaptureProcessProgressed(captureRequest: CaptureRequest, progress: Int) {
+ Debug.traceStart { "onCaptureProcessProgressed" }
+ // Load the request and throw if we are not able to find an associated request. Under
+ // normal circumstances this should never happen.
+ val request = readRequestMetadata(captureRequest)
+ invokeOnRequest(request) { it.onCaptureProgress(request, progress) }
+ Debug.traceStop()
+ }
+
override fun onCaptureFailed(
captureSession: CameraCaptureSession,
captureRequest: CaptureRequest,
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExtensionSessionWrapper.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExtensionSessionWrapper.kt
index 7fb4d94..608dc0f 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExtensionSessionWrapper.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/ExtensionSessionWrapper.kt
@@ -278,6 +278,14 @@
request: CaptureRequest
) {}
+ override fun onCaptureProcessProgressed(
+ session: CameraExtensionSession,
+ request: CaptureRequest,
+ progress: Int
+ ) {
+ captureCallback.onCaptureProcessProgressed(request, progress)
+ }
+
override fun onCaptureFailed(session: CameraExtensionSession, request: CaptureRequest) {
val frameNumber = frameQueue.remove()
captureCallback.onCaptureFailed(request, FrameNumber(frameNumber))
@@ -342,6 +350,14 @@
}
}
+ override fun onCaptureProcessProgressed(
+ session: CameraExtensionSession,
+ request: CaptureRequest,
+ progress: Int
+ ) {
+ captureCallback.onCaptureProcessProgressed(request, progress)
+ }
+
override fun onCaptureSequenceCompleted(session: CameraExtensionSession, sequenceId: Int) {
val frameNumber = extensionSessionMap[session]
captureCallback.onCaptureSequenceCompleted(sequenceId, frameNumber!!)