NdkCaptureRequest.cpp revision 2169303858f60f6c813be208ea3e088b073ef676
1/* 2 * Copyright (C) 2015 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//#define LOG_NDEBUG 0 18#define LOG_TAG "NdkCaptureRequest" 19#define ATRACE_TAG ATRACE_TAG_CAMERA 20 21#include <utils/Log.h> 22#include <utils/Trace.h> 23 24#include "NdkCaptureRequest.h" 25#include "impl/ACameraMetadata.h" 26#include "impl/ACaptureRequest.h" 27 28EXPORT 29camera_status_t ACameraOutputTarget_create( 30 ANativeWindow* window, ACameraOutputTarget** out) { 31 ATRACE_CALL(); 32 if (window == nullptr) { 33 ALOGE("%s: Error: input window is null", __FUNCTION__); 34 return ACAMERA_ERROR_INVALID_PARAMETER; 35 } 36 *out = new ACameraOutputTarget(window); 37 return ACAMERA_OK; 38} 39 40EXPORT 41void ACameraOutputTarget_free(ACameraOutputTarget* target) { 42 ATRACE_CALL(); 43 if (target != nullptr) { 44 delete target; 45 } 46 return; 47} 48 49EXPORT 50camera_status_t ACaptureRequest_addTarget( 51 ACaptureRequest* req, const ACameraOutputTarget* target) { 52 ATRACE_CALL(); 53 if (req == nullptr || req->targets == nullptr || target == nullptr) { 54 void* req_targets; 55 if (req != nullptr) 56 req_targets = req->targets; 57 else 58 req_targets = nullptr; 59 ALOGE("%s: Error: invalid input: req %p, req-targets %p, target %p", 60 __FUNCTION__, req, req_targets, target); 61 return ACAMERA_ERROR_INVALID_PARAMETER; 62 } 63 auto pair = req->targets->mOutputs.insert(*target); 64 if (!pair.second) { 65 ALOGW("%s: target %p already exists!", __FUNCTION__, target); 66 } 67 return ACAMERA_OK; 68} 69 70EXPORT 71camera_status_t ACaptureRequest_removeTarget( 72 ACaptureRequest* req, const ACameraOutputTarget* target) { 73 ATRACE_CALL(); 74 if (req == nullptr || req->targets == nullptr || target == nullptr) { 75 void* req_targets; 76 if (req != nullptr) 77 req_targets = req->targets; 78 else 79 req_targets = nullptr; 80 ALOGE("%s: Error: invalid input: req %p, req-targets %p, target %p", 81 __FUNCTION__, req, req_targets, target); 82 return ACAMERA_ERROR_INVALID_PARAMETER; 83 } 84 req->targets->mOutputs.erase(*target); 85 return ACAMERA_OK; 86} 87 88EXPORT 89camera_status_t ACaptureRequest_getConstEntry( 90 const ACaptureRequest* req, uint32_t tag, ACameraMetadata_const_entry* entry) { 91 ATRACE_CALL(); 92 if (req == nullptr || entry == nullptr) { 93 ALOGE("%s: invalid argument! req 0x%p, tag 0x%x, entry 0x%p", 94 __FUNCTION__, req, tag, entry); 95 return ACAMERA_ERROR_INVALID_PARAMETER; 96 } 97 return req->settings->getConstEntry(tag, entry); 98} 99 100EXPORT 101camera_status_t ACaptureRequest_getAllTags( 102 const ACaptureRequest* req, /*out*/int32_t* numTags, /*out*/const uint32_t** tags) { 103 ATRACE_CALL(); 104 if (req == nullptr || numTags == nullptr || tags == nullptr) { 105 ALOGE("%s: invalid argument! request %p, numTags %p, tags %p", 106 __FUNCTION__, req, numTags, tags); 107 return ACAMERA_ERROR_INVALID_PARAMETER; 108 } 109 return req->settings->getTags(numTags, tags); 110} 111 112#define SET_ENTRY(NAME,NDK_TYPE) \ 113EXPORT \ 114camera_status_t ACaptureRequest_setEntry_##NAME( \ 115 ACaptureRequest* req, uint32_t tag, uint32_t count, const NDK_TYPE* data) { \ 116 ATRACE_CALL(); \ 117 if (req == nullptr || (count > 0 && data == nullptr)) { \ 118 ALOGE("%s: invalid argument! req %p, tag 0x%x, count %d, data 0x%p", \ 119 __FUNCTION__, req, tag, count, data); \ 120 return ACAMERA_ERROR_INVALID_PARAMETER; \ 121 } \ 122 return req->settings->update(tag, count, data); \ 123} 124 125SET_ENTRY(u8,uint8_t) 126SET_ENTRY(i32,int32_t) 127SET_ENTRY(float,float) 128SET_ENTRY(double,double) 129SET_ENTRY(i64,int64_t) 130SET_ENTRY(rational,ACameraMetadata_rational) 131 132#undef SET_ENTRY 133 134EXPORT 135void ACaptureRequest_free(ACaptureRequest* request) { 136 ATRACE_CALL(); 137 if (request == nullptr) { 138 return; 139 } 140 delete request->settings; 141 delete request->targets; 142 delete request; 143 return; 144} 145