NdkCameraManager.cpp revision 0dea57fd9fc4b2ccaab97d9477359fbd5a626f5c
10dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh/* 20dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * Copyright (C) 2015 The Android Open Source Project 30dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * 40dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * Licensed under the Apache License, Version 2.0 (the "License"); 50dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * you may not use this file except in compliance with the License. 60dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * You may obtain a copy of the License at 70dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * 80dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * http://www.apache.org/licenses/LICENSE-2.0 90dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * 100dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * Unless required by applicable law or agreed to in writing, software 110dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * distributed under the License is distributed on an "AS IS" BASIS, 120dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * See the License for the specific language governing permissions and 140dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * limitations under the License. 150dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh */ 160dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 170dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh//#define LOG_NDEBUG 0 180dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#define LOG_TAG "NdkCameraManager" 190dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#define ATRACE_TAG ATRACE_TAG_CAMERA 200dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 210dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#include <utils/Log.h> 220dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#include <utils/Trace.h> 230dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 240dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#include <NdkCameraManager.h> 250dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#include "impl/ACameraManager.h" 260dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 270dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 280dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehACameraManager* ACameraManager_create() { 290dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 300dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return new ACameraManager(); 310dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 320dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 330dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 340dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehvoid ACameraManager_delete(ACameraManager* manager) { 350dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 360dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh if (manager != nullptr) { 370dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh delete manager; 380dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 390dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 400dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 410dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 420dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACameraManager_getCameraIdList( 430dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ACameraManager* manager, ACameraIdList** cameraIdList) { 440dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 450dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh if (manager == nullptr || cameraIdList == nullptr) { 460dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ALOGE("%s: invalid argument! manager 0x%p, cameraIdList 0x%p", 470dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh __FUNCTION__, manager, cameraIdList); 480dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 490dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 500dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return manager->getCameraIdList(cameraIdList); 510dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 520dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 530dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 540dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehvoid ACameraManager_deleteCameraIdList(ACameraIdList* cameraIdList) { 550dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 560dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh if (cameraIdList != nullptr) { 570dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ACameraManager::deleteCameraIdList(cameraIdList); 580dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 590dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 600dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 610dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 620dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACameraManager_registerAvailabilityCallback( 630dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ACameraManager*, const ACameraManager_AvailabilityCallbacks *callback) { 640dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 650dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh if (callback == nullptr) { 660dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ALOGE("%s: invalid argument! callback is null!", __FUNCTION__); 670dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 680dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 690dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh if (callback->onCameraAvailable == nullptr || callback->onCameraUnavailable == nullptr) { 700dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ALOGE("%s: invalid argument! callback 0x%p, " 710dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh "onCameraAvailable 0x%p, onCameraUnavailable 0x%p", 720dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh __FUNCTION__, callback, 730dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh callback->onCameraAvailable, callback->onCameraUnavailable); 740dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 750dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 760dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh CameraManagerGlobal::getInstance().registerAvailabilityCallback(callback); 770dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_OK; 780dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 790dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 800dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 810dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACameraManager_unregisterAvailabilityCallback( 820dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ACameraManager*, const ACameraManager_AvailabilityCallbacks *callback) { 830dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 840dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh if (callback == nullptr) { 850dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ALOGE("%s: invalid argument! callback is null!", __FUNCTION__); 860dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 870dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 880dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh if (callback->onCameraAvailable == nullptr || callback->onCameraUnavailable == nullptr) { 890dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ALOGE("%s: invalid argument! callback 0x%p, " 900dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh "onCameraAvailable 0x%p, onCameraUnavailable 0x%p", 910dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh __FUNCTION__, callback, 920dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh callback->onCameraAvailable, callback->onCameraUnavailable); 930dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 940dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 950dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh CameraManagerGlobal::getInstance().unregisterAvailabilityCallback(callback); 960dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_OK; 970dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 980dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 990dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 1000dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACameraManager_getCameraCharacteristics( 1010dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ACameraManager* mgr, const char* cameraId, ACameraMetadata** chars){ 1020dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 1030dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh if (mgr == nullptr || cameraId == nullptr || chars == nullptr) { 1040dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ALOGE("%s: invalid argument! mgr 0x%p cameraId 0x%p chars 0x%p", 1050dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh __FUNCTION__, mgr, cameraId, chars); 1060dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 1070dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 1080dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return mgr->getCameraCharacteristics(cameraId, chars); 1090dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 1100dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 1110dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 1120dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACameraManager_openCamera( 1130dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ACameraManager* mgr, const char* cameraId, 1140dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ACameraDevice_StateCallbacks* callback, 1150dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh /*out*/ACameraDevice** device) { 1160dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 1170dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh if (mgr == nullptr || cameraId == nullptr || callback == nullptr || device == nullptr) { 1180dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ALOGE("%s: invalid argument! mgr 0x%p cameraId 0x%p callback 0x%p device 0x%p", 1190dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh __FUNCTION__, mgr, cameraId, callback, device); 1200dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 1210dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 1220dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return mgr->openCamera(cameraId, callback, device); 1230dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 124