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 "NdkCameraDevice" 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 247e8d4ba5887affda749978d787b898bf31fda729Colin Cross#include <camera/NdkCameraDevice.h> 25ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh#include "impl/ACameraCaptureSession.h" 260dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 270dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehusing namespace android; 280dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 290dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 300dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACameraDevice_close(ACameraDevice* device) { 310dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 320dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh if (device == nullptr) { 330dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ALOGE("%s: invalid argument! device is null", __FUNCTION__); 340dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 350dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 360dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh delete device; 370dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_OK; 380dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 390dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 400dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 410dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehconst char* ACameraDevice_getId(const ACameraDevice* device) { 420dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 430dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh if (device == nullptr) { 440dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ALOGE("%s: invalid argument! device is null", __FUNCTION__); 450dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return nullptr; 460dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 470dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return device->getId(); 480dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 490dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 500dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 510dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACameraDevice_createCaptureRequest( 520dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh const ACameraDevice* device, 530dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ACameraDevice_request_template templateId, 540dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ACaptureRequest** request) { 550dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 560dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh if (device == nullptr || request == nullptr) { 57ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh ALOGE("%s: invalid argument! device %p request %p", 580dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh __FUNCTION__, device, request); 590dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 600dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 610dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh switch (templateId) { 620dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh case TEMPLATE_PREVIEW: 630dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh case TEMPLATE_STILL_CAPTURE: 640dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh case TEMPLATE_RECORD: 650dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh case TEMPLATE_VIDEO_SNAPSHOT: 660dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh case TEMPLATE_ZERO_SHUTTER_LAG: 670dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh case TEMPLATE_MANUAL: 680dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh break; 690dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh default: 700dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ALOGE("%s: unknown template ID %d", __FUNCTION__, templateId); 710dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 720dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh } 730dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return device->createCaptureRequest(templateId, request); 740dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 750dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 760dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 77ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yehcamera_status_t ACaptureSessionOutputContainer_create( 78ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh /*out*/ACaptureSessionOutputContainer** out) { 790dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 80ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh if (out == nullptr) { 81ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh ALOGE("%s: Error: out null", __FUNCTION__); 82ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 83ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh } 84ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh *out = new ACaptureSessionOutputContainer(); 850dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_OK; 860dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 870dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 880dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 89ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yehvoid ACaptureSessionOutputContainer_free(ACaptureSessionOutputContainer* container) { 900dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 91ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh if (container != nullptr) { 92ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh delete container; 93ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh } 940dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return; 950dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 960dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 970dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 98ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yehcamera_status_t ACaptureSessionOutput_create( 99ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh ANativeWindow* window, /*out*/ACaptureSessionOutput** out) { 1000dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 101ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh if (window == nullptr || out == nullptr) { 102ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh ALOGE("%s: Error: bad argument. window %p, out %p", 103ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh __FUNCTION__, window, out); 104ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 105ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh } 10640ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev *out = new ACaptureSessionOutput(window, false); 1070dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_OK; 1080dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 1090dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 1100dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 11140ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peevcamera_status_t ACaptureSessionSharedOutput_create( 11240ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ANativeWindow* window, /*out*/ACaptureSessionOutput** out) { 11340ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ATRACE_CALL(); 11440ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev if (window == nullptr || out == nullptr) { 11540ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ALOGE("%s: Error: bad argument. window %p, out %p", 11640ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev __FUNCTION__, window, out); 11740ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev return ACAMERA_ERROR_INVALID_PARAMETER; 11840ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev } 11940ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev *out = new ACaptureSessionOutput(window, true); 12040ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev return ACAMERA_OK; 12140ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev} 12240ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev 12340ead60d7163c2d5577099d49f11da7afa6124d1Emilian PeevEXPORT 12440ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peevcamera_status_t ACaptureSessionSharedOutput_add(ACaptureSessionOutput *out, 12540ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ANativeWindow* window) { 12640ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ATRACE_CALL(); 12740ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev if ((window == nullptr) || (out == nullptr)) { 12840ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ALOGE("%s: Error: bad argument. window %p, out %p", 12940ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev __FUNCTION__, window, out); 13040ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev return ACAMERA_ERROR_INVALID_PARAMETER; 13140ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev } 13240ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev if (!out->mIsShared) { 13340ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ALOGE("%s: Error trying to insert a new window in non-shared output configuration", 13440ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev __FUNCTION__); 13540ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev return ACAMERA_ERROR_INVALID_OPERATION; 13640ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev } 13740ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev if (out->mWindow == window) { 13840ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ALOGE("%s: Error trying to add the same window associated with the output configuration", 13940ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev __FUNCTION__); 14040ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev return ACAMERA_ERROR_INVALID_PARAMETER; 14140ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev } 14240ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev 14340ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev auto insert = out->mSharedWindows.insert(window); 14440ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev camera_status_t ret = (insert.second) ? ACAMERA_OK : ACAMERA_ERROR_INVALID_PARAMETER; 14540ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev return ret; 14640ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev} 14740ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev 14840ead60d7163c2d5577099d49f11da7afa6124d1Emilian PeevEXPORT 14940ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peevcamera_status_t ACaptureSessionSharedOutput_remove(ACaptureSessionOutput *out, 15040ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ANativeWindow* window) { 15140ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ATRACE_CALL(); 15240ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev if ((window == nullptr) || (out == nullptr)) { 15340ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ALOGE("%s: Error: bad argument. window %p, out %p", 15440ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev __FUNCTION__, window, out); 15540ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev return ACAMERA_ERROR_INVALID_PARAMETER; 15640ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev } 15740ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev if (!out->mIsShared) { 15840ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ALOGE("%s: Error trying to remove a window in non-shared output configuration", 15940ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev __FUNCTION__); 16040ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev return ACAMERA_ERROR_INVALID_OPERATION; 16140ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev } 16240ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev if (out->mWindow == window) { 16340ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev ALOGE("%s: Error trying to remove the same window associated with the output configuration", 16440ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev __FUNCTION__); 16540ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev return ACAMERA_ERROR_INVALID_PARAMETER; 16640ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev } 16740ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev 16840ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev auto remove = out->mSharedWindows.erase(window); 16940ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev camera_status_t ret = (remove) ? ACAMERA_OK : ACAMERA_ERROR_INVALID_PARAMETER; 17040ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev return ret; 17140ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev} 17240ead60d7163c2d5577099d49f11da7afa6124d1Emilian Peev 17340ead60d7163c2d5577099d49f11da7afa6124d1Emilian PeevEXPORT 174ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yehvoid ACaptureSessionOutput_free(ACaptureSessionOutput* output) { 1750dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 176ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh if (output != nullptr) { 177ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh delete output; 178ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh } 1790dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return; 1800dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 1810dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 1820dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 1830dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACaptureSessionOutputContainer_add( 184ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh ACaptureSessionOutputContainer* container, const ACaptureSessionOutput* output) { 1850dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 186ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh if (container == nullptr || output == nullptr) { 187ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh ALOGE("%s: Error: invalid input: container %p, output %p", 188ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh __FUNCTION__, container, output); 189ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 190ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh } 191ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh auto pair = container->mOutputs.insert(*output); 192ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh if (!pair.second) { 193ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh ALOGW("%s: output %p already exists!", __FUNCTION__, output); 194ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh } 1950dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_OK; 1960dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 1970dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 1980dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 1990dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACaptureSessionOutputContainer_remove( 200ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh ACaptureSessionOutputContainer* container, const ACaptureSessionOutput* output) { 2010dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 202ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh if (container == nullptr || output == nullptr) { 203ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh ALOGE("%s: Error: invalid input: container %p, output %p", 204ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh __FUNCTION__, container, output); 205ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 206ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh } 207ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh container->mOutputs.erase(*output); 2080dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh return ACAMERA_OK; 2090dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 2100dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh 2110dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehEXPORT 2120dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACameraDevice_createCaptureSession( 213ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh ACameraDevice* device, 2140dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh const ACaptureSessionOutputContainer* outputs, 215ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh const ACameraCaptureSession_stateCallbacks* callbacks, 216ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh /*out*/ACameraCaptureSession** session) { 2170dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh ATRACE_CALL(); 218ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh if (device == nullptr || outputs == nullptr || callbacks == nullptr || session == nullptr) { 219ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh ALOGE("%s: Error: invalid input: device %p, outputs %p, callbacks %p, session %p", 220ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh __FUNCTION__, device, outputs, callbacks, session); 221ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh return ACAMERA_ERROR_INVALID_PARAMETER; 222ead9146f844ee194a4f4244ba8ae1a3aece12b63Yin-Chia Yeh } 2235fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev return device->createCaptureSession(outputs, nullptr, callbacks, session); 2245fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev} 2255fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev 2265fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian PeevEXPORT 2275fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peevcamera_status_t ACameraDevice_createCaptureSessionWithSessionParameters( 2285fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev ACameraDevice* device, 2295fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev const ACaptureSessionOutputContainer* outputs, 2305fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev const ACaptureRequest* sessionParameters, 2315fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev const ACameraCaptureSession_stateCallbacks* callbacks, 2325fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev /*out*/ACameraCaptureSession** session) { 2335fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev ATRACE_CALL(); 2345fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev if (device == nullptr || outputs == nullptr || callbacks == nullptr || session == nullptr) { 2355fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev ALOGE("%s: Error: invalid input: device %p, outputs %p, callbacks %p, session %p", 2365fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev __FUNCTION__, device, outputs, callbacks, session); 2375fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev return ACAMERA_ERROR_INVALID_PARAMETER; 2385fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev } 2395fbe0ba24d88910e68610add74fd1e1b94d282b5Emilian Peev return device->createCaptureSession(outputs, sessionParameters, callbacks, session); 2400dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} 241