xref: /aosp_15_r20/frameworks/av/camera/ndk/NdkCameraCaptureSession.cpp (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker  * Copyright (C) 2015 The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker  *
4*ec779b8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker  *
8*ec779b8eSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker  *
10*ec779b8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker  * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker  */
16*ec779b8eSAndroid Build Coastguard Worker 
17*ec779b8eSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
18*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "NdkCameraCaptureSession"
19*ec779b8eSAndroid Build Coastguard Worker #define ATRACE_TAG ATRACE_TAG_CAMERA
20*ec779b8eSAndroid Build Coastguard Worker 
21*ec779b8eSAndroid Build Coastguard Worker #include <utils/Log.h>
22*ec779b8eSAndroid Build Coastguard Worker #include <utils/Mutex.h>
23*ec779b8eSAndroid Build Coastguard Worker #include <utils/StrongPointer.h>
24*ec779b8eSAndroid Build Coastguard Worker #include <utils/Trace.h>
25*ec779b8eSAndroid Build Coastguard Worker 
26*ec779b8eSAndroid Build Coastguard Worker #include <camera/NdkCameraDevice.h>
27*ec779b8eSAndroid Build Coastguard Worker #include <camera/NdkCaptureRequest.h>
28*ec779b8eSAndroid Build Coastguard Worker #include <camera/NdkCameraCaptureSession.h>
29*ec779b8eSAndroid Build Coastguard Worker #include "impl/ACameraCaptureSession.h"
30*ec779b8eSAndroid Build Coastguard Worker 
31*ec779b8eSAndroid Build Coastguard Worker #include "impl/ACameraCaptureSession.inc"
32*ec779b8eSAndroid Build Coastguard Worker 
33*ec779b8eSAndroid Build Coastguard Worker #include "NdkCameraCaptureSession.inc"
34*ec779b8eSAndroid Build Coastguard Worker 
35*ec779b8eSAndroid Build Coastguard Worker using namespace android;
36*ec779b8eSAndroid Build Coastguard Worker 
37*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_close(ACameraCaptureSession * session)38*ec779b8eSAndroid Build Coastguard Worker void ACameraCaptureSession_close(ACameraCaptureSession* session) {
39*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
40*ec779b8eSAndroid Build Coastguard Worker     if (session != nullptr) {
41*ec779b8eSAndroid Build Coastguard Worker         session->closeByApp();
42*ec779b8eSAndroid Build Coastguard Worker     }
43*ec779b8eSAndroid Build Coastguard Worker     return;
44*ec779b8eSAndroid Build Coastguard Worker }
45*ec779b8eSAndroid Build Coastguard Worker 
46*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_getDevice(ACameraCaptureSession * session,ACameraDevice ** device)47*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_getDevice(
48*ec779b8eSAndroid Build Coastguard Worker         ACameraCaptureSession* session, ACameraDevice **device) {
49*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
50*ec779b8eSAndroid Build Coastguard Worker     if (session == nullptr || device == nullptr) {
51*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Error: invalid input: session %p, device %p",
52*ec779b8eSAndroid Build Coastguard Worker                 __FUNCTION__, session, device);
53*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_INVALID_PARAMETER;
54*ec779b8eSAndroid Build Coastguard Worker     }
55*ec779b8eSAndroid Build Coastguard Worker 
56*ec779b8eSAndroid Build Coastguard Worker     if (session->isClosed()) {
57*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: session %p is already closed", __FUNCTION__, session);
58*ec779b8eSAndroid Build Coastguard Worker         *device = nullptr;
59*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_SESSION_CLOSED;
60*ec779b8eSAndroid Build Coastguard Worker     }
61*ec779b8eSAndroid Build Coastguard Worker 
62*ec779b8eSAndroid Build Coastguard Worker     *device = session->getDevice();
63*ec779b8eSAndroid Build Coastguard Worker     if (*device == nullptr) {
64*ec779b8eSAndroid Build Coastguard Worker         // Should not reach here
65*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: unknown failure: device is null", __FUNCTION__);
66*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_UNKNOWN;
67*ec779b8eSAndroid Build Coastguard Worker     }
68*ec779b8eSAndroid Build Coastguard Worker     return ACAMERA_OK;
69*ec779b8eSAndroid Build Coastguard Worker }
70*ec779b8eSAndroid Build Coastguard Worker 
71*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_capture(ACameraCaptureSession * session,ACameraCaptureSession_captureCallbacks * cbs,int numRequests,ACaptureRequest ** requests,int * captureSequenceId)72*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_capture(
73*ec779b8eSAndroid Build Coastguard Worker         ACameraCaptureSession* session, /*optional*/ACameraCaptureSession_captureCallbacks* cbs,
74*ec779b8eSAndroid Build Coastguard Worker         int numRequests, ACaptureRequest** requests,
75*ec779b8eSAndroid Build Coastguard Worker         /*optional*/int* captureSequenceId) {
76*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
77*ec779b8eSAndroid Build Coastguard Worker     return captureTemplate(session, cbs, numRequests, requests, captureSequenceId);
78*ec779b8eSAndroid Build Coastguard Worker }
79*ec779b8eSAndroid Build Coastguard Worker 
80*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_captureV2(ACameraCaptureSession * session,ACameraCaptureSession_captureCallbacksV2 * cbs,int numRequests,ACaptureRequest ** requests,int * captureSequenceId)81*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_captureV2(
82*ec779b8eSAndroid Build Coastguard Worker         ACameraCaptureSession* session, /*optional*/ACameraCaptureSession_captureCallbacksV2* cbs,
83*ec779b8eSAndroid Build Coastguard Worker         int numRequests, ACaptureRequest** requests,
84*ec779b8eSAndroid Build Coastguard Worker         /*optional*/int* captureSequenceId) {
85*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
86*ec779b8eSAndroid Build Coastguard Worker     return captureTemplate(session, cbs, numRequests, requests, captureSequenceId);
87*ec779b8eSAndroid Build Coastguard Worker }
88*ec779b8eSAndroid Build Coastguard Worker 
89*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_logicalCamera_capture(ACameraCaptureSession * session,ACameraCaptureSession_logicalCamera_captureCallbacks * lcbs,int numRequests,ACaptureRequest ** requests,int * captureSequenceId)90*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_logicalCamera_capture(
91*ec779b8eSAndroid Build Coastguard Worker         ACameraCaptureSession* session,
92*ec779b8eSAndroid Build Coastguard Worker         /*optional*/ACameraCaptureSession_logicalCamera_captureCallbacks* lcbs,
93*ec779b8eSAndroid Build Coastguard Worker         int numRequests, ACaptureRequest** requests,
94*ec779b8eSAndroid Build Coastguard Worker         /*optional*/int* captureSequenceId) {
95*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
96*ec779b8eSAndroid Build Coastguard Worker     return captureTemplate(session, lcbs, numRequests, requests, captureSequenceId);
97*ec779b8eSAndroid Build Coastguard Worker }
98*ec779b8eSAndroid Build Coastguard Worker 
99*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_logicalCamera_captureV2(ACameraCaptureSession * session,ACameraCaptureSession_logicalCamera_captureCallbacksV2 * lcbs,int numRequests,ACaptureRequest ** requests,int * captureSequenceId)100*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_logicalCamera_captureV2(
101*ec779b8eSAndroid Build Coastguard Worker         ACameraCaptureSession* session,
102*ec779b8eSAndroid Build Coastguard Worker         /*optional*/ACameraCaptureSession_logicalCamera_captureCallbacksV2* lcbs,
103*ec779b8eSAndroid Build Coastguard Worker         int numRequests, ACaptureRequest** requests,
104*ec779b8eSAndroid Build Coastguard Worker         /*optional*/int* captureSequenceId) {
105*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
106*ec779b8eSAndroid Build Coastguard Worker     return captureTemplate(session, lcbs, numRequests, requests, captureSequenceId);
107*ec779b8eSAndroid Build Coastguard Worker }
108*ec779b8eSAndroid Build Coastguard Worker 
109*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_setRepeatingRequestV2(ACameraCaptureSession * session,ACameraCaptureSession_captureCallbacksV2 * cbs,int numRequests,ACaptureRequest ** requests,int * captureSequenceId)110*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_setRepeatingRequestV2(
111*ec779b8eSAndroid Build Coastguard Worker         ACameraCaptureSession* session, /*optional*/ACameraCaptureSession_captureCallbacksV2* cbs,
112*ec779b8eSAndroid Build Coastguard Worker         int numRequests, ACaptureRequest** requests,
113*ec779b8eSAndroid Build Coastguard Worker         /*optional*/int* captureSequenceId) {
114*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
115*ec779b8eSAndroid Build Coastguard Worker     return setRepeatingRequestTemplate(session, cbs, numRequests, requests, captureSequenceId);
116*ec779b8eSAndroid Build Coastguard Worker }
117*ec779b8eSAndroid Build Coastguard Worker 
118*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_setRepeatingRequest(ACameraCaptureSession * session,ACameraCaptureSession_captureCallbacks * cbs,int numRequests,ACaptureRequest ** requests,int * captureSequenceId)119*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_setRepeatingRequest(
120*ec779b8eSAndroid Build Coastguard Worker         ACameraCaptureSession* session, /*optional*/ACameraCaptureSession_captureCallbacks* cbs,
121*ec779b8eSAndroid Build Coastguard Worker         int numRequests, ACaptureRequest** requests,
122*ec779b8eSAndroid Build Coastguard Worker         /*optional*/int* captureSequenceId) {
123*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
124*ec779b8eSAndroid Build Coastguard Worker     return setRepeatingRequestTemplate(session, cbs, numRequests, requests, captureSequenceId);
125*ec779b8eSAndroid Build Coastguard Worker }
126*ec779b8eSAndroid Build Coastguard Worker 
127*ec779b8eSAndroid Build Coastguard Worker 
128*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_logicalCamera_setRepeatingRequest(ACameraCaptureSession * session,ACameraCaptureSession_logicalCamera_captureCallbacks * lcbs,int numRequests,ACaptureRequest ** requests,int * captureSequenceId)129*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_logicalCamera_setRepeatingRequest(
130*ec779b8eSAndroid Build Coastguard Worker         ACameraCaptureSession* session,
131*ec779b8eSAndroid Build Coastguard Worker         /*optional*/ACameraCaptureSession_logicalCamera_captureCallbacks* lcbs,
132*ec779b8eSAndroid Build Coastguard Worker         int numRequests, ACaptureRequest** requests,
133*ec779b8eSAndroid Build Coastguard Worker         /*optional*/int* captureSequenceId) {
134*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
135*ec779b8eSAndroid Build Coastguard Worker     return setRepeatingRequestTemplate(session, lcbs, numRequests, requests, captureSequenceId);
136*ec779b8eSAndroid Build Coastguard Worker }
137*ec779b8eSAndroid Build Coastguard Worker 
138*ec779b8eSAndroid Build Coastguard Worker 
139*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_logicalCamera_setRepeatingRequestV2(ACameraCaptureSession * session,ACameraCaptureSession_logicalCamera_captureCallbacksV2 * lcbs,int numRequests,ACaptureRequest ** requests,int * captureSequenceId)140*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_logicalCamera_setRepeatingRequestV2(
141*ec779b8eSAndroid Build Coastguard Worker         ACameraCaptureSession* session,
142*ec779b8eSAndroid Build Coastguard Worker         /*optional*/ACameraCaptureSession_logicalCamera_captureCallbacksV2* lcbs,
143*ec779b8eSAndroid Build Coastguard Worker         int numRequests, ACaptureRequest** requests,
144*ec779b8eSAndroid Build Coastguard Worker         /*optional*/int* captureSequenceId) {
145*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
146*ec779b8eSAndroid Build Coastguard Worker     return setRepeatingRequestTemplate(session, lcbs, numRequests, requests, captureSequenceId);
147*ec779b8eSAndroid Build Coastguard Worker }
148*ec779b8eSAndroid Build Coastguard Worker 
149*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_stopRepeating(ACameraCaptureSession * session)150*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_stopRepeating(ACameraCaptureSession* session) {
151*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
152*ec779b8eSAndroid Build Coastguard Worker     if (session == nullptr) {
153*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Error: session is null", __FUNCTION__);
154*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_INVALID_PARAMETER;
155*ec779b8eSAndroid Build Coastguard Worker     }
156*ec779b8eSAndroid Build Coastguard Worker 
157*ec779b8eSAndroid Build Coastguard Worker     if (session->isClosed()) {
158*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: session %p is already closed", __FUNCTION__, session);
159*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_SESSION_CLOSED;
160*ec779b8eSAndroid Build Coastguard Worker     }
161*ec779b8eSAndroid Build Coastguard Worker     return session->stopRepeating();
162*ec779b8eSAndroid Build Coastguard Worker }
163*ec779b8eSAndroid Build Coastguard Worker 
164*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_abortCaptures(ACameraCaptureSession * session)165*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_abortCaptures(ACameraCaptureSession* session) {
166*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
167*ec779b8eSAndroid Build Coastguard Worker     if (session == nullptr) {
168*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Error: session is null", __FUNCTION__);
169*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_INVALID_PARAMETER;
170*ec779b8eSAndroid Build Coastguard Worker     }
171*ec779b8eSAndroid Build Coastguard Worker 
172*ec779b8eSAndroid Build Coastguard Worker     if (session->isClosed()) {
173*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: session %p is already closed", __FUNCTION__, session);
174*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_SESSION_CLOSED;
175*ec779b8eSAndroid Build Coastguard Worker     }
176*ec779b8eSAndroid Build Coastguard Worker     return session->abortCaptures();
177*ec779b8eSAndroid Build Coastguard Worker }
178*ec779b8eSAndroid Build Coastguard Worker 
179*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSessionShared_startStreaming(ACameraCaptureSession *,ACameraCaptureSession_captureCallbacksV2 *,int,ANativeWindow **,int *)180*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSessionShared_startStreaming(
181*ec779b8eSAndroid Build Coastguard Worker     ACameraCaptureSession* /*session*/, ACameraCaptureSession_captureCallbacksV2* /*callbacks*/,
182*ec779b8eSAndroid Build Coastguard Worker     int /*numOutputWindows*/, ANativeWindow** /*window*/,
183*ec779b8eSAndroid Build Coastguard Worker     int* /*captureSequenceId*/) {
184*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
185*ec779b8eSAndroid Build Coastguard Worker     // Todo: need to add implementation
186*ec779b8eSAndroid Build Coastguard Worker     return  ACAMERA_OK;
187*ec779b8eSAndroid Build Coastguard Worker }
188*ec779b8eSAndroid Build Coastguard Worker 
189*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSessionShared_logicalCamera_startStreaming(ACameraCaptureSession *,ACameraCaptureSession_logicalCamera_captureCallbacksV2 *,int,ANativeWindow **,int *)190*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSessionShared_logicalCamera_startStreaming(
191*ec779b8eSAndroid Build Coastguard Worker     ACameraCaptureSession* /*session*/,
192*ec779b8eSAndroid Build Coastguard Worker     ACameraCaptureSession_logicalCamera_captureCallbacksV2* /*callbacks*/,
193*ec779b8eSAndroid Build Coastguard Worker     int /*numOutputWindows*/, ANativeWindow** /*windows*/,
194*ec779b8eSAndroid Build Coastguard Worker     int* /*captureSequenceId*/) {
195*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
196*ec779b8eSAndroid Build Coastguard Worker     // Todo: need to add implementation
197*ec779b8eSAndroid Build Coastguard Worker     return  ACAMERA_OK;
198*ec779b8eSAndroid Build Coastguard Worker }
199*ec779b8eSAndroid Build Coastguard Worker 
200*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSessionShared_stopStreaming(ACameraCaptureSession *)201*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSessionShared_stopStreaming(ACameraCaptureSession* /*session*/) {
202*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
203*ec779b8eSAndroid Build Coastguard Worker     // Todo: need to add implementation
204*ec779b8eSAndroid Build Coastguard Worker     return  ACAMERA_OK;
205*ec779b8eSAndroid Build Coastguard Worker }
206*ec779b8eSAndroid Build Coastguard Worker 
207*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_updateSharedOutput(ACameraCaptureSession * session,ACaptureSessionOutput * output)208*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_updateSharedOutput(ACameraCaptureSession* session,
209*ec779b8eSAndroid Build Coastguard Worker         ACaptureSessionOutput* output) {
210*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
211*ec779b8eSAndroid Build Coastguard Worker     if (session == nullptr) {
212*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Error: session is null", __FUNCTION__);
213*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_INVALID_PARAMETER;
214*ec779b8eSAndroid Build Coastguard Worker     }
215*ec779b8eSAndroid Build Coastguard Worker 
216*ec779b8eSAndroid Build Coastguard Worker     if (session->isClosed()) {
217*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: session %p is already closed", __FUNCTION__, session);
218*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_SESSION_CLOSED;
219*ec779b8eSAndroid Build Coastguard Worker     }
220*ec779b8eSAndroid Build Coastguard Worker     return session->updateOutputConfiguration(output);
221*ec779b8eSAndroid Build Coastguard Worker }
222*ec779b8eSAndroid Build Coastguard Worker 
223*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_setWindowPreparedCallback(ACameraCaptureSession * session,void * context,ACameraCaptureSession_prepareCallback cb)224*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_setWindowPreparedCallback(
225*ec779b8eSAndroid Build Coastguard Worker         ACameraCaptureSession* session, void *context,
226*ec779b8eSAndroid Build Coastguard Worker         ACameraCaptureSession_prepareCallback cb) {
227*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
228*ec779b8eSAndroid Build Coastguard Worker     if (session == nullptr || cb == nullptr) {
229*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Error: session %p / callback %p is null", __FUNCTION__, session, cb);
230*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_INVALID_PARAMETER;
231*ec779b8eSAndroid Build Coastguard Worker     }
232*ec779b8eSAndroid Build Coastguard Worker 
233*ec779b8eSAndroid Build Coastguard Worker     if (session->isClosed()) {
234*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: session %p is already closed", __FUNCTION__, session);
235*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_SESSION_CLOSED;
236*ec779b8eSAndroid Build Coastguard Worker     }
237*ec779b8eSAndroid Build Coastguard Worker     session->setWindowPreparedCallback(context, cb);
238*ec779b8eSAndroid Build Coastguard Worker     return ACAMERA_OK;
239*ec779b8eSAndroid Build Coastguard Worker }
240*ec779b8eSAndroid Build Coastguard Worker 
241*ec779b8eSAndroid Build Coastguard Worker EXPORT
ACameraCaptureSession_prepareWindow(ACameraCaptureSession * session,ANativeWindow * window)242*ec779b8eSAndroid Build Coastguard Worker camera_status_t ACameraCaptureSession_prepareWindow(
243*ec779b8eSAndroid Build Coastguard Worker         ACameraCaptureSession* session,
244*ec779b8eSAndroid Build Coastguard Worker         ANativeWindow *window) {
245*ec779b8eSAndroid Build Coastguard Worker     ATRACE_CALL();
246*ec779b8eSAndroid Build Coastguard Worker     if (session == nullptr || window == nullptr) {
247*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: Error: session %p / window %p is null", __FUNCTION__, session, window);
248*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_INVALID_PARAMETER;
249*ec779b8eSAndroid Build Coastguard Worker     }
250*ec779b8eSAndroid Build Coastguard Worker 
251*ec779b8eSAndroid Build Coastguard Worker     if (session->isClosed()) {
252*ec779b8eSAndroid Build Coastguard Worker         ALOGE("%s: session %p is already closed", __FUNCTION__, session);
253*ec779b8eSAndroid Build Coastguard Worker         return ACAMERA_ERROR_SESSION_CLOSED;
254*ec779b8eSAndroid Build Coastguard Worker     }
255*ec779b8eSAndroid Build Coastguard Worker     return session->prepare(window);
256*ec779b8eSAndroid Build Coastguard Worker }
257