8#ifndef META_OCEAN_MEDIA_ANDROID_NATIVE_CAMERA_LIBRARY_H
9#define META_OCEAN_MEDIA_ANDROID_NATIVE_CAMERA_LIBRARY_H
17#if defined(__ANDROID_API__) && __ANDROID_API__ >= 24
19#ifndef OCEAN_MEDIA_ANDROID_NATIVECAMERALIBRARY_AVAILABLE
20 #define OCEAN_MEDIA_ANDROID_NATIVECAMERALIBRARY_AVAILABLE
23#include <camera/NdkCaptureRequest.h>
25#include <camera/NdkCameraCaptureSession.h>
26#include <camera/NdkCameraDevice.h>
27#include <camera/NdkCameraManager.h>
163 using Function_ACameraDevice_createCaptureSession = camera_status_t (ACameraDevice* device,
const ACaptureSessionOutputContainer* outputs,
const ACameraCaptureSession_stateCallbacks* callbacks, ACameraCaptureSession** session);
207 using Function_ACameraCaptureSession_capture = camera_status_t (ACameraCaptureSession* session, ACameraCaptureSession_captureCallbacks* callbacks,
int numRequests, ACaptureRequest** requests,
int* captureSequenceId);
225 inline bool isInitialized()
const;
230 inline camera_status_t ACameraDevice_close(ACameraDevice* device);
231 inline const char* ACameraDevice_getId(
const ACameraDevice* device);
232 inline camera_status_t ACameraDevice_createCaptureRequest(
const ACameraDevice* device, ACameraDevice_request_template templateId, ACaptureRequest** request);
233 inline camera_status_t ACaptureSessionOutputContainer_create(ACaptureSessionOutputContainer** container);
234 inline void ACaptureSessionOutputContainer_free(ACaptureSessionOutputContainer* container);
235 inline camera_status_t ACaptureSessionOutput_create(ANativeWindow* anw, ACaptureSessionOutput** output);
236 inline void ACaptureSessionOutput_free(ACaptureSessionOutput* output);
237 inline camera_status_t ACaptureSessionOutputContainer_add(ACaptureSessionOutputContainer* container,
const ACaptureSessionOutput* output);
238 inline camera_status_t ACaptureSessionOutputContainer_remove(ACaptureSessionOutputContainer* container,
const ACaptureSessionOutput* output);
239 inline camera_status_t ACameraDevice_createCaptureSession(ACameraDevice* device,
const ACaptureSessionOutputContainer* outputs,
const ACameraCaptureSession_stateCallbacks* callbacks, ACameraCaptureSession** session);
244 inline ACameraManager* ACameraManager_create();
245 inline void ACameraManager_delete(ACameraManager* manager);
246 inline camera_status_t ACameraManager_getCameraIdList(ACameraManager* manager, ACameraIdList** cameraIdList);
247 inline void ACameraManager_deleteCameraIdList(ACameraIdList* cameraIdList);
248 inline camera_status_t ACameraManager_registerAvailabilityCallback(ACameraManager* manager,
const ACameraManager_AvailabilityCallbacks* callback);
249 inline camera_status_t ACameraManager_unregisterAvailabilityCallback(ACameraManager* manager,
const ACameraManager_AvailabilityCallbacks* callback);
250 inline camera_status_t ACameraManager_getCameraCharacteristics(ACameraManager* manager,
const char* cameraId, ACameraMetadata** characteristics);
251 inline camera_status_t ACameraManager_openCamera(ACameraManager* manager,
const char* cameraId, ACameraDevice_StateCallbacks* callback, ACameraDevice** device);
256 inline camera_status_t ACameraMetadata_getConstEntry(
const ACameraMetadata* metadata, uint32_t tag, ACameraMetadata_const_entry* entry);
257 inline camera_status_t ACameraMetadata_getAllTags(
const ACameraMetadata* metadata, int32_t* numEntries,
const uint32_t** tags);
258 inline ACameraMetadata* ACameraMetadata_copy(
const ACameraMetadata* src);
259 inline void ACameraMetadata_free(ACameraMetadata* metadata);
264 inline camera_status_t ACameraOutputTarget_create(ANativeWindow* window, ACameraOutputTarget** output);
265 inline void ACameraOutputTarget_free(ACameraOutputTarget* output);
266 inline camera_status_t ACaptureRequest_addTarget(ACaptureRequest* request,
const ACameraOutputTarget* output);
267 inline camera_status_t ACaptureRequest_removeTarget(ACaptureRequest* request,
const ACameraOutputTarget* output);
268 inline camera_status_t ACaptureRequest_getConstEntry(
const ACaptureRequest* request, uint32_t tag, ACameraMetadata_const_entry* entry);
269 inline camera_status_t ACaptureRequest_getAllTags(
const ACaptureRequest* request, int32_t* numTags,
const uint32_t** tags);
270 inline camera_status_t ACaptureRequest_setEntry_u8(ACaptureRequest* request, uint32_t tag, uint32_t count,
const uint8_t* data);
271 inline camera_status_t ACaptureRequest_setEntry_i32(ACaptureRequest* request, uint32_t tag, uint32_t count,
const int32_t* data);
272 inline camera_status_t ACaptureRequest_setEntry_float(ACaptureRequest* request, uint32_t tag, uint32_t count,
const float* data);
273 inline camera_status_t ACaptureRequest_setEntry_i64(ACaptureRequest* request, uint32_t tag, uint32_t count,
const int64_t* data);
274 inline camera_status_t ACaptureRequest_setEntry_double(ACaptureRequest* request, uint32_t tag, uint32_t count,
const double* data);
275 inline camera_status_t ACaptureRequest_setEntry_rational(ACaptureRequest* request, uint32_t tag, uint32_t count,
const ACameraMetadata_rational* data);
276 inline void ACaptureRequest_free(ACaptureRequest* request);
281 inline void ACameraCaptureSession_close(ACameraCaptureSession* session);
282 inline camera_status_t ACameraCaptureSession_getDevice(ACameraCaptureSession* session, ACameraDevice** device);
283 inline camera_status_t ACameraCaptureSession_capture(ACameraCaptureSession* session, ACameraCaptureSession_captureCallbacks* callbacks,
int numRequests, ACaptureRequest** requests,
int* captureSequenceId);
284 inline camera_status_t ACameraCaptureSession_setRepeatingRequest(ACameraCaptureSession* session, ACameraCaptureSession_captureCallbacks* callbacks,
int numRequests, ACaptureRequest** requests,
int* captureSequenceId);
285 inline camera_status_t ACameraCaptureSession_stopRepeating(ACameraCaptureSession* session);
286 inline camera_status_t ACameraCaptureSession_abortCaptures(ACameraCaptureSession* session);
314 void* libraryHandle_ =
nullptr;
368 unsigned int initializationCounter_ = 0u;
380inline NativeCameraLibrary::ScopedACaptureSessionOutputContainer::ScopedACaptureSessionOutputContainer(ACaptureSessionOutputContainer* captureSessionOutputContainer) :
401 ocean_assert(ACameraDevice_close_ !=
nullptr);
403 return ACameraDevice_close_(device);
409 ocean_assert(ACameraDevice_getId_ !=
nullptr);
411 return ACameraDevice_getId_(device);
417 ocean_assert(ACameraDevice_createCaptureRequest_ !=
nullptr);
419 return ACameraDevice_createCaptureRequest_(device, templateId, request);
425 ocean_assert(ACaptureSessionOutputContainer_create_ !=
nullptr);
427 return ACaptureSessionOutputContainer_create_(container);
433 ocean_assert(ACaptureSessionOutputContainer_free_ !=
nullptr);
435 ACaptureSessionOutputContainer_free_(container);
441 ocean_assert(ACaptureSessionOutput_create_ !=
nullptr);
443 return ACaptureSessionOutput_create_(anw, output);
449 ocean_assert(ACaptureSessionOutput_free_ !=
nullptr);
451 ACaptureSessionOutput_free_(output);
457 ocean_assert(ACaptureSessionOutputContainer_add_ !=
nullptr);
459 return ACaptureSessionOutputContainer_add_(container, output);
465 ocean_assert(ACaptureSessionOutputContainer_remove_ !=
nullptr);
467 return ACaptureSessionOutputContainer_remove_(container, output);
473 ocean_assert(ACameraDevice_createCaptureSession_ !=
nullptr);
475 return ACameraDevice_createCaptureSession_(device, outputs, callbacks, session);
481 ocean_assert(ACameraManager_create_ !=
nullptr);
483 return ACameraManager_create_();
489 ocean_assert(ACameraManager_delete_ !=
nullptr);
491 ACameraManager_delete_(manager);
497 ocean_assert(ACameraManager_getCameraIdList_ !=
nullptr);
499 return ACameraManager_getCameraIdList_(manager, cameraIdList);
505 ocean_assert(ACameraManager_deleteCameraIdList_ !=
nullptr);
507 ACameraManager_deleteCameraIdList_(cameraIdList);
513 ocean_assert(ACameraManager_registerAvailabilityCallback_ !=
nullptr);
515 return ACameraManager_registerAvailabilityCallback_(manager, callback);
521 ocean_assert(ACameraManager_unregisterAvailabilityCallback_ !=
nullptr);
523 return ACameraManager_unregisterAvailabilityCallback_(manager, callback);
529 ocean_assert(ACameraManager_getCameraCharacteristics_ !=
nullptr);
531 return ACameraManager_getCameraCharacteristics_(manager, cameraId, characteristics);
537 ocean_assert(ACameraManager_openCamera_ !=
nullptr);
539 return ACameraManager_openCamera_(manager, cameraId, callback, device);
545 ocean_assert(ACameraMetadata_getConstEntry_ !=
nullptr);
547 return ACameraMetadata_getConstEntry_(metadata, tag, entry);
553 ocean_assert(ACameraMetadata_getAllTags_ !=
nullptr);
555 return ACameraMetadata_getAllTags_(metadata, numEntries, tags);
561 ocean_assert(ACameraMetadata_copy_ !=
nullptr);
563 return ACameraMetadata_copy_(src);
569 ocean_assert(ACameraMetadata_free_ !=
nullptr);
571 ACameraMetadata_free_(metadata);
577 ocean_assert(ACameraOutputTarget_create_ !=
nullptr);
579 return ACameraOutputTarget_create_(window, output);
585 ocean_assert(ACameraOutputTarget_free_ !=
nullptr);
587 return ACameraOutputTarget_free_(output);
593 ocean_assert(ACaptureRequest_addTarget_ !=
nullptr);
595 return ACaptureRequest_addTarget_(request, output);
601 ocean_assert(ACaptureRequest_removeTarget_ !=
nullptr);
603 return ACaptureRequest_removeTarget_(request, output);
609 ocean_assert(ACaptureRequest_getConstEntry_ !=
nullptr);
611 return ACaptureRequest_getConstEntry_(request, tag, entry);
617 ocean_assert(ACaptureRequest_getAllTags_ !=
nullptr);
619 return ACaptureRequest_getAllTags_(request, numTags, tags);
625 ocean_assert(ACaptureRequest_setEntry_u8_ !=
nullptr);
627 return ACaptureRequest_setEntry_u8_(request, tag, count, data);
633 ocean_assert(ACaptureRequest_setEntry_i32_ !=
nullptr);
635 return ACaptureRequest_setEntry_i32_(request, tag, count, data);
641 ocean_assert(ACaptureRequest_setEntry_float_ !=
nullptr);
643 return ACaptureRequest_setEntry_float_(request, tag, count, data);
649 ocean_assert(ACaptureRequest_setEntry_i64_ !=
nullptr);
651 return ACaptureRequest_setEntry_i64_(request, tag, count, data);
657 ocean_assert(ACaptureRequest_setEntry_double_ !=
nullptr);
659 return ACaptureRequest_setEntry_double_(request, tag, count, data);
665 ocean_assert(ACaptureRequest_setEntry_rational_ !=
nullptr);
667 return ACaptureRequest_setEntry_rational_(request, tag, count, data);
673 ocean_assert(ACaptureRequest_free_ !=
nullptr);
675 ACaptureRequest_free_(request);
681 ocean_assert(ACameraCaptureSession_close_ !=
nullptr);
683 ACameraCaptureSession_close_(session);
689 ocean_assert(ACameraCaptureSession_getDevice_ !=
nullptr);
691 return ACameraCaptureSession_getDevice_(session, device);
697 ocean_assert(ACameraCaptureSession_capture_ !=
nullptr);
699 return ACameraCaptureSession_capture_(session, callbacks, numRequests, requests, captureSequenceId);
705 ocean_assert(ACameraCaptureSession_setRepeatingRequest_ !=
nullptr);
707 return ACameraCaptureSession_setRepeatingRequest_(session, callbacks, numRequests, requests, captureSequenceId);
713 ocean_assert(ACameraCaptureSession_stopRepeating_ !=
nullptr);
715 return ACameraCaptureSession_stopRepeating_(session);
721 ocean_assert(ACameraCaptureSession_abortCaptures_ !=
nullptr);
723 return ACameraCaptureSession_abortCaptures_(session);
This class implements a recursive lock object.
Definition Lock.h:31
This class implements a scoped lock object for recursive lock objects.
Definition Lock.h:135
This class wraps an unmanaged object (or reference) which needs to be released after usage.
Definition ScopedObject.h:28
This template class is the base class for all singleton objects.
Definition Singleton.h:71
The namespace covering the entire Ocean framework.
Definition Accessor.h:15