1 /*
2 * Copyright (c) 2023-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "kits/native/include/camera/photo_output.h"
17 #include "impl/photo_output_impl.h"
18 #include "camera_log.h"
19 #include "hilog/log.h"
20
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24
25 /**
26 * @since 11
27 * @version 1.0
28 */
OH_PhotoOutput_RegisterCallback(Camera_PhotoOutput * photoOutput,PhotoOutput_Callbacks * callback)29 Camera_ErrorCode OH_PhotoOutput_RegisterCallback(Camera_PhotoOutput* photoOutput, PhotoOutput_Callbacks* callback)
30 {
31 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
32 "Invaild argument, photoOutput is null!");
33 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
34 "Invaild argument, callback is null!");
35 CHECK_AND_RETURN_RET_LOG(callback->onFrameStart != nullptr ||
36 callback->onFrameEnd != nullptr ||
37 callback->onFrameShutter != nullptr ||
38 callback->onError != nullptr, CAMERA_INVALID_ARGUMENT,
39 "Invaild argument, invalid callback!");
40
41 photoOutput->RegisterCallback(callback);
42 return CAMERA_OK;
43 }
44
45 /**
46 * @since 11
47 * @version 1.0
48 */
OH_PhotoOutput_UnregisterCallback(Camera_PhotoOutput * photoOutput,PhotoOutput_Callbacks * callback)49 Camera_ErrorCode OH_PhotoOutput_UnregisterCallback(Camera_PhotoOutput* photoOutput, PhotoOutput_Callbacks* callback)
50 {
51 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
52 "Invaild argument, photoOutput is null!");
53 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
54 "Invaild argument, callback is null!");
55 CHECK_AND_RETURN_RET_LOG(callback->onFrameStart != nullptr ||
56 callback->onFrameEnd != nullptr ||
57 callback->onFrameShutter != nullptr ||
58 callback->onError != nullptr, CAMERA_INVALID_ARGUMENT,
59 "Invaild argument, invalid callback!");
60
61 photoOutput->UnregisterCallback(callback);
62 return CAMERA_OK;
63 }
64
65 /**
66 * @since 12
67 * @version 1.0
68 */
OH_PhotoOutput_RegisterCaptureStartWithInfoCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_CaptureStartWithInfo callback)69 Camera_ErrorCode OH_PhotoOutput_RegisterCaptureStartWithInfoCallback(Camera_PhotoOutput* photoOutput,
70 OH_PhotoOutput_CaptureStartWithInfo callback)
71 {
72 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
73 "Invaild argument, photoOutput is null!");
74 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
75 "Invaild argument, callback is null!");
76 photoOutput->RegisterCaptureStartWithInfoCallback(callback);
77 return CAMERA_OK;
78 }
79
80 /**
81 * @since 12
82 * @version 1.0
83 */
OH_PhotoOutput_UnregisterCaptureStartWithInfoCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_CaptureStartWithInfo callback)84 Camera_ErrorCode OH_PhotoOutput_UnregisterCaptureStartWithInfoCallback(Camera_PhotoOutput* photoOutput,
85 OH_PhotoOutput_CaptureStartWithInfo callback)
86 {
87 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
88 "Invaild argument, photoOutput is null!");
89 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
90 "Invaild argument, callback is null!");
91 photoOutput->UnregisterCaptureStartWithInfoCallback(callback);
92 return CAMERA_OK;
93 }
94
95 /**
96 * @since 12
97 * @version 1.0
98 */
OH_PhotoOutput_RegisterCaptureEndCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_CaptureEnd callback)99 Camera_ErrorCode OH_PhotoOutput_RegisterCaptureEndCallback(Camera_PhotoOutput* photoOutput,
100 OH_PhotoOutput_CaptureEnd callback)
101 {
102 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
103 "Invaild argument, photoOutput is null!");
104 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
105 "Invaild argument, callback is null!");
106 photoOutput->RegisterCaptureEndCallback(callback);
107 return CAMERA_OK;
108 }
109
110 /**
111 * @since 12
112 * @version 1.0
113 */
OH_PhotoOutput_UnregisterCaptureEndCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_CaptureEnd callback)114 Camera_ErrorCode OH_PhotoOutput_UnregisterCaptureEndCallback(Camera_PhotoOutput* photoOutput,
115 OH_PhotoOutput_CaptureEnd callback)
116 {
117 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
118 "Invaild argument, photoOutput is null!");
119 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
120 "Invaild argument, callback is null!");
121 photoOutput->UnregisterCaptureEndCallback(callback);
122 return CAMERA_OK;
123 }
124
125 /**
126 * @since 12
127 * @version 1.0
128 */
OH_PhotoOutput_RegisterFrameShutterEndCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_OnFrameShutterEnd callback)129 Camera_ErrorCode OH_PhotoOutput_RegisterFrameShutterEndCallback(Camera_PhotoOutput* photoOutput,
130 OH_PhotoOutput_OnFrameShutterEnd callback)
131 {
132 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
133 "Invaild argument, photoOutput is null!");
134 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
135 "Invaild argument, callback is null!");
136 photoOutput->RegisterFrameShutterEndCallback(callback);
137 return CAMERA_OK;
138 }
139
140 /**
141 * @since 12
142 * @version 1.0
143 */
OH_PhotoOutput_UnregisterFrameShutterEndCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_OnFrameShutterEnd callback)144 Camera_ErrorCode OH_PhotoOutput_UnregisterFrameShutterEndCallback(Camera_PhotoOutput* photoOutput,
145 OH_PhotoOutput_OnFrameShutterEnd callback)
146 {
147 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
148 "Invaild argument, photoOutput is null!");
149 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
150 "Invaild argument, callback is null!");
151 photoOutput->UnregisterFrameShutterEndCallback(callback);
152 return CAMERA_OK;
153 }
154
155 /**
156 * @since 12
157 * @version 1.0
158 */
OH_PhotoOutput_RegisterCaptureReadyCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_CaptureReady callback)159 Camera_ErrorCode OH_PhotoOutput_RegisterCaptureReadyCallback(Camera_PhotoOutput* photoOutput,
160 OH_PhotoOutput_CaptureReady callback)
161 {
162 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
163 "Invaild argument, photoOutput is null!");
164 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
165 "Invaild argument, callback is null!");
166 photoOutput->RegisterCaptureReadyCallback(callback);
167 return CAMERA_OK;
168 }
169
170 /**
171 * @since 12
172 * @version 1.0
173 */
OH_PhotoOutput_UnregisterCaptureReadyCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_CaptureReady callback)174 Camera_ErrorCode OH_PhotoOutput_UnregisterCaptureReadyCallback(Camera_PhotoOutput* photoOutput,
175 OH_PhotoOutput_CaptureReady callback)
176 {
177 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
178 "Invaild argument, photoOutput is null!");
179 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
180 "Invaild argument, callback is null!");
181 photoOutput->UnregisterCaptureReadyCallback(callback);
182 return CAMERA_OK;
183 }
184
185 /**
186 * @since 12
187 * @version 1.0
188 */
OH_PhotoOutput_RegisterEstimatedCaptureDurationCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_EstimatedCaptureDuration callback)189 Camera_ErrorCode OH_PhotoOutput_RegisterEstimatedCaptureDurationCallback(Camera_PhotoOutput* photoOutput,
190 OH_PhotoOutput_EstimatedCaptureDuration callback)
191 {
192 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
193 "Invaild argument, photoOutput is null!");
194 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
195 "Invaild argument, callback is null!");
196 photoOutput->RegisterEstimatedCaptureDurationCallback(callback);
197 return CAMERA_OK;
198 }
199
200 /**
201 * @since 12
202 * @version 1.0
203 */
OH_PhotoOutput_UnregisterEstimatedCaptureDurationCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_EstimatedCaptureDuration callback)204 Camera_ErrorCode OH_PhotoOutput_UnregisterEstimatedCaptureDurationCallback(Camera_PhotoOutput* photoOutput,
205 OH_PhotoOutput_EstimatedCaptureDuration callback)
206 {
207 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
208 "Invaild argument, photoOutput is null!");
209 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
210 "Invaild argument, callback is null!");
211 photoOutput->UnregisterEstimatedCaptureDurationCallback(callback);
212 return CAMERA_OK;
213 }
214
215 /**
216 * @since 12
217 * @version 1.0
218 */
OH_PhotoOutput_RegisterPhotoAvailableCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_PhotoAvailable callback)219 Camera_ErrorCode OH_PhotoOutput_RegisterPhotoAvailableCallback(Camera_PhotoOutput* photoOutput,
220 OH_PhotoOutput_PhotoAvailable callback)
221 {
222 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
223 "Invaild argument, photoOutput is null!");
224 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
225 "Invaild argument, callback is null!");
226
227 return photoOutput->RegisterPhotoAvailableCallback(callback);
228 }
229
230 /**
231 * @since 12
232 * @version 1.0
233 */
OH_PhotoOutput_UnregisterPhotoAvailableCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_PhotoAvailable callback)234 Camera_ErrorCode OH_PhotoOutput_UnregisterPhotoAvailableCallback(Camera_PhotoOutput* photoOutput,
235 OH_PhotoOutput_PhotoAvailable callback)
236 {
237 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
238 "Invaild argument, photoOutput is null!");
239 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
240 "Invaild argument, callback is null!");
241
242 return photoOutput->UnregisterPhotoAvailableCallback(callback);
243 }
244
245 /**
246 * @since 12
247 * @version 1.0
248 */
OH_PhotoOutput_RegisterPhotoAssetAvailableCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_PhotoAssetAvailable callback)249 Camera_ErrorCode OH_PhotoOutput_RegisterPhotoAssetAvailableCallback(Camera_PhotoOutput* photoOutput,
250 OH_PhotoOutput_PhotoAssetAvailable callback)
251 {
252 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
253 "Invaild argument, photoOutput is null!");
254 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
255 "Invaild argument, callback is null!");
256
257 return photoOutput->RegisterPhotoAssetAvailableCallback(callback);
258 }
259
260 /**
261 * @since 12
262 * @version 1.0
263 */
OH_PhotoOutput_UnregisterPhotoAssetAvailableCallback(Camera_PhotoOutput * photoOutput,OH_PhotoOutput_PhotoAssetAvailable callback)264 Camera_ErrorCode OH_PhotoOutput_UnregisterPhotoAssetAvailableCallback(Camera_PhotoOutput* photoOutput,
265 OH_PhotoOutput_PhotoAssetAvailable callback)
266 {
267 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
268 "Invaild argument, photoOutput is null!");
269 CHECK_AND_RETURN_RET_LOG(callback != nullptr, CAMERA_INVALID_ARGUMENT,
270 "Invaild argument, callback is null!");
271
272 return photoOutput->UnregisterPhotoAssetAvailableCallback(callback);
273 }
274
275 /**
276 * @since 11
277 * @version 1.0
278 */
OH_PhotoOutput_Capture(Camera_PhotoOutput * photoOutput)279 Camera_ErrorCode OH_PhotoOutput_Capture(Camera_PhotoOutput* photoOutput)
280 {
281 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
282 "Invaild argument, photoOutput is null!");
283
284 return photoOutput->Capture();
285 }
286
287 /**
288 * @since 11
289 * @version 1.0
290 */
OH_PhotoOutput_Capture_WithCaptureSetting(Camera_PhotoOutput * photoOutput,Camera_PhotoCaptureSetting setting)291 Camera_ErrorCode OH_PhotoOutput_Capture_WithCaptureSetting(Camera_PhotoOutput* photoOutput,
292 Camera_PhotoCaptureSetting setting)
293 {
294 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
295 "Invaild argument, photoOutput is null!");
296
297 return photoOutput->Capture_WithCaptureSetting(setting);
298 }
299
300 /**
301 * @since 11
302 * @version 1.0
303 */
OH_PhotoOutput_Release(Camera_PhotoOutput * photoOutput)304 Camera_ErrorCode OH_PhotoOutput_Release(Camera_PhotoOutput* photoOutput)
305 {
306 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
307 "Invaild argument, photoOutput is null!");
308
309 Camera_ErrorCode retCode = photoOutput->Release();
310 if (photoOutput != nullptr) {
311 delete photoOutput;
312 }
313 return retCode;
314 }
315
316 /**
317 * @since 11
318 * @version 1.0
319 */
OH_PhotoOutput_IsMirrorSupported(Camera_PhotoOutput * photoOutput,bool * isSupported)320 Camera_ErrorCode OH_PhotoOutput_IsMirrorSupported(Camera_PhotoOutput* photoOutput, bool* isSupported)
321 {
322 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
323 "Invaild argument, photoOutput is null!");
324 CHECK_AND_RETURN_RET_LOG(isSupported != nullptr, CAMERA_INVALID_ARGUMENT,
325 "Invaild argument, isSupported is null!");
326
327 return photoOutput->IsMirrorSupported(isSupported);
328 }
329
330 /**
331 * @since 13
332 * @version 1.0
333 */
OH_PhotoOutput_EnableMirror(Camera_PhotoOutput * photoOutput,bool enableMirror)334 Camera_ErrorCode OH_PhotoOutput_EnableMirror(Camera_PhotoOutput* photoOutput, bool enableMirror)
335 {
336 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
337 "Invaild argument, photoOutput is null!");
338
339 return photoOutput->EnableMirror(enableMirror);
340 }
341
342 /**
343 * @since 12
344 * @version 1.0
345 */
OH_PhotoOutput_GetActiveProfile(Camera_PhotoOutput * photoOutput,Camera_Profile ** profile)346 Camera_ErrorCode OH_PhotoOutput_GetActiveProfile(Camera_PhotoOutput* photoOutput, Camera_Profile** profile)
347 {
348 MEDIA_DEBUG_LOG("OH_PhotoOutput_GetActiveProfile is called.");
349 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
350 "Invaild argument, photoOutput is null!");
351 CHECK_AND_RETURN_RET_LOG(profile != nullptr, CAMERA_INVALID_ARGUMENT,
352 "Invaild argument, profile is null!");
353
354 return photoOutput->GetActiveProfile(profile);
355 }
356
357 /**
358 * @since 12
359 * @version 1.0
360 */
OH_PhotoOutput_DeleteProfile(Camera_Profile * profile)361 Camera_ErrorCode OH_PhotoOutput_DeleteProfile(Camera_Profile* profile)
362 {
363 MEDIA_DEBUG_LOG("OH_PhotoOutput_DeleteProfile is called.");
364 CHECK_AND_RETURN_RET_LOG(profile != nullptr, CAMERA_INVALID_ARGUMENT,
365 "Invaild argument, profile is null!");
366
367 delete profile;
368 profile = nullptr;
369 return CAMERA_OK;
370 }
371
372 /**
373 * @since 12
374 * @version 1.0
375 */
OH_PhotoOutput_EnableMovingPhoto(Camera_PhotoOutput * photoOutput,bool enableMovingPhoto)376 Camera_ErrorCode OH_PhotoOutput_EnableMovingPhoto(Camera_PhotoOutput* photoOutput, bool enableMovingPhoto)
377 {
378 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
379 "Invaild argument, photoOutput is null!");
380
381 return photoOutput->EnableMovingPhoto(enableMovingPhoto);
382 }
383
384 /**
385 * @since 12
386 * @version 1.0
387 */
OH_PhotoOutput_IsMovingPhotoSupported(Camera_PhotoOutput * photoOutput,bool * isSupported)388 Camera_ErrorCode OH_PhotoOutput_IsMovingPhotoSupported(Camera_PhotoOutput* photoOutput, bool* isSupported)
389 {
390 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
391 "Invaild argument, photoOutput is null!");
392 CHECK_AND_RETURN_RET_LOG(isSupported != nullptr, CAMERA_INVALID_ARGUMENT,
393 "Invaild argument, isSupported is null!");
394
395 return photoOutput->IsMovingPhotoSupported(isSupported);
396 }
397
OH_PhotoOutput_GetPhotoRotation(Camera_PhotoOutput * photoOutput,int deviceDegree,Camera_ImageRotation * imageRotation)398 Camera_ErrorCode OH_PhotoOutput_GetPhotoRotation(Camera_PhotoOutput* photoOutput, int deviceDegree,
399 Camera_ImageRotation* imageRotation)
400 {
401 MEDIA_DEBUG_LOG("OH_PhotoOutput_GetPhotoRotation is called.");
402 CHECK_AND_RETURN_RET_LOG(photoOutput != nullptr, CAMERA_INVALID_ARGUMENT,
403 "Invaild argument, photoOutput is null!");
404 CHECK_AND_RETURN_RET_LOG(imageRotation != nullptr, CAMERA_INVALID_ARGUMENT,
405 "Invaild argument, cameraImageRotation is null!");
406 return photoOutput->GetPhotoRotation(deviceDegree, imageRotation);
407 }
408 #ifdef __cplusplus
409 }
410 #endif