1 /*
2  * Copyright 2025 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.camera2.internal
18 
19 import android.hardware.camera2.CameraCaptureSession
20 import android.hardware.camera2.CaptureFailure
21 import android.hardware.camera2.CaptureRequest
22 import android.hardware.camera2.CaptureResult
23 import android.hardware.camera2.TotalCaptureResult
24 import android.os.Build
25 import android.view.Surface
26 import androidx.annotation.RequiresApi
27 
28 /**
29  * A `CaptureCallback` that forwards all callbacks to another `CaptureCallback` with a specific
30  * `CaptureRequest`.
31  */
32 public class RequestForwardingCaptureCallback(
33     private val forwardedRequest: CaptureRequest,
34     private val delegate: CameraCaptureSession.CaptureCallback
35 ) : CameraCaptureSession.CaptureCallback() {
36 
onCaptureStartednull37     override fun onCaptureStarted(
38         session: CameraCaptureSession,
39         request: CaptureRequest,
40         timestamp: Long,
41         frameNumber: Long
42     ) {
43         delegate.onCaptureStarted(session, forwardedRequest, timestamp, frameNumber)
44     }
45 
46     @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
onReadoutStartednull47     override fun onReadoutStarted(
48         session: CameraCaptureSession,
49         request: CaptureRequest,
50         timestamp: Long,
51         frameNumber: Long
52     ) {
53         delegate.onReadoutStarted(session, forwardedRequest, timestamp, frameNumber)
54     }
55 
onCaptureProgressednull56     override fun onCaptureProgressed(
57         session: CameraCaptureSession,
58         request: CaptureRequest,
59         partialResult: CaptureResult
60     ) {
61         delegate.onCaptureProgressed(session, forwardedRequest, partialResult)
62     }
63 
onCaptureCompletednull64     override fun onCaptureCompleted(
65         session: CameraCaptureSession,
66         request: CaptureRequest,
67         result: TotalCaptureResult
68     ) {
69         delegate.onCaptureCompleted(session, forwardedRequest, result)
70     }
71 
onCaptureFailednull72     override fun onCaptureFailed(
73         session: CameraCaptureSession,
74         request: CaptureRequest,
75         failure: CaptureFailure
76     ) {
77         delegate.onCaptureFailed(session, forwardedRequest, failure)
78     }
79 
onCaptureSequenceCompletednull80     override fun onCaptureSequenceCompleted(
81         session: CameraCaptureSession,
82         sequenceId: Int,
83         frameNumber: Long
84     ) {
85         delegate.onCaptureSequenceCompleted(session, sequenceId, frameNumber)
86     }
87 
onCaptureSequenceAbortednull88     override fun onCaptureSequenceAborted(session: CameraCaptureSession, sequenceId: Int) {
89         delegate.onCaptureSequenceAborted(session, sequenceId)
90     }
91 
92     @RequiresApi(Build.VERSION_CODES.N)
onCaptureBufferLostnull93     override fun onCaptureBufferLost(
94         session: CameraCaptureSession,
95         request: CaptureRequest,
96         target: Surface,
97         frameNumber: Long
98     ) {
99         delegate.onCaptureBufferLost(session, forwardedRequest, target, frameNumber)
100     }
101 }
102