CaptureSequencer.cpp revision 69230df9905534cda15becd44c0109874c4be5f0
169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala/* 269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * 469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * you may not use this file except in compliance with the License. 669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * You may obtain a copy of the License at 769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * 869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * 1069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 1169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 1269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * See the License for the specific language governing permissions and 1469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * limitations under the License. 1569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala */ 1669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 1769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#define LOG_TAG "Camera2Client::CaptureSequencer" 1869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#define ATRACE_TAG ATRACE_TAG_CAMERA 1969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala//#define LOG_NDEBUG 0 2069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 2169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#include <utils/Log.h> 2269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#include <utils/Trace.h> 2369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#include <utils/Vector.h> 2469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 2569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#include "CaptureSequencer.h" 2669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#include "../Camera2Device.h" 2769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#include "../Camera2Client.h" 2869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#include "Parameters.h" 2969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 3069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalanamespace android { 3169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalanamespace camera2 { 3269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 3369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala/** Public members */ 3469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 3569230df9905534cda15becd44c0109874c4be5f0Eino-Ville TalvalaCaptureSequencer::CaptureSequencer(wp<Camera2Client> client): 3669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala Thread(false), 3769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mStartCapture(false), 3869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mBusy(false), 3969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewAEState(false), 4069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewFrameReceived(false), 4169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewCaptureReceived(false), 4269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mClient(client), 4369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mCaptureState(IDLE), 4469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mTriggerId(0), 4569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mTimeoutCount(0), 4669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mCaptureId(Camera2Client::kFirstCaptureRequestId) { 4769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 4869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 4969230df9905534cda15becd44c0109874c4be5f0Eino-Ville TalvalaCaptureSequencer::~CaptureSequencer() { 5069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGV("%s: Exit", __FUNCTION__); 5169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 5269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 5369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalavoid CaptureSequencer::setZslProcessor(wp<ZslProcessor> processor) { 5469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala Mutex::Autolock l(mInputMutex); 5569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mZslProcessor = processor; 5669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 5769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 5869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalastatus_t CaptureSequencer::startCapture() { 5969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 6069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala Mutex::Autolock l(mInputMutex); 6169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (mBusy) { 6269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Already busy capturing!", __FUNCTION__); 6369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return INVALID_OPERATION; 6469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 6569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (!mStartCapture) { 6669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mStartCapture = true; 6769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mStartCaptureSignal.signal(); 6869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 6969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return OK; 7069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 7169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 7269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalavoid CaptureSequencer::notifyAutoExposure(uint8_t newState, int triggerId) { 7369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 7469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala Mutex::Autolock l(mInputMutex); 7569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mAEState = newState; 7669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mAETriggerId = triggerId; 7769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (!mNewAEState) { 7869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewAEState = true; 7969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewNotifySignal.signal(); 8069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 8169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 8269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 8369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalavoid CaptureSequencer::onFrameAvailable(int32_t frameId, 8469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala CameraMetadata &frame) { 8569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 8669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala Mutex::Autolock l(mInputMutex); 8769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewFrameId = frameId; 8869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewFrame.acquire(frame); 8969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (!mNewFrameReceived) { 9069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewFrameReceived = true; 9169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewFrameSignal.signal(); 9269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 9369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 9469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 9569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalavoid CaptureSequencer::onCaptureAvailable(nsecs_t timestamp) { 9669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 9769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala Mutex::Autolock l(mInputMutex); 9869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mCaptureTimestamp = timestamp; 9969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (!mNewCaptureReceived) { 10069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewCaptureReceived = true; 10169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewCaptureSignal.signal(); 10269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 10369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 10469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 10569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 10669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalavoid CaptureSequencer::dump(int fd, const Vector<String16>& args) { 10769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala String8 result; 10869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (mCaptureRequest.entryCount() != 0) { 10969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala result = " Capture request:\n"; 11069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala write(fd, result.string(), result.size()); 11169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mCaptureRequest.dump(fd, 2, 6); 11269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } else { 11369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala result = " Capture request: undefined\n"; 11469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala write(fd, result.string(), result.size()); 11569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 11669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala result = String8::format(" Current capture state: %s\n", 11769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala kStateNames[mCaptureState]); 11869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala result.append(" Latest captured frame:\n"); 11969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala write(fd, result.string(), result.size()); 12069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewFrame.dump(fd, 2, 6); 12169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 12269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 12369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala/** Private members */ 12469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 12569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalaconst char* CaptureSequencer::kStateNames[CaptureSequencer::NUM_CAPTURE_STATES+1] = 12669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala{ 12769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "IDLE", 12869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "START", 12969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "ZSL_START", 13069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "ZSL_WAITING", 13169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "ZSL_REPROCESSING", 13269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "STANDARD_START", 13369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "STANDARD_PRECAPTURE", 13469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "STANDARD_CAPTURING", 13569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "DONE", 13669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "ERROR", 13769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "UNKNOWN" 13869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala}; 13969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 14069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalaconst CaptureSequencer::StateManager 14169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala CaptureSequencer::kStateManagers[CaptureSequencer::NUM_CAPTURE_STATES-1] = { 14269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &CaptureSequencer::manageIdle, 14369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &CaptureSequencer::manageStart, 14469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &CaptureSequencer::manageZslStart, 14569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &CaptureSequencer::manageZslWaiting, 14669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &CaptureSequencer::manageZslReprocessing, 14769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &CaptureSequencer::manageStandardStart, 14869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &CaptureSequencer::manageStandardPrecaptureWait, 14969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &CaptureSequencer::manageStandardCapture, 15069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &CaptureSequencer::manageStandardCaptureWait, 15169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &CaptureSequencer::manageDone, 15269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala}; 15369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 15469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalabool CaptureSequencer::threadLoop() { 15569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala status_t res; 15669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 15769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala sp<Camera2Client> client = mClient.promote(); 15869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (client == 0) return false; 15969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 16069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (mCaptureState < ERROR) { 16169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mCaptureState = (this->*kStateManagers[mCaptureState])(client); 16269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } else { 16369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Bad capture state: %s", 16469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala __FUNCTION__, kStateNames[mCaptureState]); 16569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return false; 16669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 16769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 16869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return true; 16969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 17069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 17169230df9905534cda15becd44c0109874c4be5f0Eino-Ville TalvalaCaptureSequencer::CaptureState CaptureSequencer::manageIdle(sp<Camera2Client> &client) { 17269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala status_t res; 17369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 17469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala Mutex::Autolock l(mInputMutex); 17569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala while (!mStartCapture) { 17669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mStartCaptureSignal.waitRelative(mInputMutex, 17769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala kWaitDuration); 17869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res == TIMED_OUT) break; 17969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 18069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (mStartCapture) { 18169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mStartCapture = false; 18269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mBusy = true; 18369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return START; 18469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 18569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return IDLE; 18669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 18769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 18869230df9905534cda15becd44c0109874c4be5f0Eino-Ville TalvalaCaptureSequencer::CaptureState CaptureSequencer::manageDone(sp<Camera2Client> &client) { 18969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala status_t res; 19069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 19169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mCaptureId++; 19269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 19369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala { 19469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala Mutex::Autolock l(mInputMutex); 19569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mBusy = false; 19669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 19769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 19869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala SharedParameters::Lock l(client->getParameters()); 19969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala switch (l.mParameters.state) { 20069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::STILL_CAPTURE: 20169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala l.mParameters.state = Parameters::STOPPED; 20269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala break; 20369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::VIDEO_SNAPSHOT: 20469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala l.mParameters.state = Parameters::RECORD; 20569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala break; 20669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala default: 20769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Camera %d: Still image produced unexpectedly " 20869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "in state %s!", 20969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala __FUNCTION__, client->getCameraId(), 21069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala Parameters::getStateName(l.mParameters.state)); 21169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 21269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 21369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return IDLE; 21469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 21569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 21669230df9905534cda15becd44c0109874c4be5f0Eino-Ville TalvalaCaptureSequencer::CaptureState CaptureSequencer::manageStart( 21769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala sp<Camera2Client> &client) { 21869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala status_t res; 21969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 22069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala SharedParameters::Lock l(client->getParameters()); 22169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala CaptureState nextState = DONE; 22269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 22369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = updateCaptureRequest(l.mParameters, client); 22469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK ) { 22569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Camera %d: Can't update still image capture request: %s (%d)", 22669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala __FUNCTION__, client->getCameraId(), strerror(-res), res); 22769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return DONE; 22869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 22969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 23069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (l.mParameters.zslMode && 23169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala l.mParameters.state == Parameters::STILL_CAPTURE) { 23269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala nextState = ZSL_START; 23369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } else { 23469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala nextState = STANDARD_START; 23569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 23669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 23769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return nextState; 23869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 23969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 24069230df9905534cda15becd44c0109874c4be5f0Eino-Ville TalvalaCaptureSequencer::CaptureState CaptureSequencer::manageZslStart( 24169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala sp<Camera2Client> &client) { 24269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala status_t res; 24369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala sp<ZslProcessor> processor = mZslProcessor.promote(); 24469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (processor == 0) { 24569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: No ZSL queue to use!", __FUNCTION__); 24669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return DONE; 24769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 24869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 24969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala client->registerFrameListener(mCaptureId, 25069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala this); 25169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 25269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = client->getCameraDevice()->clearStreamingRequest(); 25369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) { 25469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to stop preview for ZSL capture: " 25569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "%s (%d)", 25669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala __FUNCTION__, client->getCameraId(), strerror(-res), res); 25769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return DONE; 25869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 25969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala // TODO: Actually select the right thing here. 26069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala processor->pushToReprocess(mCaptureId); 26169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 26269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mTimeoutCount = kMaxTimeoutsForCaptureEnd; 26369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return STANDARD_CAPTURE_WAIT; 26469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 26569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 26669230df9905534cda15becd44c0109874c4be5f0Eino-Ville TalvalaCaptureSequencer::CaptureState CaptureSequencer::manageZslWaiting( 26769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala sp<Camera2Client> &client) { 26869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return DONE; 26969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 27069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 27169230df9905534cda15becd44c0109874c4be5f0Eino-Ville TalvalaCaptureSequencer::CaptureState CaptureSequencer::manageZslReprocessing( 27269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala sp<Camera2Client> &client) { 27369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return START; 27469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 27569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 27669230df9905534cda15becd44c0109874c4be5f0Eino-Ville TalvalaCaptureSequencer::CaptureState CaptureSequencer::manageStandardStart( 27769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala sp<Camera2Client> &client) { 27869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 27969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala client->registerFrameListener(mCaptureId, 28069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala this); 28169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala { 28269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala SharedParameters::Lock l(client->getParameters()); 28369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mTriggerId = l.mParameters.precaptureTriggerCounter++; 28469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 28569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala client->getCameraDevice()->triggerPrecaptureMetering(mTriggerId); 28669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 28769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mAeInPrecapture = false; 28869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mTimeoutCount = kMaxTimeoutsForPrecaptureStart; 28969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return STANDARD_PRECAPTURE_WAIT; 29069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 29169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 29269230df9905534cda15becd44c0109874c4be5f0Eino-Ville TalvalaCaptureSequencer::CaptureState CaptureSequencer::manageStandardPrecaptureWait( 29369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala sp<Camera2Client> &client) { 29469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala status_t res; 29569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 29669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala Mutex::Autolock l(mInputMutex); 29769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala while (!mNewAEState) { 29869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mNewNotifySignal.waitRelative(mInputMutex, kWaitDuration); 29969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res == TIMED_OUT) { 30069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mTimeoutCount--; 30169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala break; 30269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 30369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 30469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (mTimeoutCount <= 0) { 30569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGW("Timed out waiting for precapture %s", 30669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mAeInPrecapture ? "end" : "start"); 30769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return STANDARD_CAPTURE; 30869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 30969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (mNewAEState) { 31069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (!mAeInPrecapture) { 31169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala // Waiting to see PRECAPTURE state 31269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (mAETriggerId == mTriggerId && 31369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mAEState == ANDROID_CONTROL_AE_STATE_PRECAPTURE) { 31469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGV("%s: Got precapture start", __FUNCTION__); 31569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mAeInPrecapture = true; 31669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mTimeoutCount = kMaxTimeoutsForPrecaptureEnd; 31769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 31869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } else { 31969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala // Waiting to see PRECAPTURE state end 32069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (mAETriggerId == mTriggerId && 32169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mAEState != ANDROID_CONTROL_AE_STATE_PRECAPTURE) { 32269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGV("%s: Got precapture end", __FUNCTION__); 32369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return STANDARD_CAPTURE; 32469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 32569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 32669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewAEState = false; 32769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 32869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return STANDARD_PRECAPTURE_WAIT; 32969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 33069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 33169230df9905534cda15becd44c0109874c4be5f0Eino-Ville TalvalaCaptureSequencer::CaptureState CaptureSequencer::manageStandardCapture( 33269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala sp<Camera2Client> &client) { 33369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala status_t res; 33469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 33569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala SharedParameters::Lock l(client->getParameters()); 33669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala Vector<uint8_t> outputStreams; 33769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 33869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala outputStreams.push(client->getPreviewStreamId()); 33969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala outputStreams.push(client->getCaptureStreamId()); 34069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 34169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (l.mParameters.previewCallbackFlags & 34269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala CAMERA_FRAME_CALLBACK_FLAG_ENABLE_MASK) { 34369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala outputStreams.push(client->getCallbackStreamId()); 34469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 34569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 34669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (l.mParameters.state == Parameters::VIDEO_SNAPSHOT) { 34769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala outputStreams.push(client->getRecordingStreamId()); 34869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 34969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 35069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.update(ANDROID_REQUEST_OUTPUT_STREAMS, 35169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala outputStreams); 35269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res == OK) { 35369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.update(ANDROID_REQUEST_ID, 35469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &mCaptureId, 1); 35569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 35669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res == OK) { 35769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.sort(); 35869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 35969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 36069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) { 36169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to set up still capture request: %s (%d)", 36269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala __FUNCTION__, client->getCameraId(), strerror(-res), res); 36369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return DONE; 36469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 36569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 36669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala CameraMetadata captureCopy = mCaptureRequest; 36769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (captureCopy.entryCount() == 0) { 36869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to copy capture request for HAL device", 36969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala __FUNCTION__, client->getCameraId()); 37069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return DONE; 37169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 37269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 37369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (l.mParameters.state == Parameters::STILL_CAPTURE) { 37469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = client->getCameraDevice()->clearStreamingRequest(); 37569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) { 37669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to stop preview for still capture: " 37769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "%s (%d)", 37869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala __FUNCTION__, client->getCameraId(), strerror(-res), res); 37969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return DONE; 38069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 38169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 38269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala // TODO: Capture should be atomic with setStreamingRequest here 38369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = client->getCameraDevice()->capture(captureCopy); 38469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) { 38569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to submit still image capture request: " 38669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "%s (%d)", 38769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala __FUNCTION__, client->getCameraId(), strerror(-res), res); 38869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return DONE; 38969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 39069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 39169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mTimeoutCount = kMaxTimeoutsForCaptureEnd; 39269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return STANDARD_CAPTURE_WAIT; 39369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 39469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 39569230df9905534cda15becd44c0109874c4be5f0Eino-Ville TalvalaCaptureSequencer::CaptureState CaptureSequencer::manageStandardCaptureWait( 39669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala sp<Camera2Client> &client) { 39769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala status_t res; 39869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 39969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala Mutex::Autolock l(mInputMutex); 40069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala while (!mNewFrameReceived) { 40169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mNewFrameSignal.waitRelative(mInputMutex, kWaitDuration); 40269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res == TIMED_OUT) { 40369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mTimeoutCount--; 40469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala break; 40569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 40669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 40769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala while (!mNewCaptureReceived) { 40869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mNewCaptureSignal.waitRelative(mInputMutex, kWaitDuration); 40969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res == TIMED_OUT) { 41069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mTimeoutCount--; 41169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala break; 41269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 41369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 41469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (mTimeoutCount <= 0) { 41569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGW("Timed out waiting for capture to complete"); 41669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return DONE; 41769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 41869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (mNewFrameReceived && mNewCaptureReceived) { 41969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (mNewFrameId != mCaptureId) { 42069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGW("Mismatched capture frame IDs: Expected %d, got %d", 42169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mCaptureId, mNewFrameId); 42269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 42369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala camera_metadata_entry_t entry; 42469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala entry = mNewFrame.find(ANDROID_SENSOR_TIMESTAMP); 42569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (entry.count == 0) { 42669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("No timestamp field in capture frame!"); 42769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 42869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (entry.data.i64[0] != mCaptureTimestamp) { 42969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGW("Mismatched capture timestamps: Metadata frame %lld," 43069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala " captured buffer %lld", entry.data.i64[0], mCaptureTimestamp); 43169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 43269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala client->removeFrameListener(mCaptureId); 43369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 43469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewFrameReceived = false; 43569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala mNewCaptureReceived = false; 43669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return DONE; 43769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 43869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return STANDARD_CAPTURE_WAIT; 43969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 44069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 44169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalastatus_t CaptureSequencer::updateCaptureRequest(const Parameters ¶ms, 44269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala sp<Camera2Client> &client) { 44369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 44469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala status_t res; 44569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (mCaptureRequest.entryCount() == 0) { 44669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = client->getCameraDevice()->createDefaultRequest( 44769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala CAMERA2_TEMPLATE_STILL_CAPTURE, 44869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &mCaptureRequest); 44969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) { 45069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to create default still image request:" 45169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala " %s (%d)", __FUNCTION__, client->getCameraId(), 45269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala strerror(-res), res); 45369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return res; 45469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 45569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 45669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 45769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = params.updateRequest(&mCaptureRequest); 45869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) { 45969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to update common entries of capture " 46069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala "request: %s (%d)", __FUNCTION__, client->getCameraId(), 46169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala strerror(-res), res); 46269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return res; 46369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 46469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 46569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.update(ANDROID_JPEG_THUMBNAIL_SIZE, 46669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala params.jpegThumbSize, 2); 46769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 46869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.update(ANDROID_JPEG_THUMBNAIL_QUALITY, 46969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ¶ms.jpegThumbQuality, 1); 47069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 47169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.update(ANDROID_JPEG_QUALITY, 47269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ¶ms.jpegQuality, 1); 47369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 47469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.update( 47569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ANDROID_JPEG_ORIENTATION, 47669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ¶ms.jpegRotation, 1); 47769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 47869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 47969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (params.gpsEnabled) { 48069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.update( 48169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ANDROID_JPEG_GPS_COORDINATES, 48269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala params.gpsCoordinates, 3); 48369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 48469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.update( 48569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ANDROID_JPEG_GPS_TIMESTAMP, 48669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ¶ms.gpsTimestamp, 1); 48769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 48869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.update( 48969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ANDROID_JPEG_GPS_PROCESSING_METHOD, 49069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala params.gpsProcessingMethod); 49169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 49269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } else { 49369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.erase(ANDROID_JPEG_GPS_COORDINATES); 49469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 49569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.erase(ANDROID_JPEG_GPS_TIMESTAMP); 49669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 49769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = mCaptureRequest.erase(ANDROID_JPEG_GPS_PROCESSING_METHOD); 49869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 49969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 50069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 50169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return OK; 50269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 50369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 50469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 50569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala}; // namespace camera2 50669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala}; // namespace android 507