Camera2Client.cpp revision be0573b93e2d6fa133579c885583af9ed16bc29d
161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala/* 261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * you may not use this file except in compliance with the License. 661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * You may obtain a copy of the License at 761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 1061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 1161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 1261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * See the License for the specific language governing permissions and 1461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * limitations under the License. 1561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala */ 1661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 1761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#define LOG_TAG "Camera2Client" 18a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala#define ATRACE_TAG ATRACE_TAG_CAMERA 1961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala//#define LOG_NDEBUG 0 20a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala 21f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala#include <utils/Log.h> 22a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala#include <utils/Trace.h> 2361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 2461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include <cutils/properties.h> 2561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include <gui/SurfaceTextureClient.h> 2661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include <gui/Surface.h> 2761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 28f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala#include <math.h> 29f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 3061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include "Camera2Client.h" 3161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalanamespace android { 3361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#define ALOG1(...) ALOGD_IF(gLogLevel >= 1, __VA_ARGS__); 3561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#define ALOG2(...) ALOGD_IF(gLogLevel >= 2, __VA_ARGS__); 3661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatic int getCallingPid() { 3861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return IPCThreadState::self()->getCallingPid(); 3961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 4061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 4161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatic int getCallingUid() { 4261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return IPCThreadState::self()->getCallingUid(); 4361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 4461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 4561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala// Interface used by CameraService 4661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 4761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaCamera2Client::Camera2Client(const sp<CameraService>& cameraService, 4861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala const sp<ICameraClient>& cameraClient, 4961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int cameraId, 5061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int cameraFacing, 5161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int clientPid): 5261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala Client(cameraService, cameraClient, 53f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala cameraId, cameraFacing, clientPid), 546db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState(NOT_INITIALIZED), 55d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mPreviewStreamId(NO_STREAM), 56d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mPreviewRequest(NULL), 57d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureStreamId(NO_STREAM), 58d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureRequest(NULL) 59f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 60a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 6161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 62f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDevice = new Camera2Device(cameraId); 63f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 64f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 65f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::initialize(camera_module_t *module) 66f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 67a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 68f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 69f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 70f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = mDevice->initialize(module); 71f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) { 72f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: unable to initialize device: %s (%d)", 73f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 74f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 75f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 76f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 77f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = buildDefaultParameters(); 78f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) { 79f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: unable to build defaults: %s (%d)", 80f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 81f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 82f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 833cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 84f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (gLogLevel >= 1) { 85f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGD("%s: Default parameters converted from camera %d:", __FUNCTION__, 86f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mCameraId); 873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGD("%s", mParamsFlattened.string()); 88f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 89f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 906db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 916db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 92f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 9361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 9461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 9561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaCamera2Client::~Camera2Client() { 96a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 974ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala ALOGV("%s: Camera %d: Shutting down", __FUNCTION__, mCameraId); 984ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala 99f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDestructionStarted = true; 100f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 101f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala disconnect(); 1023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 10361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 10461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 10561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::dump(int fd, const Vector<String16>& args) { 106611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala String8 result; 1073297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat("Client2[%d] (%p) PID: %d, dump:\n", 108611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala mCameraId, 109611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala getCameraClient()->asBinder().get(), 110611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala mClientPid); 1117f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" State: "); 1127f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala#define CASE_APPEND_ENUM(x) case x: result.append(#x "\n"); break; 1137f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1144ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala result.append(getStateName(mState)); 1157f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1164ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala result.append("\n Current parameters:\n"); 1177f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Preview size: %d x %d\n", 1187f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.previewWidth, mParameters.previewHeight); 1197f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Preview FPS range: %d - %d\n", 12011b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.previewFpsRange[0], mParameters.previewFpsRange[1]); 1217f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Preview HAL pixel format: 0x%x\n", 1227f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.previewFormat); 12311b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala result.appendFormat(" Preview transform: %x\n", 12411b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.previewTransform); 1257f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Picture size: %d x %d\n", 1267f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.pictureWidth, mParameters.pictureHeight); 1277f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Jpeg thumbnail size: %d x %d\n", 12811b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.jpegThumbSize[0], mParameters.jpegThumbSize[1]); 1297f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Jpeg quality: %d, thumbnail quality: %d\n", 1307f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.jpegQuality, mParameters.jpegThumbQuality); 1317f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Jpeg rotation: %d\n", mParameters.jpegRotation); 1327f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" GPS tags %s\n", 1337f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsEnabled ? "enabled" : "disabled"); 1347f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala if (mParameters.gpsEnabled) { 1357f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" GPS lat x long x alt: %f x %f x %f\n", 13611b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.gpsCoordinates[0], mParameters.gpsCoordinates[1], 13711b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.gpsCoordinates[2]); 1387f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" GPS timestamp: %lld\n", 1397f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsTimestamp); 1407f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" GPS processing method: %s\n", 1417f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsProcessingMethod.string()); 1427f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1437f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1447f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" White balance mode: "); 1457f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.wbMode) { 1467f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_AUTO) 1477f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_INCANDESCENT) 1487f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_FLUORESCENT) 1497f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_WARM_FLUORESCENT) 1507f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_DAYLIGHT) 1517f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT) 1527f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_TWILIGHT) 1537f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_SHADE) 1547f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 1557f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1567f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1577f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Effect mode: "); 1587f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.effectMode) { 1597f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_OFF) 1607f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_MONO) 1617f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_NEGATIVE) 1627f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_SOLARIZE) 1637f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_SEPIA) 1647f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_POSTERIZE) 1657f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_WHITEBOARD) 1667f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_BLACKBOARD) 1677f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_AQUA) 1687f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 1697f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1707f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1717f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Antibanding mode: "); 1727f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.antibandingMode) { 1737f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AE_ANTIBANDING_AUTO) 1747f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AE_ANTIBANDING_OFF) 1757f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AE_ANTIBANDING_50HZ) 1767f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AE_ANTIBANDING_60HZ) 1777f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 1787f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1797f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1807f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Scene mode: "); 1817f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.sceneMode) { 1827f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED: 1837f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append("AUTO\n"); break; 1847f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_ACTION) 1857f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_PORTRAIT) 1867f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_LANDSCAPE) 1877f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_NIGHT) 1887f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT) 1897f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_THEATRE) 1907f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_BEACH) 1917f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_SNOW) 1927f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_SUNSET) 1937f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO) 1947f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_FIREWORKS) 1957f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_SPORTS) 1967f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_PARTY) 1977f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT) 1987f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_BARCODE) 1997f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 2007f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2017f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2027f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Flash mode: "); 2037f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.flashMode) { 2047f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_OFF) 2057f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_AUTO) 2067f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_ON) 2077f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_TORCH) 2087f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_RED_EYE) 2097f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_INVALID) 2107f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 2117f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2127f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2137f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Focus mode: "); 2147f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.focusMode) { 2157f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_AUTO) 2167f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_MACRO) 2177f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_CONTINUOUS_VIDEO) 2187f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_CONTINUOUS_PICTURE) 2197f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_EDOF) 2207f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_INFINITY) 2217f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_FIXED) 2227f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_INVALID) 2237f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 2247f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2257f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2267f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Focusing areas:\n"); 2277f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala for (size_t i = 0; i < mParameters.focusingAreas.size(); i++) { 2287f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" [ (%d, %d, %d, %d), weight %d ]\n", 2297f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].left, 2307f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].top, 2317f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].right, 2327f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].bottom, 2337f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].weight); 2347f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2357f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2367f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Exposure compensation index: %d\n", 2377f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.exposureCompensation); 2387f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2397f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" AE lock %s, AWB lock %s\n", 2407f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.autoExposureLock ? "enabled" : "disabled", 2417f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.autoWhiteBalanceLock ? "enabled" : "disabled" ); 2427f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2437f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Metering areas:\n"); 2447f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala for (size_t i = 0; i < mParameters.meteringAreas.size(); i++) { 2457f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" [ (%d, %d, %d, %d), weight %d ]\n", 2467f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].left, 2477f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].top, 2487f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].right, 2497f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].bottom, 2507f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].weight); 2517f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2527f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2533297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat(" Zoom index: %d\n", mParameters.zoom); 2543297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat(" Video size: %d x %d\n", mParameters.videoWidth, 2557f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.videoHeight); 2567f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2573297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat(" Recording hint is %s\n", 2587f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.recordingHint ? "set" : "not set"); 2597f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2603297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat(" Video stabilization is %s\n", 2617f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.videoStabilization ? "enabled" : "disabled"); 2627f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2633297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.append(" Current streams:\n"); 2643297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat(" Preview stream ID: %d\n", mPreviewStreamId); 2653297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat(" Capture stream ID: %d\n", mCaptureStreamId); 2663297daae9681004775012faba9181d65e097e00cEino-Ville Talvala 2673297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.append(" Current requests:\n"); 2683297daae9681004775012faba9181d65e097e00cEino-Ville Talvala if (mPreviewRequest != NULL) { 2693297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.append(" Preview request:\n"); 2703297daae9681004775012faba9181d65e097e00cEino-Ville Talvala write(fd, result.string(), result.size()); 2713297daae9681004775012faba9181d65e097e00cEino-Ville Talvala dump_camera_metadata(mPreviewRequest, fd, 2); 2723297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } else { 2733297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.append(" Preview request: undefined\n"); 2743297daae9681004775012faba9181d65e097e00cEino-Ville Talvala write(fd, result.string(), result.size()); 2753297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 2763297daae9681004775012faba9181d65e097e00cEino-Ville Talvala 2773297daae9681004775012faba9181d65e097e00cEino-Ville Talvala if (mCaptureRequest != NULL) { 2783297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result = " Capture request:\n"; 2793297daae9681004775012faba9181d65e097e00cEino-Ville Talvala write(fd, result.string(), result.size()); 2803297daae9681004775012faba9181d65e097e00cEino-Ville Talvala dump_camera_metadata(mCaptureRequest, fd, 2); 2813297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } else { 2823297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result = " Capture request: undefined\n"; 2833297daae9681004775012faba9181d65e097e00cEino-Ville Talvala write(fd, result.string(), result.size()); 2843297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 2853297daae9681004775012faba9181d65e097e00cEino-Ville Talvala 2863297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result = " Device dump:\n"; 287611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala write(fd, result.string(), result.size()); 2887f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2893297daae9681004775012faba9181d65e097e00cEino-Ville Talvala status_t res = mDevice->dump(fd, args); 2903297daae9681004775012faba9181d65e097e00cEino-Ville Talvala if (res != OK) { 2913297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result = String8::format(" Error dumping device: %s (%d)", 2923297daae9681004775012faba9181d65e097e00cEino-Ville Talvala strerror(-res), res); 2933297daae9681004775012faba9181d65e097e00cEino-Ville Talvala write(fd, result.string(), result.size()); 2943297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 2957f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2967f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala#undef CASE_APPEND_ENUM 297611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala return NO_ERROR; 29861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 29961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3004ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvalaconst char* Camera2Client::getStateName(State state) { 3014ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala#define CASE_ENUM_TO_CHAR(x) case x: return(#x); break; 3024ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala switch(state) { 3034ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(NOT_INITIALIZED) 3044ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(STOPPED) 3054ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(WAITING_FOR_PREVIEW_WINDOW) 3064ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(PREVIEW) 3074ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(RECORD) 3084ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(STILL_CAPTURE) 3094ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(VIDEO_SNAPSHOT) 3104ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala default: 3114ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala return "Unknown state!"; 3124ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala break; 3134ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala } 3144ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala#undef CASE_ENUM_TO_CHAR 3154ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala} 3164ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala 31761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala// ICamera interface 31861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 31961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::disconnect() { 320a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 321ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 322ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 323f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (mDevice == 0) return; 324f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 325ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala stopPreviewLocked(); 3266db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 327d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mDevice->waitUntilDrained(); 328d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 329d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mPreviewStreamId != NO_STREAM) { 3306db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mDevice->deleteStream(mPreviewStreamId); 331d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mPreviewStreamId = NO_STREAM; 332d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 333d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 334d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCaptureStreamId != NO_STREAM) { 335d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mDevice->deleteStream(mCaptureStreamId); 336d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureStreamId = NO_STREAM; 3376db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 338f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 33961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala CameraService::Client::disconnect(); 34061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 34161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 34261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::connect(const sp<ICameraClient>& client) { 343a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 344ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 345ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 34661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 34761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 34861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 34961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::lock() { 350a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 351ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 352ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 35361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 35461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 35561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 35661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::unlock() { 357a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 358ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 359ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 36061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 36161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 36261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3636db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewDisplay( 3646db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<Surface>& surface) { 365a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 366ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 367ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 368ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala if (mState >= PREVIEW) return INVALID_OPERATION; 3696db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3706db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<IBinder> binder; 3716db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<ANativeWindow> window; 3726db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (surface != 0) { 3736db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala binder = surface->asBinder(); 3746db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala window = surface; 3756db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 3766db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 377d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return setPreviewWindowLocked(binder,window); 37861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 37961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3806db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewTexture( 3816db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<ISurfaceTexture>& surfaceTexture) { 382a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 383ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 384ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 385ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala if (mState >= PREVIEW) return INVALID_OPERATION; 3866db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3876db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<IBinder> binder; 3886db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<ANativeWindow> window; 3896db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (surfaceTexture != 0) { 3906db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala binder = surfaceTexture->asBinder(); 3916db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala window = new SurfaceTextureClient(surfaceTexture); 3926db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 393d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return setPreviewWindowLocked(binder, window); 3946db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala} 3956db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 396d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvalastatus_t Camera2Client::setPreviewWindowLocked(const sp<IBinder>& binder, 397be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala sp<ANativeWindow> window) { 398a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 3996db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 4006db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4016db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (binder == mPreviewSurface) { 4026db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return NO_ERROR; 4036db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4046db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 405d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mPreviewStreamId != NO_STREAM) { 406be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = mDevice->waitUntilDrained(); 407be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 408be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Error waiting for preview to drain: %s (%d)", 409be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, strerror(-res), res); 410be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 411be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 4126db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->deleteStream(mPreviewStreamId); 4136db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 414be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Unable to delete old preview stream: %s (%d)", 415be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, strerror(-res), res); 4166db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 4176db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 418be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mPreviewStreamId = NO_STREAM; 4196db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4206db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 421bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala mPreviewSurface = binder; 422be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mPreviewWindow = window; 423bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala 4246db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState == WAITING_FOR_PREVIEW_WINDOW) { 425d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return startPreviewLocked(); 4266db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4276db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4286db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 42961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 43061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 43161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::setPreviewCallbackFlag(int flag) { 432a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 433ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 43461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 43561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 43661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startPreview() { 437a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 438ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 439d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return startPreviewLocked(); 440d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala} 441ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 442d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvalastatus_t Camera2Client::startPreviewLocked() { 443d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ATRACE_CALL(); 4446db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 4454ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala if (mState >= PREVIEW) { 4464ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala ALOGE("%s: Can't start preview in state %s", 4474ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala __FUNCTION__, getStateName(mState)); 4484ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala return INVALID_OPERATION; 4494ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala } 4506db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 451be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (mPreviewWindow == 0) { 4526db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = WAITING_FOR_PREVIEW_WINDOW; 4536db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 4546db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 455be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mState = STOPPED; 4566db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 457be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updatePreviewStream(); 458be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 459be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Unable to update preview stream: %s (%d)", 460be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 461be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 4626db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4636db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 464be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (mPreviewRequest == NULL) { 465be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updatePreviewRequest(); 466be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 467be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Unable to create preview request: %s (%d)", 468be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 469be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 470be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 4716db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4726db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 473be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(mPreviewRequest, 474be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_REQUEST_OUTPUT_STREAMS, 475be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala &mPreviewStreamId, 1); 4766db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 4776db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOGE("%s: Camera %d: Unable to set up preview request: %s (%d)", 4786db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 479be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 480be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 481be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = sort_camera_metadata(mPreviewRequest); 482be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 483be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Error sorting preview request: %s (%d)", 484be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 4856db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 4866db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4876db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4886db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->setStreamingRequest(mPreviewRequest); 4896db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 490bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala ALOGE("%s: Camera %d: Unable to set preview request to start preview: " 491bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala "%s (%d)", 4926db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 4936db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 4946db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4956db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = PREVIEW; 4966db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4976db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 49861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 49961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 50061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopPreview() { 501a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 502ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 503ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala stopPreviewLocked(); 504ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala} 505ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 506ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvalavoid Camera2Client::stopPreviewLocked() { 507ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala ATRACE_CALL(); 508d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala switch (mState) { 509d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case NOT_INITIALIZED: 510d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Call before initialized", 511d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 512d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 513d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case STOPPED: 514d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 515d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case STILL_CAPTURE: 516d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Cannot stop preview during still capture.", 517d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 518d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 519d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case RECORD: 520d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // TODO: Handle record stop here 521d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case PREVIEW: 522d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mDevice->setStreamingRequest(NULL); 523d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case WAITING_FOR_PREVIEW_WINDOW: 524d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mState = STOPPED; 525d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 526d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala default: 527d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unknown state %d", __FUNCTION__, mCameraId, 528d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mState); 529d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 53061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 53161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 53261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::previewEnabled() { 533a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 534ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 5356db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return mState == PREVIEW; 53661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 53761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 53861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::storeMetaDataInBuffers(bool enabled) { 539a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 540ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 54161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 54261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 54361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 54461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startRecording() { 545a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 546ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 54761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 54861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 54961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 55061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopRecording() { 551a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 552ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 55361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 55461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 55561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::recordingEnabled() { 556a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 557ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 55861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 55961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 56061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 56161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::releaseRecordingFrame(const sp<IMemory>& mem) { 562a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 563ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 56461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 56561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 56661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::autoFocus() { 567a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 568ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 5696db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 57061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 57161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 57261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::cancelAutoFocus() { 573a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 574ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 5756db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 57661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 57761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 57861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::takePicture(int msgType) { 579a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 580ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 581d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala status_t res; 582d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 583d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala switch (mState) { 584d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case NOT_INITIALIZED: 585d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case STOPPED: 586d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case WAITING_FOR_PREVIEW_WINDOW: 587d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Cannot take picture without preview enabled", 588d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 589d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return INVALID_OPERATION; 590d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case PREVIEW: 591d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case RECORD: 592d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Good to go for takePicture 593d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 594d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case STILL_CAPTURE: 595d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case VIDEO_SNAPSHOT: 596d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Already taking a picture", 597d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 598d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return INVALID_OPERATION; 599d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 600d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 601d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala Mutex::Autolock pl(mParamsLock); 602d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 603d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = updateCaptureStream(); 6044ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala if (res != OK) { 605be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Can't set up still image stream: %s (%d)", 606be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 6074ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala return res; 6084ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala } 609d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 610d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCaptureRequest == NULL) { 6114ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala res = updateCaptureRequest(); 6124ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala if (res != OK) { 613be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Can't create still image capture request: " 614be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala "%s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 6154ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala return res; 6164ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala } 617d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 618d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 619be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala // TODO: For video snapshot, will need 3 streams here 620d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala camera_metadata_entry_t outputStreams; 621d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala uint8_t streamIds[2] = { mPreviewStreamId, mCaptureStreamId }; 622be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(mCaptureRequest, ANDROID_REQUEST_OUTPUT_STREAMS, 623be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala &streamIds, 2); 624d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 625d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to set up still image capture request: " 626d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "%s (%d)", 627d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 628d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 629d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 630be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = sort_camera_metadata(mCaptureRequest); 631be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 632be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Unable to sort capture request: %s (%d)", 633be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 634be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 635be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 636d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 637d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala camera_metadata_t *captureCopy = clone_camera_metadata(mCaptureRequest); 638d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (captureCopy == NULL) { 639d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to copy capture request for HAL device", 640d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 641d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return NO_MEMORY; 642d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 643d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 644d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mState == PREVIEW) { 645d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mDevice->setStreamingRequest(NULL); 646d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 647d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to stop preview for still capture: " 648d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "%s (%d)", 649d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 650d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 651d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 652d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 653d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 654d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mDevice->capture(captureCopy); 655d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 656d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to submit still image capture request: " 657d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "%s (%d)", 658d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 659d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 660d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 661d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 662d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala switch (mState) { 663d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case PREVIEW: 664d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mState = STILL_CAPTURE; 665d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 666d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case RECORD: 667d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mState = VIDEO_SNAPSHOT; 668d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 669d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala default: 670d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unknown state for still capture!", 671d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 672d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return INVALID_OPERATION; 673d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 674d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 675d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return OK; 67661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 67761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 67861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::setParameters(const String8& params) { 679a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 680ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 6816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Mutex::Autolock pl(mParamsLock); 6826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala status_t res; 6836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala CameraParameters newParams(params); 6856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // TODO: Currently ignoring any changes to supposedly read-only 6876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // parameters such as supported preview sizes, etc. Should probably 6886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // produce an error if they're changed. 6896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala /** Extract and verify new parameters */ 6916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala size_t i; 6936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PREVIEW_SIZE 6956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int previewWidth, previewHeight; 6966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getPreviewSize(&previewWidth, &previewHeight); 6976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (previewWidth != mParameters.previewWidth || 6996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewHeight != mParameters.previewHeight) { 7006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (mState >= PREVIEW) { 7016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Preview size cannot be updated when preview " 7026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala "is active!", __FUNCTION__); 7036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availablePreviewSizes = 7066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES); 7076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availablePreviewSizes.count; i += 2 ) { 7086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availablePreviewSizes.data.i32[i] == previewWidth && 7096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala availablePreviewSizes.data.i32[i+1] == previewHeight) break; 7106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availablePreviewSizes.count) { 7126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested preview size %d x %d is not supported", 7136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, previewWidth, previewHeight); 7146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PREVIEW_FPS_RANGE 71911b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala int previewFpsRange[2]; 72011b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala int previewFps = 0; 7216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool fpsRangeChanged = false; 72211b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala newParams.getPreviewFpsRange(&previewFpsRange[0], &previewFpsRange[1]); 72311b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala if (previewFpsRange[0] != mParameters.previewFpsRange[0] || 72411b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala previewFpsRange[1] != mParameters.previewFpsRange[1]) { 7256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala fpsRangeChanged = true; 7266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availablePreviewFpsRanges = 7276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 2); 7286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availablePreviewFpsRanges.count; i += 2) { 7296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if ((availablePreviewFpsRanges.data.i32[i] == 73011b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala previewFpsRange[0]) && 7316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala (availablePreviewFpsRanges.data.i32[i+1] == 73211b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala previewFpsRange[1]) ) { 7336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala break; 7346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availablePreviewFpsRanges.count) { 7376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested preview FPS range %d - %d is not supported", 73811b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala __FUNCTION__, previewFpsRange[0], previewFpsRange[1]); 7396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 74111b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala previewFps = previewFpsRange[0]; 7426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PREVIEW_FORMAT 7456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int previewFormat = formatStringToEnum(newParams.getPreviewFormat()); 7466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (previewFormat != mParameters.previewFormat) { 7476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (mState >= PREVIEW) { 7486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Preview format cannot be updated when preview " 7496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala "is active!", __FUNCTION__); 7506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableFormats = 7536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_FORMATS); 7546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableFormats.count; i++) { 7556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availableFormats.data.i32[i] == previewFormat) break; 7566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableFormats.count) { 7586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested preview format %s (0x%x) is not supported", 7596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, newParams.getPreviewFormat(), previewFormat); 7606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PREVIEW_FRAME_RATE 7656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // Deprecated, only use if the preview fps range is unchanged this time. 7666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // The single-value FPS is the same as the minimum of the range. 7676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (!fpsRangeChanged) { 7686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFps = newParams.getPreviewFrameRate(); 7696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (previewFps != mParameters.previewFps) { 7706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableFrameRates = 7716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); 7726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableFrameRates.count; i+=2) { 7736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availableFrameRates.data.i32[i] == previewFps) break; 7746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableFrameRates.count) { 7766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested preview frame rate %d is not supported", 7776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, previewFps); 7786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 78011b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala previewFpsRange[0] = availableFrameRates.data.i32[i]; 78111b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala previewFpsRange[1] = availableFrameRates.data.i32[i+1]; 7826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PICTURE_SIZE 7866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int pictureWidth, pictureHeight; 7876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getPictureSize(&pictureWidth, &pictureHeight); 7886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (pictureWidth == mParameters.pictureWidth || 7896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala pictureHeight == mParameters.pictureHeight) { 7906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availablePictureSizes = 7916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_JPEG_SIZES); 7926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availablePictureSizes.count; i+=2) { 7936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availablePictureSizes.data.i32[i] == pictureWidth && 7946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala availablePictureSizes.data.i32[i+1] == pictureHeight) break; 7956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availablePictureSizes.count) { 7976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested picture size %d x %d is not supported", 7986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, pictureWidth, pictureHeight); 7996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // JPEG_THUMBNAIL_WIDTH/HEIGHT 80411b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala int jpegThumbSize[2]; 80511b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala jpegThumbSize[0] = 8066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH); 80711b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala jpegThumbSize[1] = 8086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT); 80911b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala if (jpegThumbSize[0] != mParameters.jpegThumbSize[0] || 81011b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala jpegThumbSize[1] != mParameters.jpegThumbSize[1]) { 8116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableJpegThumbSizes = 8126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES); 8136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableJpegThumbSizes.count; i+=2) { 81411b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala if (availableJpegThumbSizes.data.i32[i] == jpegThumbSize[0] && 81511b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala availableJpegThumbSizes.data.i32[i+1] == jpegThumbSize[1]) { 8166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala break; 8176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableJpegThumbSizes.count) { 8206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested JPEG thumbnail size %d x %d is not supported", 82111b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala __FUNCTION__, jpegThumbSize[0], jpegThumbSize[1]); 8226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // JPEG_THUMBNAIL_QUALITY 8276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int jpegThumbQuality = 8286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY); 8296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (jpegThumbQuality < 0 || jpegThumbQuality > 100) { 8306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested JPEG thumbnail quality %d is not supported", 8316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, jpegThumbQuality); 8326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // JPEG_QUALITY 8366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int jpegQuality = 8376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_QUALITY); 8386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (jpegQuality < 0 || jpegQuality > 100) { 8396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested JPEG quality %d is not supported", 8406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, jpegQuality); 8416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // ROTATION 8456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int jpegRotation = 8466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_ROTATION); 8476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (jpegRotation != 0 && 8486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegRotation != 90 && 8496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegRotation != 180 && 8506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegRotation != 270) { 8516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested picture rotation angle %d is not supported", 8526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, jpegRotation); 8536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // GPS 8576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool gpsEnabled = false; 85811b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala double gpsCoordinates[3] = {0,0,0}; 8596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int64_t gpsTimestamp = 0; 8606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala String8 gpsProcessingMethod; 8616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsLatStr = 8626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_LATITUDE); 8636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (gpsLatStr != NULL) { 8646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsLongStr = 8656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_LONGITUDE); 8666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsAltitudeStr = 8676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_ALTITUDE); 8686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsTimeStr = 8696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_TIMESTAMP); 8706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsProcMethodStr = 8716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_PROCESSING_METHOD); 8726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (gpsLongStr == NULL || 8736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsAltitudeStr == NULL || 8746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsTimeStr == NULL || 8756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsProcMethodStr == NULL) { 8766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Incomplete set of GPS parameters provided", 8776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__); 8786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala char *endPtr; 8816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 88211b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala gpsCoordinates[0] = strtod(gpsLatStr, &endPtr); 8836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || endPtr == gpsLatStr) { 8846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Malformed GPS latitude: %s", __FUNCTION__, gpsLatStr); 8856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 88811b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala gpsCoordinates[1] = strtod(gpsLongStr, &endPtr); 8896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || endPtr == gpsLongStr) { 8906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Malformed GPS longitude: %s", __FUNCTION__, gpsLongStr); 8916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 89411b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala gpsCoordinates[2] = strtod(gpsAltitudeStr, &endPtr); 8956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || endPtr == gpsAltitudeStr) { 8966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Malformed GPS altitude: %s", __FUNCTION__, 8976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsAltitudeStr); 8986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 9016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsTimestamp = strtoll(gpsTimeStr, &endPtr, 10); 9026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || endPtr == gpsTimeStr) { 9036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Malformed GPS timestamp: %s", __FUNCTION__, gpsTimeStr); 9046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsProcessingMethod = gpsProcMethodStr; 9076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsEnabled = true; 9096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // WHITE_BALANCE 9126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int wbMode = wbModeStringToEnum( 9136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_WHITE_BALANCE) ); 9146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (wbMode != mParameters.wbMode) { 9156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableWbModes = 9166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AWB_AVAILABLE_MODES); 9176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableWbModes.count; i++) { 9186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (wbMode == availableWbModes.data.u8[i]) break; 9196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableWbModes.count) { 9216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested white balance mode %s is not supported", 9226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 9236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_WHITE_BALANCE)); 9246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // EFFECT 9296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int effectMode = effectModeStringToEnum( 9306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_EFFECT) ); 9316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (effectMode != mParameters.effectMode) { 9326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableEffectModes = 9336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_EFFECTS); 9346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableEffectModes.count; i++) { 9356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (effectMode == availableEffectModes.data.u8[i]) break; 9366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableEffectModes.count) { 9386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested effect mode \"%s\" is not supported", 9396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 9406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_EFFECT) ); 9416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // ANTIBANDING 9466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int antibandingMode = abModeStringToEnum( 9476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_ANTIBANDING) ); 9486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (antibandingMode != mParameters.antibandingMode) { 9496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableAbModes = 9506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES); 9516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableAbModes.count; i++) { 9526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (antibandingMode == availableAbModes.data.u8[i]) break; 9536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableAbModes.count) { 9556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested antibanding mode \"%s\" is not supported", 9566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 9576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_ANTIBANDING)); 9586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // SCENE_MODE 9636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int sceneMode = sceneModeStringToEnum( 9646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_SCENE_MODE) ); 9656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (sceneMode != mParameters.sceneMode) { 9666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableSceneModes = 9676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_SCENE_MODES); 9686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableSceneModes.count; i++) { 9696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (sceneMode == availableSceneModes.data.u8[i]) break; 9706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableSceneModes.count) { 9726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested scene mode \"%s\" is not supported", 9736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 9746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_SCENE_MODE)); 9756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // FLASH_MODE 9806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::flashMode_t flashMode = flashModeStringToEnum( 9816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE) ); 9826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (flashMode != mParameters.flashMode) { 9836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t flashAvailable = 9846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_FLASH_AVAILABLE, 1, 1); 9856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (!flashAvailable.data.u8[0] && 9866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala flashMode != Parameters::FLASH_MODE_OFF) { 9876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested flash mode \"%s\" is not supported: " 9886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala "No flash on device", __FUNCTION__, 9896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE)); 9906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } else if (flashMode == Parameters::FLASH_MODE_RED_EYE) { 9926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableAeModes = 9936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_MODES); 9946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableAeModes.count; i++) { 9956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (flashMode == availableAeModes.data.u8[i]) break; 9966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableAeModes.count) { 9986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested flash mode \"%s\" is not supported", 9996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 10006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE)); 10016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } else if (flashMode == -1) { 10046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested flash mode \"%s\" is unknown", 10056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 10066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE)); 10076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // FOCUS_MODE 10126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::focusMode_t focusMode = focusModeStringToEnum( 10136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FOCUS_MODE)); 10146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (focusMode != mParameters.focusMode) { 10156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (focusMode != Parameters::FOCUS_MODE_FIXED) { 10166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t minFocusDistance = 10176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_LENS_MINIMUM_FOCUS_DISTANCE); 10186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (minFocusDistance.data.f[0] == 0) { 10196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested focus mode \"%s\" is not available: " 10206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala "fixed focus lens", 10216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 10226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FOCUS_MODE)); 10236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } else if (focusMode != Parameters::FOCUS_MODE_INFINITY) { 10256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableFocusModes = 10266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AF_AVAILABLE_MODES); 10276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableFocusModes.count; i++) { 10286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (focusMode == availableFocusModes.data.u8[i]) break; 10296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableFocusModes.count) { 10316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested focus mode \"%s\" is not supported", 10326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 10336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FOCUS_MODE)); 10346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // FOCUS_AREAS 10416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Vector<Parameters::Area> focusingAreas; 10426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala res = parseAreas(newParams.get(CameraParameters::KEY_FOCUS_AREAS), 10436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala &focusingAreas); 10446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala size_t max3aRegions = 10456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala (size_t)staticInfo(ANDROID_CONTROL_MAX_REGIONS, 1, 1).data.i32[0]; 10466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (res == OK) res = validateAreas(focusingAreas, max3aRegions); 10476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (res != OK) { 10486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested focus areas are malformed: %s", 10496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, newParams.get(CameraParameters::KEY_FOCUS_AREAS)); 10506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // EXPOSURE_COMPENSATION 10546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int exposureCompensation = 10556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION); 10566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t exposureCompensationRange = 10576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE); 10586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (exposureCompensation < exposureCompensationRange.data.i32[0] || 10596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala exposureCompensation > exposureCompensationRange.data.i32[1]) { 10606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested exposure compensation index is out of bounds: %d", 10616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, exposureCompensation); 10626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // AUTO_EXPOSURE_LOCK (always supported) 10666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool autoExposureLock = boolFromString( 10676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK)); 10686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // AUTO_WHITEBALANCE_LOCK (always supported) 10706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool autoWhiteBalanceLock = boolFromString( 10716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK)); 10726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // METERING_AREAS 10746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Vector<Parameters::Area> meteringAreas; 10756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala res = parseAreas(newParams.get(CameraParameters::KEY_METERING_AREAS), 10766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala &meteringAreas); 10776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (res == OK) res = validateAreas(focusingAreas, max3aRegions); 10786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (res != OK) { 10796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested metering areas are malformed: %s", 10806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 10816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_METERING_AREAS)); 10826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // ZOOM 10866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int zoom = newParams.getInt(CameraParameters::KEY_ZOOM); 10876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (zoom < 0 || zoom > (int)NUM_ZOOM_STEPS) { 10886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested zoom level %d is not supported", 10896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, zoom); 10906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // VIDEO_SIZE 10946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int videoWidth, videoHeight; 10956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getVideoSize(&videoWidth, &videoHeight); 10966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (videoWidth != mParameters.videoWidth || 10976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala videoHeight != mParameters.videoHeight) { 10986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (mState == RECORD) { 10996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Video size cannot be updated when recording is active!", 11006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__); 11016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 11026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableVideoSizes = 11046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES); 11056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableVideoSizes.count; i += 2 ) { 11066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availableVideoSizes.data.i32[i] == videoWidth && 11076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala availableVideoSizes.data.i32[i+1] == videoHeight) break; 11086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableVideoSizes.count) { 11106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested video size %d x %d is not supported", 11116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, videoWidth, videoHeight); 11126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 11136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // RECORDING_HINT (always supported) 11176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool recordingHint = boolFromString( 11186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_RECORDING_HINT) ); 11196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // VIDEO_STABILIZATION 11216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool videoStabilization = boolFromString( 11226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_VIDEO_STABILIZATION) ); 11236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableVideoStabilizationModes = 11246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES); 11256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (videoStabilization && availableVideoStabilizationModes.count == 1) { 11266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Video stabilization not supported", __FUNCTION__); 11276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala /** Update internal parameters */ 11306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewWidth = previewWidth; 11316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewHeight = previewHeight; 113211b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.previewFpsRange[0] = previewFpsRange[0]; 113311b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.previewFpsRange[1] = previewFpsRange[1]; 11346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewFps = previewFps; 11356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewFormat = previewFormat; 11366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.pictureWidth = pictureWidth; 11386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.pictureHeight = pictureHeight; 11396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 114011b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.jpegThumbSize[0] = jpegThumbSize[0]; 114111b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.jpegThumbSize[1] = jpegThumbSize[1]; 11426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.jpegQuality = jpegQuality; 11436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.jpegThumbQuality = jpegThumbQuality; 11446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsEnabled = gpsEnabled; 114611b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.gpsCoordinates[0] = gpsCoordinates[0]; 114711b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.gpsCoordinates[1] = gpsCoordinates[1]; 114811b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.gpsCoordinates[2] = gpsCoordinates[2]; 11496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsTimestamp = gpsTimestamp; 11506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsProcessingMethod = gpsProcessingMethod; 11516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.wbMode = wbMode; 11536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.effectMode = effectMode; 11546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.antibandingMode = antibandingMode; 11556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.sceneMode = sceneMode; 11566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.flashMode = flashMode; 11586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.focusMode = focusMode; 11596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.focusingAreas = focusingAreas; 11616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.exposureCompensation = exposureCompensation; 11626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.autoExposureLock = autoExposureLock; 11636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.autoWhiteBalanceLock = autoWhiteBalanceLock; 11646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.meteringAreas = meteringAreas; 11656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.zoom = zoom; 11666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.videoWidth = videoWidth; 11686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.videoHeight = videoHeight; 11696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.recordingHint = recordingHint; 11716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.videoStabilization = videoStabilization; 11726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 1173be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updatePreviewRequest(); 1174be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 1175be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Unable to update preview request: %s (%d)", 1176be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 1177be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 1178be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 1179be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateCaptureRequest(); 1180be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 1181be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Unable to update capture request: %s (%d)", 1182be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 1183be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 1184be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 1185be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 1186be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (mState == PREVIEW) { 1187be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = mDevice->setStreamingRequest(mPreviewRequest); 1188be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 1189be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Error streaming new preview request: %s (%d)", 1190be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 1191be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 1192be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 1193be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 11946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11956db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 119661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 1197f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 119861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaString8 Camera2Client::getParameters() const { 1199a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 1200ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 1201ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 1202ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock pl(mParamsLock); 1203ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 12043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala // TODO: Deal with focus distances 12053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala return mParamsFlattened; 120661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 120761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 120861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) { 1209a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 1210ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 12116db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 121261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 121361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 12143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala/** Device-related methods */ 12153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 1216d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvalavoid Camera2Client::onCaptureAvailable() { 1217d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ATRACE_CALL(); 1218d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala status_t res; 1219d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala sp<ICameraClient> currentClient; 1220d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala CpuConsumer::LockedBuffer imgBuffer; 1221d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala { 1222d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 1223d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1224d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // TODO: Signal errors here upstream 1225d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mState != STILL_CAPTURE && mState != VIDEO_SNAPSHOT) { 1226d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Still image produced unexpectedly!", 1227d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 1228d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return; 1229d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1230d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1231d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mCaptureConsumer->lockNextBuffer(&imgBuffer); 1232d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 1233d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Error receiving still image buffer: %s (%d)", 1234d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 1235d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return; 1236d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1237d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1238d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (imgBuffer.format != HAL_PIXEL_FORMAT_BLOB) { 1239d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unexpected format for still image: " 1240d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "%x, expected %x", __FUNCTION__, mCameraId, 1241d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala imgBuffer.format, 1242d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala HAL_PIXEL_FORMAT_BLOB); 1243d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureConsumer->unlockBuffer(imgBuffer); 1244d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return; 1245d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1246d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1247d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // TODO: Optimize this to avoid memcopy 1248d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala void* captureMemory = mCaptureHeap->getBase(); 1249d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala size_t size = mCaptureHeap->getSize(); 1250d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala memcpy(captureMemory, imgBuffer.data, size); 1251d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1252d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureConsumer->unlockBuffer(imgBuffer); 1253d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1254d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala currentClient = mCameraClient; 1255d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala switch (mState) { 1256d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case STILL_CAPTURE: 1257d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mState = STOPPED; 1258d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 1259d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case VIDEO_SNAPSHOT: 1260d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mState = RECORD; 1261d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 1262d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala default: 1263d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unexpected state %d", __FUNCTION__, 1264d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCameraId, mState); 1265d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 1266d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1267d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1268d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Call outside mICameraLock to allow re-entrancy from notification 1269d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (currentClient != 0) { 1270d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala currentClient->dataCallback(CAMERA_MSG_COMPRESSED_IMAGE, 1271d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureMemory, NULL); 1272d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1273d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala} 1274d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 12753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvalacamera_metadata_entry_t Camera2Client::staticInfo(uint32_t tag, 12763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala size_t minCount, size_t maxCount) { 12773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala status_t res; 12783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t entry; 12793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 12803cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala tag, 12813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala &entry); 12823cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (CC_UNLIKELY( res != OK )) { 12833cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagSection = get_camera_metadata_section_name(tag); 12843cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagSection == NULL) tagSection = "<unknown>"; 12853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagName = get_camera_metadata_tag_name(tag); 12863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagName == NULL) tagName = "<unknown>"; 12873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 12883cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGE("Error finding static metadata entry '%s.%s' (%x): %s (%d)", 12893cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala tagSection, tagName, tag, strerror(-res), res); 12903cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.count = 0; 12913cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.data.u8 = NULL; 12923cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } else if (CC_UNLIKELY( 12933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala (minCount != 0 && entry.count < minCount) || 12943cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala (maxCount != 0 && entry.count > maxCount) ) ) { 12953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagSection = get_camera_metadata_section_name(tag); 12963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagSection == NULL) tagSection = "<unknown>"; 12973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagName = get_camera_metadata_tag_name(tag); 12983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagName == NULL) tagName = "<unknown>"; 12993cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGE("Malformed static metadata entry '%s.%s' (%x):" 13003cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "Expected between %d and %d values, but got %d values", 13013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala tagSection, tagName, tag, minCount, maxCount, entry.count); 13023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.count = 0; 13033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.data.u8 = NULL; 13043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } 13053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 13063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala return entry; 13073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala} 13083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 13093cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala/** Utility methods */ 13103cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 1311f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1312f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::buildDefaultParameters() { 1313a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 1314ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock pl(mParamsLock); 1315ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 1316f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 13173cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters params; 1318f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 13193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableProcessedSizes = 13203cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 2); 13213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableProcessedSizes.count) return NO_INIT; 1322f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1323f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick more intelligently 13243cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewWidth = availableProcessedSizes.data.i32[0]; 13253cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewHeight = availableProcessedSizes.data.i32[1]; 13263cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.videoWidth = mParameters.previewWidth; 13273cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.videoHeight = mParameters.previewHeight; 13283cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 13293cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setPreviewSize(mParameters.previewWidth, mParameters.previewHeight); 13303cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setVideoSize(mParameters.videoWidth, mParameters.videoHeight); 13313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO, 13323cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8::format("%dx%d", 13333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewWidth, mParameters.previewHeight)); 1334f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1335f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewSizes; 1336f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableProcessedSizes.count; i += 2) { 1337f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewSizes += ","; 1338f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes += String8::format("%dx%d", 1339f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i], 1340f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i+1]); 1341f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 13423cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, 1343f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 13443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES, 1345f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 1346f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1347f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 13483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableFpsRanges = 13493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 2); 13503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableFpsRanges.count) return NO_INIT; 1351f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 135211b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.previewFpsRange[0] = availableFpsRanges.data.i32[0]; 135311b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.previewFpsRange[1] = availableFpsRanges.data.i32[1]; 1354f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 13553cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, 13563cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8::format("%d,%d", 135711b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.previewFpsRange[0], 135811b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.previewFpsRange[1])); 1359f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1360f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1361f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFpsRange; 1362f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 1363f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFpsRange += ","; 1364f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange += String8::format("(%d,%d)", 1365f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i], 1366f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i+1]); 1367f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 13683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, 1369f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange); 1370f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1371f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 13723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; 13733cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FORMAT, 13743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala formatEnumToString(mParameters.previewFormat)); // NV21 13753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 13763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableFormats = 13773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_FORMATS); 1378f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1379f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1380f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFormats; 1381f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 1382f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFormats.count; i++) { 1383f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedPreviewFormats += ","; 1384f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1385f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableFormats.data.i32[i]) { 1386f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: 1387bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1388bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV422SP; 1389f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1390f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: 1391bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1392bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV420SP; 1393f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1394f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: 1395bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1396bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV422I; 1397f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1398f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: 1399bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1400bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV420P; 1401f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1402f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: 1403bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1404bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_RGB565; 1405f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 140611b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala case HAL_PIXEL_FORMAT_RGBA_8888: 140711b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala supportedPreviewFormats += 140811b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala CameraParameters::PIXEL_FORMAT_RGBA8888; 140911b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala break; 141011b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala // Not advertizing JPEG, RAW_SENSOR, etc, for preview formats 1411f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 141211b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala case HAL_PIXEL_FORMAT_BLOB: 1413f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1414f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 141511b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala 1416f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1417f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown preview format: %x", 1418f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableFormats.data.i32[i]); 1419f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1420f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1421f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1422f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 14233cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS, 1424f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats); 1425f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1426f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1427f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // PREVIEW_FRAME_RATE / SUPPORTED_PREVIEW_FRAME_RATES are deprecated, but 1428f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // still have to do something sane for them 1429f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14303cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FRAME_RATE, 143111b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.previewFpsRange[0]); 1432f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1433f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1434f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFrameRates; 1435f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 1436f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFrameRates += ","; 1437f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates += String8::format("%d", 1438f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i]); 1439f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 14403cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES, 1441f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates); 1442f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1443f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableJpegSizes = 14453cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 2); 14463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableJpegSizes.count) return NO_INIT; 1447f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1448f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick maximum 14493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.pictureWidth = availableJpegSizes.data.i32[0]; 14503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.pictureHeight = availableJpegSizes.data.i32[1]; 1451f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14523cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setPictureSize(mParameters.pictureWidth, 14533cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.pictureHeight); 1454f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1455f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1456f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPictureSizes; 1457f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegSizes.count; i += 2) { 1458f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPictureSizes += ","; 1459f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes += String8::format("%dx%d", 1460f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i], 1461f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i+1]); 1462f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 14633cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, 1464f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes); 1465f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1466f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14673cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setPictureFormat(CameraParameters::PIXEL_FORMAT_JPEG); 14683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS, 14693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::PIXEL_FORMAT_JPEG); 1470f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableJpegThumbnailSizes = 14723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, 2); 14733cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableJpegThumbnailSizes.count) return NO_INIT; 1474f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1475f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick default thumbnail size sensibly 147611b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.jpegThumbSize[0] = availableJpegThumbnailSizes.data.i32[0]; 147711b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.jpegThumbSize[1] = availableJpegThumbnailSizes.data.i32[1]; 1478f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, 148011b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.jpegThumbSize[0]); 14813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, 148211b7cdef9726f8270f12f6c393600e8fb3c469deEino-Ville Talvala mParameters.jpegThumbSize[1]); 1483f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1484f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1485f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedJpegThumbSizes; 1486f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegThumbnailSizes.count; i += 2) { 1487f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedJpegThumbSizes += ","; 1488f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes += String8::format("%dx%d", 1489f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i], 1490f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i+1]); 1491f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 14923cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, 1493f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes); 1494f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1495f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbQuality = 90; 14973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, 14983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbQuality); 14993cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegQuality = 90; 15003cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_QUALITY, 15013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegQuality); 15023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegRotation = 0; 15033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ROTATION, 15043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegRotation); 15053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 15063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.gpsEnabled = false; 15073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.gpsProcessingMethod = "unknown"; 15083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala // GPS fields in CameraParameters are not set by implementation 15093cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 15103cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.wbMode = ANDROID_CONTROL_AWB_AUTO; 15113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_WHITE_BALANCE, 15123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::WHITE_BALANCE_AUTO); 15133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 15143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableWhiteBalanceModes = 15153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AWB_AVAILABLE_MODES); 1516f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1517f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedWhiteBalance; 1518f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 1519f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableWhiteBalanceModes.count; i++) { 1520f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedWhiteBalance += ","; 1521f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1522f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableWhiteBalanceModes.data.u8[i]) { 1523f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_AUTO: 1524bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1525bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_AUTO; 1526f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1527f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_INCANDESCENT: 1528bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1529bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_INCANDESCENT; 1530f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1531f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_FLUORESCENT: 1532bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1533bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_FLUORESCENT; 1534f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1535f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_WARM_FLUORESCENT: 1536bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1537bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_WARM_FLUORESCENT; 1538f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1539f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_DAYLIGHT: 1540bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1541bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_DAYLIGHT; 1542f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1543f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT: 1544bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1545bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT; 1546f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1547f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_TWILIGHT: 1548bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1549bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_TWILIGHT; 1550f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1551f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_SHADE: 1552bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1553bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_SHADE; 1554f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1555f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Skipping values not mappable to v1 API 1556f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_OFF: 1557f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1558f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1559f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1560f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown white balance value: %d", 1561f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 1562f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableWhiteBalanceModes.data.u8[i]); 1563f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1564f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1565f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1566f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 15673cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE, 1568f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance); 1569f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1570f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 15713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.effectMode = ANDROID_CONTROL_EFFECT_OFF; 15723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_EFFECT, 15733cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::EFFECT_NONE); 15743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 15753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableEffects = 15763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_EFFECTS); 15773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableEffects.count) return NO_INIT; 1578f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1579f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedEffects; 1580f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 1581f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableEffects.count; i++) { 1582f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedEffects += ","; 1583f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1584f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableEffects.data.u8[i]) { 1585f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_OFF: 1586bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1587bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_NONE; 1588f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1589f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_MONO: 1590bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1591bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_MONO; 1592bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala break; 1593f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_NEGATIVE: 1594bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1595bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_NEGATIVE; 1596f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1597f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SOLARIZE: 1598bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1599bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_SOLARIZE; 1600f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1601f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SEPIA: 1602bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1603bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_SEPIA; 1604f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1605f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_POSTERIZE: 1606bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1607bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_POSTERIZE; 1608f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1609f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_WHITEBOARD: 1610bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1611bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_WHITEBOARD; 1612f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1613f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_BLACKBOARD: 1614bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1615bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_BLACKBOARD; 1616f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1617f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_AQUA: 1618bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1619bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_AQUA; 1620f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1621f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1622f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown effect value: %d", 1623f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableEffects.data.u8[i]); 1624f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1625f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1626f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1627f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 16283cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_EFFECTS, supportedEffects); 1629f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1630f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.antibandingMode = ANDROID_CONTROL_AE_ANTIBANDING_AUTO; 16323cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ANTIBANDING, 16333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::ANTIBANDING_AUTO); 16343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 16353cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableAntibandingModes = 16363cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES); 16373cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableAntibandingModes.count) return NO_INIT; 1638f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1639f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedAntibanding; 1640f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 1641f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAntibandingModes.count; i++) { 1642f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedAntibanding += ","; 1643f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1644f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAntibandingModes.data.u8[i]) { 1645f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_OFF: 1646bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedAntibanding += 1647bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::ANTIBANDING_OFF; 1648f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1649f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_50HZ: 1650bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedAntibanding += 1651bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::ANTIBANDING_50HZ; 1652f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1653f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_60HZ: 1654bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedAntibanding += 1655bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::ANTIBANDING_60HZ; 1656f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1657f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_AUTO: 1658bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedAntibanding += 1659bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::ANTIBANDING_AUTO; 1660f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1661f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1662f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown antibanding value: %d", 1663f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 1664f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableAntibandingModes.data.u8[i]); 1665f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1666f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1667f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1668f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 16693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_ANTIBANDING, 1670f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding); 1671f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1672f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16733cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.sceneMode = ANDROID_CONTROL_OFF; 16743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SCENE_MODE, 16753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::SCENE_MODE_AUTO); 16763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 16773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableSceneModes = 16783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_SCENE_MODES); 16793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableSceneModes.count) return NO_INIT; 1680f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1681bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala String8 supportedSceneModes(CameraParameters::SCENE_MODE_AUTO); 1682f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 1683f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool noSceneModes = false; 1684f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableSceneModes.count; i++) { 1685f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedSceneModes += ","; 1686f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1687f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableSceneModes.data.u8[i]) { 1688f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED: 1689f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala noSceneModes = true; 1690f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1691f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY: 1692f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not in old API 1693f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1694f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1695f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_ACTION: 1696bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1697bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_ACTION; 1698f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1699f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PORTRAIT: 1700bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1701bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_PORTRAIT; 1702f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1703f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_LANDSCAPE: 1704bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1705bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_LANDSCAPE; 1706f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1707f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT: 1708bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1709bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_NIGHT; 1710f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1711f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT: 1712bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1713bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_NIGHT_PORTRAIT; 1714f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1715f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_THEATRE: 1716bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1717bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_THEATRE; 1718f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1719f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BEACH: 1720bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1721bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_BEACH; 1722f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1723f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SNOW: 1724bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1725bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_SNOW; 1726f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1727f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SUNSET: 1728bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1729bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_SUNSET; 1730f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1731f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO: 1732bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1733bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_STEADYPHOTO; 1734f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1735f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FIREWORKS: 1736bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1737bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_FIREWORKS; 1738f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1739f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SPORTS: 1740bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1741bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_SPORTS; 1742f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1743f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PARTY: 1744bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1745bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_PARTY; 1746f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1747f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT: 1748bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1749bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_CANDLELIGHT; 1750f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1751f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BARCODE: 1752bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1753bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_BARCODE; 1754f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1755f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1756f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown scene mode value: %d", 1757bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala __FUNCTION__, mCameraId, 1758bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala availableSceneModes.data.u8[i]); 1759f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1760f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1761f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1762f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1763f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (!noSceneModes) { 17643cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_SCENE_MODES, 1765f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes); 1766f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1767f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1768f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 17693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t flashAvailable = 17703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_FLASH_AVAILABLE, 1, 1); 17713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!flashAvailable.count) return NO_INIT; 1772f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 17733cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableAeModes = 17743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_MODES); 17753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableAeModes.count) return NO_INIT; 1776f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1777f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (flashAvailable.data.u8[0]) { 17783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.flashMode = Parameters::FLASH_MODE_AUTO; 17793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FLASH_MODE, 17803cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_AUTO); 17813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 17823cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8 supportedFlashModes(CameraParameters::FLASH_MODE_OFF); 17833cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala supportedFlashModes = supportedFlashModes + 17843cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_AUTO + 17853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_ON + 17863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_TORCH; 1787f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAeModes.count; i++) { 1788f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableAeModes.data.u8[i] == 1789f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_ON_AUTO_FLASH_REDEYE) { 17903cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala supportedFlashModes = supportedFlashModes + "," + 17913cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_RED_EYE; 1792f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1793f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1794f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 17953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 1796f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFlashModes); 17973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } else { 17983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.flashMode = Parameters::FLASH_MODE_OFF; 17993cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FLASH_MODE, 18003cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_OFF); 18013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 18023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_OFF); 1803f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1804f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t minFocusDistance = 18063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_LENS_MINIMUM_FOCUS_DISTANCE, 1, 1); 18073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!minFocusDistance.count) return NO_INIT; 18083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 18093cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableAfModes = 18103cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AF_AVAILABLE_MODES); 18113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableAfModes.count) return NO_INIT; 18123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 1813f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (minFocusDistance.data.f[0] == 0) { 1814f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Fixed-focus lens 18153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusMode = Parameters::FOCUS_MODE_FIXED; 18163cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_MODE, 18173cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_FIXED); 18183cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 18193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_FIXED); 1820f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 18213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusMode = Parameters::FOCUS_MODE_AUTO; 18223cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_MODE, 18233cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_AUTO); 18243cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8 supportedFocusModes(CameraParameters::FOCUS_MODE_FIXED); 18253cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala supportedFocusModes = supportedFocusModes + "," + 18263cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_INFINITY; 1827f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 1828bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala 1829f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAfModes.count; i++) { 1830f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedFocusModes += ","; 1831f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1832f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAfModes.data.u8[i]) { 1833f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_AUTO: 1834bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1835bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_AUTO; 1836f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1837f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_MACRO: 1838bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1839bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_MACRO; 1840f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1841f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_VIDEO: 1842bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1843bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO; 1844f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1845f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_PICTURE: 1846bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1847bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE; 1848f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1849f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_EDOF: 1850bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1851bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_EDOF; 1852f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1853bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala // Not supported in old API 1854f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_OFF: 1855f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1856f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1857f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1858f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown AF mode value: %d", 1859f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableAfModes.data.u8[i]); 1860f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1861f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1862f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1863f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 18643cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 1865f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes); 1866f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1867f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t max3aRegions = 18693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_MAX_REGIONS, 1, 1); 18703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!max3aRegions.count) return NO_INIT; 1871f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS, 1873f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 18743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_AREAS, 1875f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 18763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusingAreas.clear(); 18773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusingAreas.add(Parameters::Area(0,0,0,0,0)); 18783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 18793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableFocalLengths = 18803cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_LENS_AVAILABLE_FOCAL_LENGTHS); 18813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableFocalLengths.count) return NO_INIT; 1882f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1883f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float minFocalLength = availableFocalLengths.data.f[0]; 18843cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_FOCAL_LENGTH, minFocalLength); 1885f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t sensorSize = 18873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SENSOR_PHYSICAL_SIZE, 2, 2); 18883cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!sensorSize.count) return NO_INIT; 1889f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1890f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // The fields of view here assume infinity focus, maximum wide angle 1891f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float horizFov = 180 / M_PI * 1892f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[0] / (2 * minFocalLength)); 1893f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float vertFov = 180 / M_PI * 1894f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[1] / (2 * minFocalLength)); 18953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE, horizFov); 18963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_VERTICAL_VIEW_ANGLE, vertFov); 1897f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.exposureCompensation = 0; 18993cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_EXPOSURE_COMPENSATION, 19003cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.exposureCompensation); 1901f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t exposureCompensationRange = 19033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE, 2, 2); 19043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!exposureCompensationRange.count) return NO_INIT; 19053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 19063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION, 1907f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[1]); 19083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION, 1909f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[0]); 1910f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t exposureCompensationStep = 19123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_STEP, 1, 1); 19133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!exposureCompensationStep.count) return NO_INIT; 19143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 19153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP, 1916f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].numerator / 1917f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].denominator); 1918f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.autoExposureLock = false; 19203cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, 19213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 19223cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED, 19233cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1924f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19253cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.autoWhiteBalanceLock = false; 19263cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, 19273cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 19283cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED, 19293cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1930f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.meteringAreas.add(Parameters::Area(0, 0, 0, 0, 0)); 19323cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_METERING_AREAS, 1933f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 19343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_METERING_AREAS, 1935f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 1936f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19373cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.zoom = 0; 19383cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM, mParameters.zoom); 19393cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_ZOOM, NUM_ZOOM_STEPS - 1); 1940f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19413cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t maxDigitalZoom = 19423cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_MAX_ZOOM, 1, 1); 19433cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!maxDigitalZoom.count) return NO_INIT; 1944f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1945f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1946f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 zoomRatios; 1947f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoom = 1.f; 1948f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoomIncrement = (maxDigitalZoom.data.f[0] - zoom) / 19496db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala (NUM_ZOOM_STEPS-1); 1950f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 19516db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala for (size_t i=0; i < NUM_ZOOM_STEPS; i++) { 1952f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) zoomRatios += ","; 1953f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1954f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoomRatios += String8::format("%d", static_cast<int>(zoom * 100)); 1955f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoom += zoomIncrement; 1956f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 19573cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM_RATIOS, zoomRatios); 1958f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1959f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19603cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM_SUPPORTED, 19613cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 19623cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED, 19633cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1964f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19653cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_DISTANCES, 1966f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Infinity,Infinity,Infinity"); 1967f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t maxFacesDetected = 19693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_STATS_MAX_FACE_COUNT, 1, 1); 19703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW, 1971f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala maxFacesDetected.data.i32[0]); 19723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW, 1973f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 0); 1974f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_FRAME_FORMAT, 19763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala formatEnumToString(HAL_PIXEL_FORMAT_YCrCb_420_SP)); 1977f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_RECORDING_HINT, 19793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 1980f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED, 19823cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1983f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19843cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION, 19853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 19863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 19873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableVideoStabilizationModes = 19883cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES); 19893cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableVideoStabilizationModes.count) return NO_INIT; 1990f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1991f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableVideoStabilizationModes.count > 1) { 19923cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 19933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1994f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 19953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 19963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 1997f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1998f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19993cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParamsFlattened = params.flatten(); 20003cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 2001f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 2002f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 200361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 2004be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvalastatus_t Camera2Client::updatePreviewStream() { 2005be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ATRACE_CALL(); 2006be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala status_t res; 2007be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (mPreviewStreamId != NO_STREAM) { 2008be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala // Check if stream parameters have to change 2009be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala uint32_t currentWidth, currentHeight; 2010be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = mDevice->getStreamInfo(mPreviewStreamId, 2011be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ¤tWidth, ¤tHeight, 0); 2012be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 2013be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Error querying preview stream info: " 2014be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala "%s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 2015be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 2016be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2017be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (currentWidth != (uint32_t)mParameters.previewWidth || 2018be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala currentHeight != (uint32_t)mParameters.previewHeight) { 2019be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = mDevice->waitUntilDrained(); 2020be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 2021be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Error waiting for preview to drain: " 2022be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala "%s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 2023be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 2024be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2025be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = mDevice->deleteStream(mPreviewStreamId); 2026be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 2027be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Unable to delete old output stream " 2028be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala "for preview: %s (%d)", __FUNCTION__, mCameraId, 2029be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala strerror(-res), res); 2030be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 2031be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2032be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mPreviewStreamId = NO_STREAM; 2033be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2034be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2035be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2036be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (mPreviewStreamId == NO_STREAM) { 2037be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = mDevice->createStream(mPreviewWindow, 2038be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mParameters.previewWidth, mParameters.previewHeight, 2039be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala CAMERA2_HAL_PIXEL_FORMAT_OPAQUE, 0, 2040be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala &mPreviewStreamId); 2041be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 2042be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Unable to create preview stream: %s (%d)", 2043be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 2044be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 2045be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2046be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2047be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2048be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return OK; 2049be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala} 2050be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 20516db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::updatePreviewRequest() { 2052a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 20536db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 20546db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewRequest == NULL) { 20556db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->createDefaultRequest(CAMERA2_TEMPLATE_PREVIEW, 20566db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &mPreviewRequest); 20576db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 20586db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOGE("%s: Camera %d: Unable to create default preview request: " 20596db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala "%s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 20606db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 20616db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 20626db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2063be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2064be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateRequestCommon(mPreviewRequest); 2065be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 2066be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Unable to update common entries of preview " 2067be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala "request: %s (%d)", __FUNCTION__, mCameraId, 2068be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala strerror(-res), res); 2069be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 2070be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2071be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 20726db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 20736db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala} 20746db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2075d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvalastatus_t Camera2Client::updateCaptureStream() { 2076be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ATRACE_CALL(); 2077d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala status_t res; 2078d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Find out buffer size for JPEG 2079d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala camera_metadata_entry_t maxJpegSize = 2080d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala staticInfo(ANDROID_JPEG_MAX_SIZE); 2081d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (maxJpegSize.count == 0) { 2082d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Can't find ANDROID_JPEG_MAX_SIZE!", 2083d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 2084d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return INVALID_OPERATION; 2085d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2086d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 2087d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCaptureConsumer == 0) { 2088d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Create CPU buffer queue endpoint 2089d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureConsumer = new CpuConsumer(1); 2090d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureConsumer->setFrameAvailableListener(new CaptureWaiter(this)); 2091d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureConsumer->setName(String8("Camera2Client::CaptureConsumer")); 2092d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureWindow = new SurfaceTextureClient( 2093d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureConsumer->getProducerInterface()); 2094d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Create memory for API consumption 2095d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureHeap = new MemoryHeapBase(maxJpegSize.data.i32[0], 0, 2096d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "Camera2Client::CaptureHeap"); 2097d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCaptureHeap->getSize() == 0) { 2098d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to allocate memory for capture", 2099d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 2100d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return NO_MEMORY; 2101d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2102d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureMemory = new MemoryBase(mCaptureHeap, 2103d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 0, maxJpegSize.data.i32[0]); 2104d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2105d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 2106be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (mCaptureStreamId != NO_STREAM) { 2107d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Check if stream parameters have to change 2108d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala uint32_t currentWidth, currentHeight; 2109d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mDevice->getStreamInfo(mCaptureStreamId, 2110d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ¤tWidth, ¤tHeight, 0); 2111d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 2112d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Error querying capture output stream info: " 2113d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "%s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 2114d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 2115d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2116d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (currentWidth != (uint32_t)mParameters.pictureWidth || 2117d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala currentHeight != (uint32_t)mParameters.pictureHeight) { 2118d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mDevice->deleteStream(mCaptureStreamId); 2119d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 2120d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to delete old output stream " 2121d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "for capture: %s (%d)", __FUNCTION__, mCameraId, 2122d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala strerror(-res), res); 2123d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 2124d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2125d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureStreamId = NO_STREAM; 2126d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2127d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2128be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2129be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (mCaptureStreamId == NO_STREAM) { 2130be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala // Create stream for HAL production 2131be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = mDevice->createStream(mCaptureWindow, 2132be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mParameters.pictureWidth, mParameters.pictureHeight, 2133be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala HAL_PIXEL_FORMAT_BLOB, maxJpegSize.data.i32[0], 2134be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala &mCaptureStreamId); 2135be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 2136be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Can't create output stream for capture: " 2137be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala "%s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 2138be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 2139be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2140be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2141be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2142d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return OK; 2143d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala} 2144be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2145d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvalastatus_t Camera2Client::updateCaptureRequest() { 2146d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ATRACE_CALL(); 2147d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala status_t res; 2148d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCaptureRequest == NULL) { 2149d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mDevice->createDefaultRequest(CAMERA2_TEMPLATE_STILL_CAPTURE, 2150d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala &mCaptureRequest); 2151d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 2152d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to create default still image request:" 2153d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala " %s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 2154d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 2155d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2156d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2157be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2158be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateRequestCommon(mCaptureRequest); 2159be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 2160be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Unable to update common entries of capture " 2161be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala "request: %s (%d)", __FUNCTION__, mCameraId, 2162be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala strerror(-res), res); 2163be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 2164be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2165be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2166be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(mCaptureRequest, 2167be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_JPEG_THUMBNAIL_SIZE, 2168be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mParameters.jpegThumbSize, 2); 2169be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2170be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(mCaptureRequest, 2171be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_JPEG_THUMBNAIL_QUALITY, 2172be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala &mParameters.jpegThumbQuality, 1); 2173be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2174be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(mCaptureRequest, 2175be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_JPEG_QUALITY, 2176be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala &mParameters.jpegQuality, 1); 2177be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2178be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(mCaptureRequest, 2179be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_JPEG_ORIENTATION, 2180be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala &mParameters.jpegRotation, 1); 2181be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2182be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2183be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (mParameters.gpsEnabled) { 2184be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(mCaptureRequest, 2185be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_JPEG_GPS_COORDINATES, 2186be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mParameters.gpsCoordinates, 3); 2187be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2188be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(mCaptureRequest, 2189be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_JPEG_GPS_TIMESTAMP, 2190be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala &mParameters.gpsTimestamp, 1); 2191be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2192be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(mCaptureRequest, 2193be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_JPEG_GPS_PROCESSING_METHOD, 2194be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mParameters.gpsProcessingMethod.string(), 2195be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mParameters.gpsProcessingMethod.size()); 2196be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2197be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } else { 2198be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = deleteEntry(mCaptureRequest, 2199be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_JPEG_GPS_COORDINATES); 2200be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2201be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = deleteEntry(mCaptureRequest, 2202be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_JPEG_GPS_TIMESTAMP); 2203be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2204be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = deleteEntry(mCaptureRequest, 2205be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_JPEG_GPS_PROCESSING_METHOD); 2206be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2207be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2208be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2209d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return OK; 2210d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala} 2211d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 2212be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvalastatus_t Camera2Client::updateRequestCommon(camera_metadata_t *request) { 2213be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ATRACE_CALL(); 2214be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala status_t res; 2215be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2216be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_AE_TARGET_FPS_RANGE, mParameters.previewFpsRange, 2); 2217be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2218be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2219be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala uint8_t wbMode = mParameters.autoWhiteBalanceLock ? 2220be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_AWB_LOCKED : mParameters.wbMode; 2221be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2222be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_AWB_MODE, &wbMode, 1); 2223be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2224be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2225be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_EFFECT_MODE, &mParameters.effectMode, 1); 2226be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2227be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2228be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_MODE, 2229be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala &mParameters.antibandingMode, 1); 2230be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2231be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2232be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala uint8_t controlMode = 2233be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala (mParameters.sceneMode == ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED) ? 2234be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_AUTO : ANDROID_CONTROL_USE_SCENE_MODE; 2235be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2236be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_MODE, &controlMode, 1); 2237be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2238be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (controlMode == ANDROID_CONTROL_USE_SCENE_MODE) { 2239be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2240be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_SCENE_MODE, 2241be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala &mParameters.sceneMode, 1); 2242be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2243be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2244be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2245be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala uint8_t flashMode = ANDROID_FLASH_OFF; 2246be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala uint8_t aeMode; 2247be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala switch (mParameters.flashMode) { 2248be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala case Parameters::FLASH_MODE_OFF: 2249be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala aeMode = ANDROID_CONTROL_AE_ON; break; 2250be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala case Parameters::FLASH_MODE_AUTO: 2251be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala aeMode = ANDROID_CONTROL_AE_ON_AUTO_FLASH; break; 2252be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala case Parameters::FLASH_MODE_ON: 2253be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala aeMode = ANDROID_CONTROL_AE_ON_ALWAYS_FLASH; break; 2254be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala case Parameters::FLASH_MODE_TORCH: 2255be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala aeMode = ANDROID_CONTROL_AE_ON; 2256be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala flashMode = ANDROID_FLASH_TORCH; 2257be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala break; 2258be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala case Parameters::FLASH_MODE_RED_EYE: 2259be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala aeMode = ANDROID_CONTROL_AE_ON_AUTO_FLASH_REDEYE; break; 2260be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala default: 2261be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Unknown flash mode %d", __FUNCTION__, 2262be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mCameraId, mParameters.flashMode); 2263be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return BAD_VALUE; 2264be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2265be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (mParameters.autoExposureLock) aeMode = ANDROID_CONTROL_AE_LOCKED; 2266be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2267be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2268be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_FLASH_MODE, &flashMode, 1); 2269be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2270be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2271be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_AE_MODE, &aeMode, 1); 2272be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2273be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2274be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala float focusDistance = 0; // infinity focus in diopters 2275be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala uint8_t focusMode; 2276be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala switch (mParameters.focusMode) { 2277be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala case Parameters::FOCUS_MODE_AUTO: 2278be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala case Parameters::FOCUS_MODE_MACRO: 2279be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala case Parameters::FOCUS_MODE_CONTINUOUS_VIDEO: 2280be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala case Parameters::FOCUS_MODE_CONTINUOUS_PICTURE: 2281be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala case Parameters::FOCUS_MODE_EDOF: 2282be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala focusMode = mParameters.focusMode; 2283be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala break; 2284be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala case Parameters::FOCUS_MODE_INFINITY: 2285be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala case Parameters::FOCUS_MODE_FIXED: 2286be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala focusMode = ANDROID_CONTROL_AF_OFF; 2287be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala break; 2288be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala default: 2289be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Camera %d: Unknown focus mode %d", __FUNCTION__, 2290be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mCameraId, mParameters.focusMode); 2291be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return BAD_VALUE; 2292be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2293be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2294be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_LENS_FOCUS_DISTANCE, &focusDistance, 1); 2295be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2296be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2297be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_AF_MODE, &focusMode, 1); 2298be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2299be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2300be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala size_t focusingAreasSize = mParameters.focusingAreas.size() * 5; 2301be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala int32_t *focusingAreas = new int32_t[focusingAreasSize]; 2302be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala for (size_t i = 0; i < focusingAreasSize; i += 5) { 2303be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala focusingAreas[i + 0] = mParameters.focusingAreas[i].left; 2304be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala focusingAreas[i + 1] = mParameters.focusingAreas[i].top; 2305be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala focusingAreas[i + 2] = mParameters.focusingAreas[i].right; 2306be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala focusingAreas[i + 3] = mParameters.focusingAreas[i].bottom; 2307be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala focusingAreas[i + 4] = mParameters.focusingAreas[i].weight; 2308be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2309be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2310be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_AF_REGIONS, focusingAreas,focusingAreasSize); 2311be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2312be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala delete[] focusingAreas; 2313be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2314be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2315be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_AE_EXP_COMPENSATION, 2316be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala &mParameters.exposureCompensation, 1); 2317be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2318be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2319be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala size_t meteringAreasSize = mParameters.meteringAreas.size() * 5; 2320be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala int32_t *meteringAreas = new int32_t[meteringAreasSize]; 2321be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala for (size_t i = 0; i < meteringAreasSize; i += 5) { 2322be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala meteringAreas[i + 0] = mParameters.meteringAreas[i].left; 2323be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala meteringAreas[i + 1] = mParameters.meteringAreas[i].top; 2324be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala meteringAreas[i + 2] = mParameters.meteringAreas[i].right; 2325be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala meteringAreas[i + 3] = mParameters.meteringAreas[i].bottom; 2326be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala meteringAreas[i + 4] = mParameters.meteringAreas[i].weight; 2327be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2328be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2329be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_AE_REGIONS, meteringAreas, meteringAreasSize); 2330be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2331be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2332be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2333be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_AWB_REGIONS, meteringAreas, meteringAreasSize); 2334be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2335be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala delete[] meteringAreas; 2336be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2337be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala // Need to convert zoom index into a crop rectangle. The rectangle is 2338be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala // chosen to maximize its area on the sensor 2339be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2340be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala camera_metadata_entry_t maxDigitalZoom = 2341be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_MAX_ZOOM); 2342be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala float zoomIncrement = (maxDigitalZoom.data.f[0] - 1) / 2343be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala (NUM_ZOOM_STEPS-1); 2344be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala float zoomRatio = 1 + zoomIncrement * mParameters.zoom; 2345be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2346be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala camera_metadata_entry_t activePixelArraySize = 2347be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala staticInfo(ANDROID_SENSOR_ACTIVE_ARRAY_SIZE, 2, 2); 2348be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala int32_t arrayWidth = activePixelArraySize.data.i32[0]; 2349be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala int32_t arrayHeight = activePixelArraySize.data.i32[1]; 2350be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala float zoomLeft, zoomTop, zoomWidth, zoomHeight; 2351be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (mParameters.previewWidth >= mParameters.previewHeight) { 2352be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala zoomWidth = arrayWidth / zoomRatio; 2353be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala zoomHeight = zoomWidth * 2354be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mParameters.previewHeight / mParameters.previewWidth; 2355be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } else { 2356be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala zoomHeight = arrayHeight / zoomRatio; 2357be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala zoomWidth = zoomHeight * 2358be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala mParameters.previewWidth / mParameters.previewHeight; 2359be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2360be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala zoomLeft = (arrayWidth - zoomWidth) / 2; 2361be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala zoomTop = (arrayHeight - zoomHeight) / 2; 2362be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2363be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala int32_t cropRegion[3] = { zoomLeft, zoomTop, zoomWidth }; 2364be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2365be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_SCALER_CROP_REGION, cropRegion, 3); 2366be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2367be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2368be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala // TODO: Decide how to map recordingHint, or whether just to ignore it 2369be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2370be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala uint8_t vstabMode = mParameters.videoStabilization ? 2371be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_VIDEO_STABILIZATION_ON : 2372be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_VIDEO_STABILIZATION_OFF; 2373be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = updateEntry(request, 2374be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ANDROID_CONTROL_VIDEO_STABILIZATION_MODE, 2375be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala &vstabMode, 1); 2376be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) return res; 2377be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2378be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return OK; 2379be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala} 2380be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2381be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvalastatus_t Camera2Client::updateEntry(camera_metadata_t *buffer, 2382be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala uint32_t tag, const void *data, size_t data_count) { 2383be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala camera_metadata_entry_t entry; 2384be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala status_t res; 2385be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = find_camera_metadata_entry(buffer, tag, &entry); 2386be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res == NAME_NOT_FOUND) { 2387be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = add_camera_metadata_entry(buffer, 2388be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala tag, data, data_count); 2389be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } else if (res == OK) { 2390be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = update_camera_metadata_entry(buffer, 2391be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala entry.index, data, data_count, NULL); 2392be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2393be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2394be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 2395be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Unable to update metadata entry %s.%s (%x): %s (%d)", 2396be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, get_camera_metadata_section_name(tag), 2397be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala get_camera_metadata_tag_name(tag), tag, strerror(-res), res); 2398be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2399be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 2400be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala} 2401be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala 2402be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvalastatus_t Camera2Client::deleteEntry(camera_metadata_t *buffer, uint32_t tag) { 2403be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala camera_metadata_entry_t entry; 2404be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala status_t res; 2405be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = find_camera_metadata_entry(buffer, tag, &entry); 2406be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res == NAME_NOT_FOUND) { 2407be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return OK; 2408be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } else if (res != OK) { 2409be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Error looking for entry %s.%s (%x): %s %d", 2410be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, 2411be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala get_camera_metadata_section_name(tag), 2412be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala get_camera_metadata_tag_name(tag), tag, strerror(-res), res); 2413be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 2414be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2415be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala res = delete_camera_metadata_entry(buffer, entry.index); 2416be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala if (res != OK) { 2417be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala ALOGE("%s: Error deleting entry %s.%s (%x): %s %d", 2418be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala __FUNCTION__, 2419be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala get_camera_metadata_section_name(tag), 2420be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala get_camera_metadata_tag_name(tag), tag, strerror(-res), res); 2421be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala } 2422be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala return res; 2423be0573b93e2d6fa133579c885583af9ed16bc29dEino-Ville Talvala} 24246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::formatStringToEnum(const char *format) { 24256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 24266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV422SP) ? 24276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_YCbCr_422_SP : // NV16 24286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV420SP) ? 24296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_YCrCb_420_SP : // NV21 24306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV422I) ? 24316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_YCbCr_422_I : // YUY2 24326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV420P) ? 24336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_YV12 : // YV12 24346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_RGB565) ? 24356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_RGB_565 : // RGB565 24366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_RGBA8888) ? 24376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_RGBA_8888 : // RGB8888 24386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_BAYER_RGGB) ? 24396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_RAW_SENSOR : // Raw sensor data 24406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 24416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 24426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 24433cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvalaconst char* Camera2Client::formatEnumToString(int format) { 24443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char *fmt; 24453cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala switch(format) { 24463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: // NV16 24473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV422SP; 24483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 24493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: // NV21 24503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV420SP; 24513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 24523cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: // YUY2 24533cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV422I; 24543cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 24553cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: // YV12 24563cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV420P; 24573cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 24583cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: // RGB565 24593cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_RGB565; 24603cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 24613cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGBA_8888: // RGBA8888 24623cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_RGBA8888; 24633cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 24643cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 24653cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGW("Raw sensor preview format requested."); 24663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_BAYER_RGGB; 24673cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 24683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala default: 24693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGE("%s: Unknown preview format: %x", 24703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala __FUNCTION__, format); 24713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = NULL; 24723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 24733cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } 24743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala return fmt; 24753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala} 24766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 24776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::wbModeStringToEnum(const char *wbMode) { 24786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 24796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_AUTO) ? 24806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_AUTO : 24816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_INCANDESCENT) ? 24826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_INCANDESCENT : 24836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_FLUORESCENT) ? 24846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_FLUORESCENT : 24856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_WARM_FLUORESCENT) ? 24866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_WARM_FLUORESCENT : 24876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_DAYLIGHT) ? 24886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_DAYLIGHT : 24896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT) ? 24906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT : 24916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_TWILIGHT) ? 24926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_TWILIGHT : 24936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_SHADE) ? 24946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_SHADE : 24956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 24966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 24976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 24986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::effectModeStringToEnum(const char *effectMode) { 24996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 25006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_NONE) ? 25016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_OFF : 25026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_MONO) ? 25036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_MONO : 25046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_NEGATIVE) ? 25056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_NEGATIVE : 25066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_SOLARIZE) ? 25076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_SOLARIZE : 25086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_SEPIA) ? 25096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_SEPIA : 25106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_POSTERIZE) ? 25116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_POSTERIZE : 25126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_WHITEBOARD) ? 25136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_WHITEBOARD : 25146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_BLACKBOARD) ? 25156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_BLACKBOARD : 25166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_AQUA) ? 25176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_AQUA : 25186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 25196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 25206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 25216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::abModeStringToEnum(const char *abMode) { 25226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 25236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_AUTO) ? 25246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_AUTO : 25256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_OFF) ? 25266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_OFF : 25276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_50HZ) ? 25286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_50HZ : 25296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_60HZ) ? 25306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_60HZ : 25316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 25326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 25336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 25346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::sceneModeStringToEnum(const char *sceneMode) { 25356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 25366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_AUTO) ? 25376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED : 25386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_ACTION) ? 25396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_ACTION : 25406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_PORTRAIT) ? 25416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_PORTRAIT : 25426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_LANDSCAPE) ? 25436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_LANDSCAPE : 25446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_NIGHT) ? 25456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_NIGHT : 25466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_NIGHT_PORTRAIT) ? 25476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT : 25486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_THEATRE) ? 25496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_THEATRE : 25506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_BEACH) ? 25516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_BEACH : 25526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_SNOW) ? 25536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_SNOW : 25546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_SUNSET) ? 25556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_SUNSET : 25566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_STEADYPHOTO) ? 25576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO : 25586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_FIREWORKS) ? 25596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_FIREWORKS : 25606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_SPORTS) ? 25616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_SPORTS : 25626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_PARTY) ? 25636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_PARTY : 25646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_CANDLELIGHT) ? 25656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT : 25666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_BARCODE) ? 25676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_BARCODE: 25686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 25696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 25706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 25716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville TalvalaCamera2Client::Parameters::flashMode_t Camera2Client::flashModeStringToEnum( 25726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *flashMode) { 25736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 25746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_OFF) ? 25756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_OFF : 25766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_AUTO) ? 25776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_AUTO : 25786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_ON) ? 25796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_ON : 25806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_RED_EYE) ? 25816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_RED_EYE : 25826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_TORCH) ? 25836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_TORCH : 25846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_INVALID; 25856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 25866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 25876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville TalvalaCamera2Client::Parameters::focusMode_t Camera2Client::focusModeStringToEnum( 25886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *focusMode) { 25896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 25906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_AUTO) ? 25916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_AUTO : 25926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_INFINITY) ? 25936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_INFINITY : 25946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_MACRO) ? 25956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_MACRO : 25966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_FIXED) ? 25976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_FIXED : 25986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_EDOF) ? 25996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_EDOF : 26006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO) ? 26016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_CONTINUOUS_VIDEO : 26026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE) ? 26036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_CONTINUOUS_PICTURE : 26046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_INVALID; 26056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 26066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 26076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalastatus_t Camera2Client::parseAreas(const char *areasCStr, 26086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Vector<Parameters::Area> *areas) { 26096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala static const size_t NUM_FIELDS = 5; 26106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas->clear(); 26116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areasCStr == NULL) { 26126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // If no key exists, use default (0,0,0,0,0) 26136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas->push(); 26146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return OK; 26156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 26166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala String8 areasStr(areasCStr); 26176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ssize_t areaStart = areasStr.find("(", 0) + 1; 26186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala while (areaStart != 0) { 26196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char* area = areasStr.string() + areaStart; 26206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala char *numEnd; 26216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int vals[NUM_FIELDS]; 26226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (size_t i = 0; i < NUM_FIELDS; i++) { 26236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 26246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala vals[i] = strtol(area, &numEnd, 10); 26256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || numEnd == area) return BAD_VALUE; 26266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala area = numEnd + 1; 26276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 26286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas->push(Parameters::Area( 26296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala vals[0], vals[1], vals[2], vals[3], vals[4]) ); 26306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areaStart = areasStr.find("(", areaStart) + 1; 26316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 26326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return OK; 26336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 26346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 26356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalastatus_t Camera2Client::validateAreas(const Vector<Parameters::Area> &areas, 26366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala size_t maxRegions) { 26376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // Definition of valid area can be found in 26386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // include/camera/CameraParameters.h 26396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areas.size() == 0) return BAD_VALUE; 26406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areas.size() == 1) { 26416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areas[0].left == 0 && 26426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas[0].top == 0 && 26436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas[0].right == 0 && 26446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas[0].bottom == 0 && 26456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas[0].weight == 0) { 26466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // Single (0,0,0,0,0) entry is always valid (== driver decides) 26476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return OK; 26486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 26496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 26506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areas.size() > maxRegions) { 26516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Too many areas requested: %d", 26526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, areas.size()); 26536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 26546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 26556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 26566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (Vector<Parameters::Area>::const_iterator a = areas.begin(); 26576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala a != areas.end(); a++) { 26586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->weight < 1 || a->weight > 1000) return BAD_VALUE; 26596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->left < -1000 || a->left > 1000) return BAD_VALUE; 26606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->top < -1000 || a->top > 1000) return BAD_VALUE; 26616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->right < -1000 || a->right > 1000) return BAD_VALUE; 26626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->bottom < -1000 || a->bottom > 1000) return BAD_VALUE; 26636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->left >= a->right) return BAD_VALUE; 26646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->top >= a->bottom) return BAD_VALUE; 26656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 26666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return OK; 26676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 26686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 26696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalabool Camera2Client::boolFromString(const char *boolStr) { 26706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return !boolStr ? false : 26716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(boolStr, CameraParameters::TRUE) ? true : 26726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala false; 26736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 26746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 26756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 267661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} // namespace android 2677