Camera2Client.cpp revision bd47b7bcfe7f5a97fef81143f4282c41590626fe
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), 556db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mPreviewStreamId(NO_PREVIEW_STREAM), 566db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mPreviewRequest(NULL) 57f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 58a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 5961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 60f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDevice = new Camera2Device(cameraId); 61f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 62f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 63f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::initialize(camera_module_t *module) 64f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 65a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 66f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 67f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 68f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = mDevice->initialize(module); 69f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) { 70f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: unable to initialize device: %s (%d)", 71f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 72f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 73f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 74f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 75f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = buildDefaultParameters(); 76f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) { 77f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: unable to build defaults: %s (%d)", 78f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 79f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 80f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 82f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (gLogLevel >= 1) { 83f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGD("%s: Default parameters converted from camera %d:", __FUNCTION__, 84f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mCameraId); 853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGD("%s", mParamsFlattened.string()); 86f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 87f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 886db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 896db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 90f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 9161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 9261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 9361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaCamera2Client::~Camera2Client() { 94a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 95f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDestructionStarted = true; 96f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 97f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala disconnect(); 983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 9961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 10061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 10161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::dump(int fd, const Vector<String16>& args) { 102611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala String8 result; 103611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala result.appendFormat("Client2[%d] (%p) PID: %d:\n", 104611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala mCameraId, 105611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala getCameraClient()->asBinder().get(), 106611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala mClientPid); 1077f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" State: "); 1087f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala#define CASE_APPEND_ENUM(x) case x: result.append(#x "\n"); break; 1097f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1107f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mState) { 1117f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(NOT_INITIALIZED) 1127f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(STOPPED) 1137f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(WAITING_FOR_PREVIEW_WINDOW) 1147f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(PREVIEW) 1157f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(RECORD) 1167f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(STILL_CAPTURE) 1177f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); break; 1187f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1197f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1207f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Current parameters:\n"); 1217f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Preview size: %d x %d\n", 1227f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.previewWidth, mParameters.previewHeight); 1237f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Preview FPS range: %d - %d\n", 1247f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.previewFpsRangeMin, mParameters.previewFpsRangeMax); 1257f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Preview HAL pixel format: 0x%x\n", 1267f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.previewFormat); 1277f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Picture size: %d x %d\n", 1287f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.pictureWidth, mParameters.pictureHeight); 1297f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Jpeg thumbnail size: %d x %d\n", 1307f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.jpegThumbWidth, mParameters.jpegThumbHeight); 1317f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Jpeg quality: %d, thumbnail quality: %d\n", 1327f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.jpegQuality, mParameters.jpegThumbQuality); 1337f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Jpeg rotation: %d\n", mParameters.jpegRotation); 1347f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" GPS tags %s\n", 1357f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsEnabled ? "enabled" : "disabled"); 1367f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala if (mParameters.gpsEnabled) { 1377f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" GPS lat x long x alt: %f x %f x %f\n", 1387f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsLatitude, mParameters.gpsLongitude, 1397f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsAltitude); 1407f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" GPS timestamp: %lld\n", 1417f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsTimestamp); 1427f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" GPS processing method: %s\n", 1437f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsProcessingMethod.string()); 1447f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1457f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1467f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" White balance mode: "); 1477f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.wbMode) { 1487f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_AUTO) 1497f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_INCANDESCENT) 1507f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_FLUORESCENT) 1517f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_WARM_FLUORESCENT) 1527f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_DAYLIGHT) 1537f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT) 1547f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_TWILIGHT) 1557f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_SHADE) 1567f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 1577f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1587f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1597f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Effect mode: "); 1607f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.effectMode) { 1617f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_OFF) 1627f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_MONO) 1637f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_NEGATIVE) 1647f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_SOLARIZE) 1657f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_SEPIA) 1667f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_POSTERIZE) 1677f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_WHITEBOARD) 1687f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_BLACKBOARD) 1697f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_AQUA) 1707f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 1717f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1727f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1737f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Antibanding mode: "); 1747f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.antibandingMode) { 1757f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AE_ANTIBANDING_AUTO) 1767f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AE_ANTIBANDING_OFF) 1777f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AE_ANTIBANDING_50HZ) 1787f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AE_ANTIBANDING_60HZ) 1797f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 1807f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1817f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1827f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Scene mode: "); 1837f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.sceneMode) { 1847f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED: 1857f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append("AUTO\n"); break; 1867f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_ACTION) 1877f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_PORTRAIT) 1887f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_LANDSCAPE) 1897f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_NIGHT) 1907f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT) 1917f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_THEATRE) 1927f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_BEACH) 1937f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_SNOW) 1947f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_SUNSET) 1957f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO) 1967f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_FIREWORKS) 1977f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_SPORTS) 1987f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_PARTY) 1997f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT) 2007f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_BARCODE) 2017f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 2027f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2037f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2047f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Flash mode: "); 2057f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.flashMode) { 2067f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_OFF) 2077f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_AUTO) 2087f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_ON) 2097f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_TORCH) 2107f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_RED_EYE) 2117f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_INVALID) 2127f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 2137f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2147f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2157f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Focus mode: "); 2167f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.focusMode) { 2177f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_AUTO) 2187f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_MACRO) 2197f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_CONTINUOUS_VIDEO) 2207f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_CONTINUOUS_PICTURE) 2217f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_EDOF) 2227f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_INFINITY) 2237f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_FIXED) 2247f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_INVALID) 2257f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 2267f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2277f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2287f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Focusing areas:\n"); 2297f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala for (size_t i = 0; i < mParameters.focusingAreas.size(); i++) { 2307f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" [ (%d, %d, %d, %d), weight %d ]\n", 2317f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].left, 2327f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].top, 2337f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].right, 2347f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].bottom, 2357f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].weight); 2367f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2377f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2387f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Exposure compensation index: %d\n", 2397f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.exposureCompensation); 2407f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2417f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" AE lock %s, AWB lock %s\n", 2427f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.autoExposureLock ? "enabled" : "disabled", 2437f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.autoWhiteBalanceLock ? "enabled" : "disabled" ); 2447f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2457f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Metering areas:\n"); 2467f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala for (size_t i = 0; i < mParameters.meteringAreas.size(); i++) { 2477f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" [ (%d, %d, %d, %d), weight %d ]\n", 2487f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].left, 2497f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].top, 2507f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].right, 2517f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].bottom, 2527f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].weight); 2537f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2547f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2557f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Zoom index: %d\n", mParameters.zoom); 2567f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Video size: %d x %d\n", mParameters.videoWidth, 2577f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.videoHeight); 2587f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2597f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Recording hint is %s\n", 2607f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.recordingHint ? "set" : "not set"); 2617f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2627f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Video stabilization is %s\n", 2637f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.videoStabilization ? "enabled" : "disabled"); 2647f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 265611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala write(fd, result.string(), result.size()); 2667f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2677f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala // TODO: Dump Camera2Device 2687f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2697f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala#undef CASE_APPEND_ENUM 270611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala return NO_ERROR; 27161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 27261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 27361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala// ICamera interface 27461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 27561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::disconnect() { 276a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 277ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 278ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 279f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (mDevice == 0) return; 280f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 281ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala stopPreviewLocked(); 2826db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2836db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewStreamId != NO_PREVIEW_STREAM) { 2846db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mDevice->deleteStream(mPreviewStreamId); 2856db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mPreviewStreamId = NO_PREVIEW_STREAM; 2866db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 287f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 28861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala CameraService::Client::disconnect(); 28961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 29061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 29161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::connect(const sp<ICameraClient>& client) { 292a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 293ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 294ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 29561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 29661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 29761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 29861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::lock() { 299a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 300ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 301ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 30261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 30361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 30461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 30561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::unlock() { 306a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 307ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 308ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 30961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 31061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 31161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3126db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewDisplay( 3136db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<Surface>& surface) { 314a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 315ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 316ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 317ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala if (mState >= PREVIEW) return INVALID_OPERATION; 3186db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3196db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<IBinder> binder; 3206db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<ANativeWindow> window; 3216db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (surface != 0) { 3226db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala binder = surface->asBinder(); 3236db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala window = surface; 3246db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 3256db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3266db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return setPreviewWindow(binder,window); 32761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 32861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3296db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewTexture( 3306db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<ISurfaceTexture>& surfaceTexture) { 331a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 332ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 333ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 334ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala if (mState >= PREVIEW) return INVALID_OPERATION; 3356db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3366db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<IBinder> binder; 3376db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<ANativeWindow> window; 3386db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (surfaceTexture != 0) { 3396db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala binder = surfaceTexture->asBinder(); 3406db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala window = new SurfaceTextureClient(surfaceTexture); 3416db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 3426db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return setPreviewWindow(binder, window); 3436db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala} 3446db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3456db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewWindow(const sp<IBinder>& binder, 3466db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<ANativeWindow>& window) { 347a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 3486db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 3496db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3506db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (binder == mPreviewSurface) { 3516db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return NO_ERROR; 3526db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 3536db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3546db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewStreamId != NO_PREVIEW_STREAM) { 3556db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->deleteStream(mPreviewStreamId); 3566db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 3576db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 3586db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 3596db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 3606db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->createStream(window, 3613cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewWidth, mParameters.previewHeight, 3623cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CAMERA2_HAL_PIXEL_FORMAT_OPAQUE, 3636db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &mPreviewStreamId); 3646db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 3656db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 3666db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 3676db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 368bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala mPreviewSurface = binder; 369bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala 3706db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState == WAITING_FOR_PREVIEW_WINDOW) { 3716db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return startPreview(); 3726db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 3736db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3746db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 37561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 37661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 37761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::setPreviewCallbackFlag(int flag) { 378a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 379ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 38061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 38161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 38261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startPreview() { 383a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 384ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 385ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 3866db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 3876db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState == PREVIEW) return INVALID_OPERATION; 3886db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3896db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewStreamId == NO_PREVIEW_STREAM) { 3906db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = WAITING_FOR_PREVIEW_WINDOW; 3916db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 3926db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 3936db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3946db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewRequest == NULL) { 3956db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala updatePreviewRequest(); 3966db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 3976db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3986db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala uint8_t outputStream = mPreviewStreamId; 3996db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4006db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala camera_metadata_entry_t outputStreams; 4016db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = find_camera_metadata_entry(mPreviewRequest, 4026db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ANDROID_REQUEST_OUTPUT_STREAMS, 4036db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &outputStreams); 4046db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res == NAME_NOT_FOUND) { 4056db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = add_camera_metadata_entry(mPreviewRequest, 4066db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ANDROID_REQUEST_OUTPUT_STREAMS, 4076db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &outputStream, 1); 4086db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } else if (res == OK) { 4096db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = update_camera_metadata_entry(mPreviewRequest, 4106db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala outputStreams.index, &outputStream, 1, NULL); 4116db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4126db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4136db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 4146db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOGE("%s: Camera %d: Unable to set up preview request: %s (%d)", 4156db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 4166db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 4176db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 4186db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4196db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4206db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->setStreamingRequest(mPreviewRequest); 4216db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 422bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala ALOGE("%s: Camera %d: Unable to set preview request to start preview: " 423bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala "%s (%d)", 4246db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 4256db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 4266db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 4276db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4286db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = PREVIEW; 4296db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4306db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 43161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 43261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 43361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopPreview() { 434a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 435ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 436ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala stopPreviewLocked(); 437ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala} 438ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 439ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvalavoid Camera2Client::stopPreviewLocked() { 440ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala ATRACE_CALL(); 4416db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState != PREVIEW) return; 44261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 4436db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mDevice->setStreamingRequest(NULL); 4446db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 44561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 44661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 44761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::previewEnabled() { 448a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 449ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 4506db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return mState == PREVIEW; 45161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 45261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 45361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::storeMetaDataInBuffers(bool enabled) { 454a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 455ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 45661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 45761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 45861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 45961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startRecording() { 460a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 461ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 46261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 46361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 46461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 46561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopRecording() { 466a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 467ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 46861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 46961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 47061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::recordingEnabled() { 471a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 472ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 47361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 47461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 47561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 47661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::releaseRecordingFrame(const sp<IMemory>& mem) { 477a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 478ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 47961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 48061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 48161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::autoFocus() { 482a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 483ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 4846db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 48561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 48661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 48761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::cancelAutoFocus() { 488a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 489ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 4906db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 49161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 49261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 49361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::takePicture(int msgType) { 494a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 495ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 49661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 49761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 49861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 49961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::setParameters(const String8& params) { 500a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 501ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 5026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Mutex::Autolock pl(mParamsLock); 5036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala status_t res; 5046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 5056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala CameraParameters newParams(params); 5066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 5076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // TODO: Currently ignoring any changes to supposedly read-only 5086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // parameters such as supported preview sizes, etc. Should probably 5096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // produce an error if they're changed. 5106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 5116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala /** Extract and verify new parameters */ 5126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 5136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala size_t i; 5146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 5156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PREVIEW_SIZE 5166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int previewWidth, previewHeight; 5176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getPreviewSize(&previewWidth, &previewHeight); 5186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 5196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (previewWidth != mParameters.previewWidth || 5206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewHeight != mParameters.previewHeight) { 5216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (mState >= PREVIEW) { 5226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Preview size cannot be updated when preview " 5236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala "is active!", __FUNCTION__); 5246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 5256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availablePreviewSizes = 5276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES); 5286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availablePreviewSizes.count; i += 2 ) { 5296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availablePreviewSizes.data.i32[i] == previewWidth && 5306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala availablePreviewSizes.data.i32[i+1] == previewHeight) break; 5316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availablePreviewSizes.count) { 5336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested preview size %d x %d is not supported", 5346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, previewWidth, previewHeight); 5356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 5366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 5396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PREVIEW_FPS_RANGE 5406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int previewFpsRangeMin, previewFpsRangeMax, previewFps = 0; 5416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool fpsRangeChanged = false; 5426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getPreviewFpsRange(&previewFpsRangeMin, &previewFpsRangeMax); 5436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (previewFpsRangeMin != mParameters.previewFpsRangeMin || 5446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFpsRangeMax != mParameters.previewFpsRangeMax) { 5456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala fpsRangeChanged = true; 5466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availablePreviewFpsRanges = 5476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 2); 5486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availablePreviewFpsRanges.count; i += 2) { 5496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if ((availablePreviewFpsRanges.data.i32[i] == 5506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFpsRangeMin) && 5516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala (availablePreviewFpsRanges.data.i32[i+1] == 5526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFpsRangeMax) ) { 5536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala break; 5546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availablePreviewFpsRanges.count) { 5576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested preview FPS range %d - %d is not supported", 5586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, previewFpsRangeMin, previewFpsRangeMax); 5596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 5606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFps = previewFpsRangeMin; 5626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 5646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PREVIEW_FORMAT 5656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int previewFormat = formatStringToEnum(newParams.getPreviewFormat()); 5666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (previewFormat != mParameters.previewFormat) { 5676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (mState >= PREVIEW) { 5686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Preview format cannot be updated when preview " 5696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala "is active!", __FUNCTION__); 5706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 5716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableFormats = 5736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_FORMATS); 5746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableFormats.count; i++) { 5756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availableFormats.data.i32[i] == previewFormat) break; 5766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableFormats.count) { 5786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested preview format %s (0x%x) is not supported", 5796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, newParams.getPreviewFormat(), previewFormat); 5806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 5816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 5846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PREVIEW_FRAME_RATE 5856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // Deprecated, only use if the preview fps range is unchanged this time. 5866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // The single-value FPS is the same as the minimum of the range. 5876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (!fpsRangeChanged) { 5886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFps = newParams.getPreviewFrameRate(); 5896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (previewFps != mParameters.previewFps) { 5906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableFrameRates = 5916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); 5926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableFrameRates.count; i+=2) { 5936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availableFrameRates.data.i32[i] == previewFps) break; 5946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 5956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableFrameRates.count) { 5966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested preview frame rate %d is not supported", 5976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, previewFps); 5986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 5996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFpsRangeMin = availableFrameRates.data.i32[i]; 6016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFpsRangeMax = availableFrameRates.data.i32[i+1]; 6026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PICTURE_SIZE 6066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int pictureWidth, pictureHeight; 6076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getPictureSize(&pictureWidth, &pictureHeight); 6086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (pictureWidth == mParameters.pictureWidth || 6096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala pictureHeight == mParameters.pictureHeight) { 6106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availablePictureSizes = 6116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_JPEG_SIZES); 6126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availablePictureSizes.count; i+=2) { 6136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availablePictureSizes.data.i32[i] == pictureWidth && 6146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala availablePictureSizes.data.i32[i+1] == pictureHeight) break; 6156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availablePictureSizes.count) { 6176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested picture size %d x %d is not supported", 6186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, pictureWidth, pictureHeight); 6196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 6206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // JPEG_THUMBNAIL_WIDTH/HEIGHT 6246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int jpegThumbWidth, jpegThumbHeight; 6256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegThumbWidth = 6266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH); 6276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegThumbHeight = 6286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT); 6296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (jpegThumbWidth != mParameters.jpegThumbWidth || 6306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegThumbHeight != mParameters.jpegThumbHeight) { 6316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableJpegThumbSizes = 6326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES); 6336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableJpegThumbSizes.count; i+=2) { 6346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availableJpegThumbSizes.data.i32[i] == jpegThumbWidth && 6356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala availableJpegThumbSizes.data.i32[i+1] == jpegThumbHeight) { 6366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala break; 6376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableJpegThumbSizes.count) { 6406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested JPEG thumbnail size %d x %d is not supported", 6416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, jpegThumbWidth, jpegThumbHeight); 6426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 6436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // JPEG_THUMBNAIL_QUALITY 6476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int jpegThumbQuality = 6486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY); 6496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (jpegThumbQuality < 0 || jpegThumbQuality > 100) { 6506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested JPEG thumbnail quality %d is not supported", 6516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, jpegThumbQuality); 6526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 6536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // JPEG_QUALITY 6566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int jpegQuality = 6576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_QUALITY); 6586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (jpegQuality < 0 || jpegQuality > 100) { 6596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested JPEG quality %d is not supported", 6606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, jpegQuality); 6616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 6626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // ROTATION 6656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int jpegRotation = 6666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_ROTATION); 6676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (jpegRotation != 0 && 6686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegRotation != 90 && 6696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegRotation != 180 && 6706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegRotation != 270) { 6716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested picture rotation angle %d is not supported", 6726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, jpegRotation); 6736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 6746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 6756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // GPS 6776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool gpsEnabled = false; 6786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala double gpsLatitude = 0, gpsLongitude = 0, gpsAltitude = 0; 6796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int64_t gpsTimestamp = 0; 6806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala String8 gpsProcessingMethod; 6816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsLatStr = 6826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_LATITUDE); 6836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (gpsLatStr != NULL) { 6846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsLongStr = 6856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_LONGITUDE); 6866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsAltitudeStr = 6876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_ALTITUDE); 6886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsTimeStr = 6896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_TIMESTAMP); 6906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsProcMethodStr = 6916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_PROCESSING_METHOD); 6926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (gpsLongStr == NULL || 6936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsAltitudeStr == NULL || 6946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsTimeStr == NULL || 6956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsProcMethodStr == NULL) { 6966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Incomplete set of GPS parameters provided", 6976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__); 6986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 6996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala char *endPtr; 7016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 7026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsLatitude = strtod(gpsLatStr, &endPtr); 7036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || endPtr == gpsLatStr) { 7046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Malformed GPS latitude: %s", __FUNCTION__, gpsLatStr); 7056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 7086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsLongitude = strtod(gpsLongStr, &endPtr); 7096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || endPtr == gpsLongStr) { 7106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Malformed GPS longitude: %s", __FUNCTION__, gpsLongStr); 7116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 7146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsAltitude = strtod(gpsAltitudeStr, &endPtr); 7156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || endPtr == gpsAltitudeStr) { 7166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Malformed GPS altitude: %s", __FUNCTION__, 7176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsAltitudeStr); 7186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 7216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsTimestamp = strtoll(gpsTimeStr, &endPtr, 10); 7226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || endPtr == gpsTimeStr) { 7236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Malformed GPS timestamp: %s", __FUNCTION__, gpsTimeStr); 7246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsProcessingMethod = gpsProcMethodStr; 7276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsEnabled = true; 7296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // WHITE_BALANCE 7326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int wbMode = wbModeStringToEnum( 7336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_WHITE_BALANCE) ); 7346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (wbMode != mParameters.wbMode) { 7356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableWbModes = 7366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AWB_AVAILABLE_MODES); 7376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableWbModes.count; i++) { 7386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (wbMode == availableWbModes.data.u8[i]) break; 7396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableWbModes.count) { 7416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested white balance mode %s is not supported", 7426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 7436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_WHITE_BALANCE)); 7446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // EFFECT 7496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int effectMode = effectModeStringToEnum( 7506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_EFFECT) ); 7516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (effectMode != mParameters.effectMode) { 7526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableEffectModes = 7536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_EFFECTS); 7546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableEffectModes.count; i++) { 7556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (effectMode == availableEffectModes.data.u8[i]) break; 7566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableEffectModes.count) { 7586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested effect mode \"%s\" is not supported", 7596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 7606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_EFFECT) ); 7616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // ANTIBANDING 7666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int antibandingMode = abModeStringToEnum( 7676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_ANTIBANDING) ); 7686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (antibandingMode != mParameters.antibandingMode) { 7696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableAbModes = 7706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES); 7716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableAbModes.count; i++) { 7726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (antibandingMode == availableAbModes.data.u8[i]) break; 7736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableAbModes.count) { 7756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested antibanding mode \"%s\" is not supported", 7766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 7776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_ANTIBANDING)); 7786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // SCENE_MODE 7836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int sceneMode = sceneModeStringToEnum( 7846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_SCENE_MODE) ); 7856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (sceneMode != mParameters.sceneMode) { 7866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableSceneModes = 7876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_SCENE_MODES); 7886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableSceneModes.count; i++) { 7896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (sceneMode == availableSceneModes.data.u8[i]) break; 7906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableSceneModes.count) { 7926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested scene mode \"%s\" is not supported", 7936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 7946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_SCENE_MODE)); 7956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // FLASH_MODE 8006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::flashMode_t flashMode = flashModeStringToEnum( 8016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE) ); 8026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (flashMode != mParameters.flashMode) { 8036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t flashAvailable = 8046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_FLASH_AVAILABLE, 1, 1); 8056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (!flashAvailable.data.u8[0] && 8066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala flashMode != Parameters::FLASH_MODE_OFF) { 8076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested flash mode \"%s\" is not supported: " 8086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala "No flash on device", __FUNCTION__, 8096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE)); 8106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } else if (flashMode == Parameters::FLASH_MODE_RED_EYE) { 8126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableAeModes = 8136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_MODES); 8146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableAeModes.count; i++) { 8156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (flashMode == availableAeModes.data.u8[i]) break; 8166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableAeModes.count) { 8186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested flash mode \"%s\" is not supported", 8196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 8206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE)); 8216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } else if (flashMode == -1) { 8246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested flash mode \"%s\" is unknown", 8256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 8266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE)); 8276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // FOCUS_MODE 8326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::focusMode_t focusMode = focusModeStringToEnum( 8336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FOCUS_MODE)); 8346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (focusMode != mParameters.focusMode) { 8356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (focusMode != Parameters::FOCUS_MODE_FIXED) { 8366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t minFocusDistance = 8376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_LENS_MINIMUM_FOCUS_DISTANCE); 8386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (minFocusDistance.data.f[0] == 0) { 8396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested focus mode \"%s\" is not available: " 8406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala "fixed focus lens", 8416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 8426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FOCUS_MODE)); 8436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } else if (focusMode != Parameters::FOCUS_MODE_INFINITY) { 8456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableFocusModes = 8466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AF_AVAILABLE_MODES); 8476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableFocusModes.count; i++) { 8486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (focusMode == availableFocusModes.data.u8[i]) break; 8496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableFocusModes.count) { 8516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested focus mode \"%s\" is not supported", 8526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 8536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FOCUS_MODE)); 8546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // FOCUS_AREAS 8616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Vector<Parameters::Area> focusingAreas; 8626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala res = parseAreas(newParams.get(CameraParameters::KEY_FOCUS_AREAS), 8636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala &focusingAreas); 8646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala size_t max3aRegions = 8656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala (size_t)staticInfo(ANDROID_CONTROL_MAX_REGIONS, 1, 1).data.i32[0]; 8666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (res == OK) res = validateAreas(focusingAreas, max3aRegions); 8676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (res != OK) { 8686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested focus areas are malformed: %s", 8696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, newParams.get(CameraParameters::KEY_FOCUS_AREAS)); 8706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // EXPOSURE_COMPENSATION 8746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int exposureCompensation = 8756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION); 8766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t exposureCompensationRange = 8776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE); 8786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (exposureCompensation < exposureCompensationRange.data.i32[0] || 8796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala exposureCompensation > exposureCompensationRange.data.i32[1]) { 8806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested exposure compensation index is out of bounds: %d", 8816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, exposureCompensation); 8826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // AUTO_EXPOSURE_LOCK (always supported) 8866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool autoExposureLock = boolFromString( 8876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK)); 8886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // AUTO_WHITEBALANCE_LOCK (always supported) 8906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool autoWhiteBalanceLock = boolFromString( 8916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK)); 8926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // METERING_AREAS 8946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Vector<Parameters::Area> meteringAreas; 8956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala res = parseAreas(newParams.get(CameraParameters::KEY_METERING_AREAS), 8966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala &meteringAreas); 8976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (res == OK) res = validateAreas(focusingAreas, max3aRegions); 8986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (res != OK) { 8996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested metering areas are malformed: %s", 9006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 9016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_METERING_AREAS)); 9026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // ZOOM 9066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int zoom = newParams.getInt(CameraParameters::KEY_ZOOM); 9076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (zoom < 0 || zoom > (int)NUM_ZOOM_STEPS) { 9086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested zoom level %d is not supported", 9096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, zoom); 9106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // VIDEO_SIZE 9146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int videoWidth, videoHeight; 9156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getVideoSize(&videoWidth, &videoHeight); 9166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (videoWidth != mParameters.videoWidth || 9176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala videoHeight != mParameters.videoHeight) { 9186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (mState == RECORD) { 9196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Video size cannot be updated when recording is active!", 9206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__); 9216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableVideoSizes = 9246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES); 9256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableVideoSizes.count; i += 2 ) { 9266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availableVideoSizes.data.i32[i] == videoWidth && 9276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala availableVideoSizes.data.i32[i+1] == videoHeight) break; 9286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableVideoSizes.count) { 9306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested video size %d x %d is not supported", 9316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, videoWidth, videoHeight); 9326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // RECORDING_HINT (always supported) 9376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool recordingHint = boolFromString( 9386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_RECORDING_HINT) ); 9396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // VIDEO_STABILIZATION 9416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool videoStabilization = boolFromString( 9426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_VIDEO_STABILIZATION) ); 9436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableVideoStabilizationModes = 9446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES); 9456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (videoStabilization && availableVideoStabilizationModes.count == 1) { 9466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Video stabilization not supported", __FUNCTION__); 9476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala /** Update internal parameters */ 9506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewWidth = previewWidth; 9516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewHeight = previewHeight; 9526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewFpsRangeMin = previewFpsRangeMin; 9536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewFpsRangeMax = previewFpsRangeMax; 9546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewFps = previewFps; 9556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewFormat = previewFormat; 9566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.pictureWidth = pictureWidth; 9586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.pictureHeight = pictureHeight; 9596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.jpegThumbWidth = jpegThumbWidth; 9616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.jpegThumbHeight = jpegThumbHeight; 9626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.jpegQuality = jpegQuality; 9636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.jpegThumbQuality = jpegThumbQuality; 9646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsEnabled = gpsEnabled; 9666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsLatitude = gpsLatitude; 9676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsLongitude = gpsLongitude; 9686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsAltitude = gpsAltitude; 9696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsTimestamp = gpsTimestamp; 9706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsProcessingMethod = gpsProcessingMethod; 9716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.wbMode = wbMode; 9736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.effectMode = effectMode; 9746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.antibandingMode = antibandingMode; 9756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.sceneMode = sceneMode; 9766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.flashMode = flashMode; 9786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.focusMode = focusMode; 9796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.focusingAreas = focusingAreas; 9816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.exposureCompensation = exposureCompensation; 9826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.autoExposureLock = autoExposureLock; 9836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.autoWhiteBalanceLock = autoWhiteBalanceLock; 9846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.meteringAreas = meteringAreas; 9856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.zoom = zoom; 9866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.videoWidth = videoWidth; 9886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.videoHeight = videoHeight; 9896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.recordingHint = recordingHint; 9916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.videoStabilization = videoStabilization; 9926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala updatePreviewRequest(); 9946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9956db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 99661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 997f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 99861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaString8 Camera2Client::getParameters() const { 999a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 1000ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 1001ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 1002ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock pl(mParamsLock); 1003ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 10043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala // TODO: Deal with focus distances 10053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala return mParamsFlattened; 100661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 100761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 100861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) { 1009a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 1010ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 10116db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 101261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 101361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 10143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala/** Device-related methods */ 10153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 10163cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvalacamera_metadata_entry_t Camera2Client::staticInfo(uint32_t tag, 10173cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala size_t minCount, size_t maxCount) { 10183cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala status_t res; 10193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t entry; 10203cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 10213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala tag, 10223cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala &entry); 10233cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (CC_UNLIKELY( res != OK )) { 10243cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagSection = get_camera_metadata_section_name(tag); 10253cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagSection == NULL) tagSection = "<unknown>"; 10263cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagName = get_camera_metadata_tag_name(tag); 10273cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagName == NULL) tagName = "<unknown>"; 10283cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 10293cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGE("Error finding static metadata entry '%s.%s' (%x): %s (%d)", 10303cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala tagSection, tagName, tag, strerror(-res), res); 10313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.count = 0; 10323cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.data.u8 = NULL; 10333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } else if (CC_UNLIKELY( 10343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala (minCount != 0 && entry.count < minCount) || 10353cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala (maxCount != 0 && entry.count > maxCount) ) ) { 10363cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagSection = get_camera_metadata_section_name(tag); 10373cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagSection == NULL) tagSection = "<unknown>"; 10383cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagName = get_camera_metadata_tag_name(tag); 10393cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagName == NULL) tagName = "<unknown>"; 10403cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGE("Malformed static metadata entry '%s.%s' (%x):" 10413cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "Expected between %d and %d values, but got %d values", 10423cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala tagSection, tagName, tag, minCount, maxCount, entry.count); 10433cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.count = 0; 10443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.data.u8 = NULL; 10453cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } 10463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 10473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala return entry; 10483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala} 10493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 10503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala/** Utility methods */ 10513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 1052f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1053f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::buildDefaultParameters() { 1054a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 1055ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock pl(mParamsLock); 1056ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 1057f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 10583cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters params; 1059f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 10603cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableProcessedSizes = 10613cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 2); 10623cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableProcessedSizes.count) return NO_INIT; 1063f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1064f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick more intelligently 10653cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewWidth = availableProcessedSizes.data.i32[0]; 10663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewHeight = availableProcessedSizes.data.i32[1]; 10673cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.videoWidth = mParameters.previewWidth; 10683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.videoHeight = mParameters.previewHeight; 10693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 10703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setPreviewSize(mParameters.previewWidth, mParameters.previewHeight); 10713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setVideoSize(mParameters.videoWidth, mParameters.videoHeight); 10723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO, 10733cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8::format("%dx%d", 10743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewWidth, mParameters.previewHeight)); 1075f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1076f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewSizes; 1077f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableProcessedSizes.count; i += 2) { 1078f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewSizes += ","; 1079f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes += String8::format("%dx%d", 1080f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i], 1081f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i+1]); 1082f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 10833cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, 1084f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 10853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES, 1086f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 1087f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1088f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 10893cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableFpsRanges = 10903cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 2); 10913cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableFpsRanges.count) return NO_INIT; 1092f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 10933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMin = availableFpsRanges.data.i32[0]; 10943cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMax = availableFpsRanges.data.i32[1]; 1095f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 10963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, 10973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8::format("%d,%d", 10983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMin, 10993cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMax)); 1100f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1101f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1102f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFpsRange; 1103f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 1104f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFpsRange += ","; 1105f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange += String8::format("(%d,%d)", 1106f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i], 1107f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i+1]); 1108f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 11093cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, 1110f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange); 1111f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1112f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 11133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; 11143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FORMAT, 11153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala formatEnumToString(mParameters.previewFormat)); // NV21 11163cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 11173cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableFormats = 11183cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_FORMATS); 1119f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1120f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1121f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFormats; 1122f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 1123f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFormats.count; i++) { 1124f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedPreviewFormats += ","; 1125f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1126f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableFormats.data.i32[i]) { 1127f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: 1128bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1129bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV422SP; 1130f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1131f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: 1132bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1133bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV420SP; 1134f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1135f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: 1136bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1137bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV422I; 1138f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1139f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: 1140bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1141bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV420P; 1142f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1143f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: 1144bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1145bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_RGB565; 1146f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1147f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not advertizing JPEG, RAW_SENSOR, etc, for preview formats 1148f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 1149f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1150f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1151f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1152f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown preview format: %x", 1153f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableFormats.data.i32[i]); 1154f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1155f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1156f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1157f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 11583cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS, 1159f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats); 1160f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1161f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1162f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // PREVIEW_FRAME_RATE / SUPPORTED_PREVIEW_FRAME_RATES are deprecated, but 1163f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // still have to do something sane for them 1164f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 11653cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FRAME_RATE, 11663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMin); 1167f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1168f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1169f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFrameRates; 1170f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 1171f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFrameRates += ","; 1172f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates += String8::format("%d", 1173f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i]); 1174f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 11753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES, 1176f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates); 1177f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1178f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 11793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableJpegSizes = 11803cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 2); 11813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableJpegSizes.count) return NO_INIT; 1182f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1183f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick maximum 11843cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.pictureWidth = availableJpegSizes.data.i32[0]; 11853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.pictureHeight = availableJpegSizes.data.i32[1]; 1186f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 11873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setPictureSize(mParameters.pictureWidth, 11883cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.pictureHeight); 1189f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1190f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1191f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPictureSizes; 1192f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegSizes.count; i += 2) { 1193f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPictureSizes += ","; 1194f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes += String8::format("%dx%d", 1195f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i], 1196f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i+1]); 1197f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 11983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, 1199f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes); 1200f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1201f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 12023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setPictureFormat(CameraParameters::PIXEL_FORMAT_JPEG); 12033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS, 12043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::PIXEL_FORMAT_JPEG); 1205f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 12063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableJpegThumbnailSizes = 12073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, 2); 12083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableJpegThumbnailSizes.count) return NO_INIT; 1209f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1210f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick default thumbnail size sensibly 12113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbWidth = availableJpegThumbnailSizes.data.i32[0]; 12123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbHeight = availableJpegThumbnailSizes.data.i32[1]; 1213f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 12143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, 12153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbWidth); 12163cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, 12173cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbHeight); 1218f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1219f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1220f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedJpegThumbSizes; 1221f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegThumbnailSizes.count; i += 2) { 1222f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedJpegThumbSizes += ","; 1223f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes += String8::format("%dx%d", 1224f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i], 1225f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i+1]); 1226f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 12273cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, 1228f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes); 1229f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1230f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 12313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbQuality = 90; 12323cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, 12333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbQuality); 12343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegQuality = 90; 12353cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_QUALITY, 12363cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegQuality); 12373cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegRotation = 0; 12383cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ROTATION, 12393cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegRotation); 12403cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 12413cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.gpsEnabled = false; 12423cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.gpsProcessingMethod = "unknown"; 12433cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala // GPS fields in CameraParameters are not set by implementation 12443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 12453cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.wbMode = ANDROID_CONTROL_AWB_AUTO; 12463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_WHITE_BALANCE, 12473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::WHITE_BALANCE_AUTO); 12483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 12493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableWhiteBalanceModes = 12503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AWB_AVAILABLE_MODES); 1251f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1252f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedWhiteBalance; 1253f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 1254f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableWhiteBalanceModes.count; i++) { 1255f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedWhiteBalance += ","; 1256f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1257f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableWhiteBalanceModes.data.u8[i]) { 1258f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_AUTO: 1259bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1260bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_AUTO; 1261f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1262f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_INCANDESCENT: 1263bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1264bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_INCANDESCENT; 1265f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1266f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_FLUORESCENT: 1267bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1268bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_FLUORESCENT; 1269f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1270f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_WARM_FLUORESCENT: 1271bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1272bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_WARM_FLUORESCENT; 1273f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1274f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_DAYLIGHT: 1275bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1276bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_DAYLIGHT; 1277f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1278f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT: 1279bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1280bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT; 1281f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1282f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_TWILIGHT: 1283bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1284bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_TWILIGHT; 1285f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1286f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_SHADE: 1287bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1288bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_SHADE; 1289f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1290f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Skipping values not mappable to v1 API 1291f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_OFF: 1292f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1293f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1294f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1295f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown white balance value: %d", 1296f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 1297f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableWhiteBalanceModes.data.u8[i]); 1298f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1299f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1300f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1301f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 13023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE, 1303f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance); 1304f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1305f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 13063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.effectMode = ANDROID_CONTROL_EFFECT_OFF; 13073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_EFFECT, 13083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::EFFECT_NONE); 13093cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 13103cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableEffects = 13113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_EFFECTS); 13123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableEffects.count) return NO_INIT; 1313f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1314f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedEffects; 1315f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 1316f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableEffects.count; i++) { 1317f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedEffects += ","; 1318f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1319f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableEffects.data.u8[i]) { 1320f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_OFF: 1321bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1322bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_NONE; 1323f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1324f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_MONO: 1325bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1326bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_MONO; 1327bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala break; 1328f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_NEGATIVE: 1329bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1330bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_NEGATIVE; 1331f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1332f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SOLARIZE: 1333bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1334bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_SOLARIZE; 1335f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1336f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SEPIA: 1337bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1338bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_SEPIA; 1339f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1340f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_POSTERIZE: 1341bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1342bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_POSTERIZE; 1343f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1344f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_WHITEBOARD: 1345bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1346bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_WHITEBOARD; 1347f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1348f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_BLACKBOARD: 1349bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1350bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_BLACKBOARD; 1351f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1352f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_AQUA: 1353bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1354bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_AQUA; 1355f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1356f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1357f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown effect value: %d", 1358f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableEffects.data.u8[i]); 1359f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1360f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1361f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1362f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 13633cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_EFFECTS, supportedEffects); 1364f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1365f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 13663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.antibandingMode = ANDROID_CONTROL_AE_ANTIBANDING_AUTO; 13673cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ANTIBANDING, 13683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::ANTIBANDING_AUTO); 13693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 13703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableAntibandingModes = 13713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES); 13723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableAntibandingModes.count) return NO_INIT; 1373f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1374f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedAntibanding; 1375f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 1376f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAntibandingModes.count; i++) { 1377f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedAntibanding += ","; 1378f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1379f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAntibandingModes.data.u8[i]) { 1380f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_OFF: 1381bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedAntibanding += 1382bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::ANTIBANDING_OFF; 1383f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1384f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_50HZ: 1385bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedAntibanding += 1386bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::ANTIBANDING_50HZ; 1387f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1388f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_60HZ: 1389bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedAntibanding += 1390bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::ANTIBANDING_60HZ; 1391f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1392f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_AUTO: 1393bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedAntibanding += 1394bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::ANTIBANDING_AUTO; 1395f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1396f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1397f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown antibanding value: %d", 1398f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 1399f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableAntibandingModes.data.u8[i]); 1400f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1401f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1402f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1403f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 14043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_ANTIBANDING, 1405f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding); 1406f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1407f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.sceneMode = ANDROID_CONTROL_OFF; 14093cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SCENE_MODE, 14103cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::SCENE_MODE_AUTO); 14113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 14123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableSceneModes = 14133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_SCENE_MODES); 14143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableSceneModes.count) return NO_INIT; 1415f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1416bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala String8 supportedSceneModes(CameraParameters::SCENE_MODE_AUTO); 1417f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 1418f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool noSceneModes = false; 1419f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableSceneModes.count; i++) { 1420f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedSceneModes += ","; 1421f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1422f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableSceneModes.data.u8[i]) { 1423f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED: 1424f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala noSceneModes = true; 1425f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1426f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY: 1427f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not in old API 1428f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1429f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1430f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_ACTION: 1431bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1432bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_ACTION; 1433f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1434f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PORTRAIT: 1435bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1436bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_PORTRAIT; 1437f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1438f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_LANDSCAPE: 1439bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1440bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_LANDSCAPE; 1441f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1442f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT: 1443bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1444bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_NIGHT; 1445f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1446f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT: 1447bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1448bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_NIGHT_PORTRAIT; 1449f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1450f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_THEATRE: 1451bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1452bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_THEATRE; 1453f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1454f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BEACH: 1455bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1456bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_BEACH; 1457f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1458f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SNOW: 1459bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1460bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_SNOW; 1461f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1462f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SUNSET: 1463bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1464bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_SUNSET; 1465f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1466f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO: 1467bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1468bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_STEADYPHOTO; 1469f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1470f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FIREWORKS: 1471bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1472bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_FIREWORKS; 1473f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1474f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SPORTS: 1475bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1476bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_SPORTS; 1477f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1478f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PARTY: 1479bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1480bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_PARTY; 1481f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1482f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT: 1483bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1484bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_CANDLELIGHT; 1485f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1486f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BARCODE: 1487bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1488bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_BARCODE; 1489f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1490f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1491f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown scene mode value: %d", 1492bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala __FUNCTION__, mCameraId, 1493bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala availableSceneModes.data.u8[i]); 1494f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1495f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1496f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1497f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1498f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (!noSceneModes) { 14993cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_SCENE_MODES, 1500f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes); 1501f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1502f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1503f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 15043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t flashAvailable = 15053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_FLASH_AVAILABLE, 1, 1); 15063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!flashAvailable.count) return NO_INIT; 1507f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 15083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableAeModes = 15093cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_MODES); 15103cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableAeModes.count) return NO_INIT; 1511f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1512f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (flashAvailable.data.u8[0]) { 15133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.flashMode = Parameters::FLASH_MODE_AUTO; 15143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FLASH_MODE, 15153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_AUTO); 15163cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 15173cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8 supportedFlashModes(CameraParameters::FLASH_MODE_OFF); 15183cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala supportedFlashModes = supportedFlashModes + 15193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_AUTO + 15203cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_ON + 15213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_TORCH; 1522f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAeModes.count; i++) { 1523f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableAeModes.data.u8[i] == 1524f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_ON_AUTO_FLASH_REDEYE) { 15253cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala supportedFlashModes = supportedFlashModes + "," + 15263cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_RED_EYE; 1527f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1528f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1529f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 15303cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 1531f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFlashModes); 15323cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } else { 15333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.flashMode = Parameters::FLASH_MODE_OFF; 15343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FLASH_MODE, 15353cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_OFF); 15363cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 15373cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_OFF); 1538f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1539f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 15403cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t minFocusDistance = 15413cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_LENS_MINIMUM_FOCUS_DISTANCE, 1, 1); 15423cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!minFocusDistance.count) return NO_INIT; 15433cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 15443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableAfModes = 15453cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AF_AVAILABLE_MODES); 15463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableAfModes.count) return NO_INIT; 15473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 1548f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (minFocusDistance.data.f[0] == 0) { 1549f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Fixed-focus lens 15503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusMode = Parameters::FOCUS_MODE_FIXED; 15513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_MODE, 15523cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_FIXED); 15533cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 15543cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_FIXED); 1555f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 15563cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusMode = Parameters::FOCUS_MODE_AUTO; 15573cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_MODE, 15583cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_AUTO); 15593cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8 supportedFocusModes(CameraParameters::FOCUS_MODE_FIXED); 15603cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala supportedFocusModes = supportedFocusModes + "," + 15613cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_INFINITY; 1562f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 1563bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala 1564f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAfModes.count; i++) { 1565f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedFocusModes += ","; 1566f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1567f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAfModes.data.u8[i]) { 1568f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_AUTO: 1569bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1570bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_AUTO; 1571f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1572f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_MACRO: 1573bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1574bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_MACRO; 1575f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1576f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_VIDEO: 1577bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1578bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO; 1579f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1580f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_PICTURE: 1581bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1582bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE; 1583f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1584f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_EDOF: 1585bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1586bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_EDOF; 1587f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1588bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala // Not supported in old API 1589f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_OFF: 1590f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1591f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1592f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1593f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown AF mode value: %d", 1594f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableAfModes.data.u8[i]); 1595f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1596f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1597f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1598f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 15993cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 1600f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes); 1601f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1602f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t max3aRegions = 16043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_MAX_REGIONS, 1, 1); 16053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!max3aRegions.count) return NO_INIT; 1606f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS, 1608f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 16093cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_AREAS, 1610f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 16113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusingAreas.clear(); 16123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusingAreas.add(Parameters::Area(0,0,0,0,0)); 16133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 16143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableFocalLengths = 16153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_LENS_AVAILABLE_FOCAL_LENGTHS); 16163cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableFocalLengths.count) return NO_INIT; 1617f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1618f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float minFocalLength = availableFocalLengths.data.f[0]; 16193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_FOCAL_LENGTH, minFocalLength); 1620f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t sensorSize = 16223cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SENSOR_PHYSICAL_SIZE, 2, 2); 16233cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!sensorSize.count) return NO_INIT; 1624f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1625f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // The fields of view here assume infinity focus, maximum wide angle 1626f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float horizFov = 180 / M_PI * 1627f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[0] / (2 * minFocalLength)); 1628f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float vertFov = 180 / M_PI * 1629f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[1] / (2 * minFocalLength)); 16303cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE, horizFov); 16313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_VERTICAL_VIEW_ANGLE, vertFov); 1632f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.exposureCompensation = 0; 16343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_EXPOSURE_COMPENSATION, 16353cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.exposureCompensation); 1636f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16373cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t exposureCompensationRange = 16383cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE, 2, 2); 16393cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!exposureCompensationRange.count) return NO_INIT; 16403cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 16413cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION, 1642f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[1]); 16433cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION, 1644f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[0]); 1645f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t exposureCompensationStep = 16473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_STEP, 1, 1); 16483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!exposureCompensationStep.count) return NO_INIT; 16493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 16503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP, 1651f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].numerator / 1652f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].denominator); 1653f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16543cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.autoExposureLock = false; 16553cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, 16563cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 16573cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED, 16583cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1659f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16603cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.autoWhiteBalanceLock = false; 16613cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, 16623cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 16633cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED, 16643cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1665f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.meteringAreas.add(Parameters::Area(0, 0, 0, 0, 0)); 16673cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_METERING_AREAS, 1668f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 16693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_METERING_AREAS, 1670f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 1671f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.zoom = 0; 16733cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM, mParameters.zoom); 16743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_ZOOM, NUM_ZOOM_STEPS - 1); 1675f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t maxDigitalZoom = 16773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_MAX_ZOOM, 1, 1); 16783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!maxDigitalZoom.count) return NO_INIT; 1679f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1680f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1681f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 zoomRatios; 1682f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoom = 1.f; 1683f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoomIncrement = (maxDigitalZoom.data.f[0] - zoom) / 16846db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala (NUM_ZOOM_STEPS-1); 1685f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 16866db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala for (size_t i=0; i < NUM_ZOOM_STEPS; i++) { 1687f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) zoomRatios += ","; 1688f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1689f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoomRatios += String8::format("%d", static_cast<int>(zoom * 100)); 1690f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoom += zoomIncrement; 1691f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 16923cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM_RATIOS, zoomRatios); 1693f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1694f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM_SUPPORTED, 16963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 16973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED, 16983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1699f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 17003cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_DISTANCES, 1701f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Infinity,Infinity,Infinity"); 1702f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 17033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t maxFacesDetected = 17043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_STATS_MAX_FACE_COUNT, 1, 1); 17053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW, 1706f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala maxFacesDetected.data.i32[0]); 17073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW, 1708f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 0); 1709f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 17103cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_FRAME_FORMAT, 17113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala formatEnumToString(HAL_PIXEL_FORMAT_YCrCb_420_SP)); 1712f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 17133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_RECORDING_HINT, 17143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 1715f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 17163cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED, 17173cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1718f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 17193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION, 17203cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 17213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 17223cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableVideoStabilizationModes = 17233cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES); 17243cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableVideoStabilizationModes.count) return NO_INIT; 1725f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1726f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableVideoStabilizationModes.count > 1) { 17273cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 17283cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1729f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 17303cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 17313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 1732f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1733f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 17343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParamsFlattened = params.flatten(); 17353cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 1736f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 1737f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 173861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 17396db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::updatePreviewRequest() { 1740a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 17416db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 17426db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewRequest == NULL) { 17436db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->createDefaultRequest(CAMERA2_TEMPLATE_PREVIEW, 17446db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &mPreviewRequest); 17456db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 17466db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOGE("%s: Camera %d: Unable to create default preview request: " 17476db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala "%s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 17486db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 17496db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 17506db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 17513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala // TODO: Adjust for params changes 17526db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 17536db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala} 17546db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 17556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::formatStringToEnum(const char *format) { 17566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 17576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV422SP) ? 17586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_YCbCr_422_SP : // NV16 17596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV420SP) ? 17606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_YCrCb_420_SP : // NV21 17616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV422I) ? 17626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_YCbCr_422_I : // YUY2 17636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV420P) ? 17646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_YV12 : // YV12 17656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_RGB565) ? 17666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_RGB_565 : // RGB565 17676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_RGBA8888) ? 17686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_RGBA_8888 : // RGB8888 17696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_BAYER_RGGB) ? 17706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_RAW_SENSOR : // Raw sensor data 17716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 17726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 17736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 17743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvalaconst char* Camera2Client::formatEnumToString(int format) { 17753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char *fmt; 17763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala switch(format) { 17773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: // NV16 17783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV422SP; 17793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 17803cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: // NV21 17813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV420SP; 17823cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 17833cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: // YUY2 17843cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV422I; 17853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 17863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: // YV12 17873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV420P; 17883cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 17893cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: // RGB565 17903cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_RGB565; 17913cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 17923cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGBA_8888: // RGBA8888 17933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_RGBA8888; 17943cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 17953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 17963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGW("Raw sensor preview format requested."); 17973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_BAYER_RGGB; 17983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 17993cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala default: 18003cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGE("%s: Unknown preview format: %x", 18013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala __FUNCTION__, format); 18023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = NULL; 18033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 18043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } 18053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala return fmt; 18063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala} 18076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 18086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::wbModeStringToEnum(const char *wbMode) { 18096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 18106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_AUTO) ? 18116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_AUTO : 18126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_INCANDESCENT) ? 18136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_INCANDESCENT : 18146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_FLUORESCENT) ? 18156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_FLUORESCENT : 18166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_WARM_FLUORESCENT) ? 18176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_WARM_FLUORESCENT : 18186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_DAYLIGHT) ? 18196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_DAYLIGHT : 18206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT) ? 18216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT : 18226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_TWILIGHT) ? 18236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_TWILIGHT : 18246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_SHADE) ? 18256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_SHADE : 18266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 18276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 18286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 18296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::effectModeStringToEnum(const char *effectMode) { 18306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 18316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_NONE) ? 18326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_OFF : 18336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_MONO) ? 18346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_MONO : 18356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_NEGATIVE) ? 18366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_NEGATIVE : 18376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_SOLARIZE) ? 18386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_SOLARIZE : 18396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_SEPIA) ? 18406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_SEPIA : 18416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_POSTERIZE) ? 18426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_POSTERIZE : 18436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_WHITEBOARD) ? 18446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_WHITEBOARD : 18456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_BLACKBOARD) ? 18466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_BLACKBOARD : 18476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_AQUA) ? 18486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_AQUA : 18496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 18506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 18516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 18526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::abModeStringToEnum(const char *abMode) { 18536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 18546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_AUTO) ? 18556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_AUTO : 18566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_OFF) ? 18576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_OFF : 18586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_50HZ) ? 18596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_50HZ : 18606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_60HZ) ? 18616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_60HZ : 18626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 18636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 18646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 18656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::sceneModeStringToEnum(const char *sceneMode) { 18666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 18676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_AUTO) ? 18686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED : 18696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_ACTION) ? 18706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_ACTION : 18716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_PORTRAIT) ? 18726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_PORTRAIT : 18736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_LANDSCAPE) ? 18746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_LANDSCAPE : 18756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_NIGHT) ? 18766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_NIGHT : 18776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_NIGHT_PORTRAIT) ? 18786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT : 18796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_THEATRE) ? 18806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_THEATRE : 18816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_BEACH) ? 18826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_BEACH : 18836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_SNOW) ? 18846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_SNOW : 18856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_SUNSET) ? 18866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_SUNSET : 18876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_STEADYPHOTO) ? 18886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO : 18896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_FIREWORKS) ? 18906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_FIREWORKS : 18916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_SPORTS) ? 18926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_SPORTS : 18936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_PARTY) ? 18946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_PARTY : 18956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_CANDLELIGHT) ? 18966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT : 18976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_BARCODE) ? 18986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_BARCODE: 18996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 19006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 19016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 19026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville TalvalaCamera2Client::Parameters::flashMode_t Camera2Client::flashModeStringToEnum( 19036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *flashMode) { 19046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 19056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_OFF) ? 19066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_OFF : 19076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_AUTO) ? 19086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_AUTO : 19096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_ON) ? 19106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_ON : 19116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_RED_EYE) ? 19126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_RED_EYE : 19136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_TORCH) ? 19146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_TORCH : 19156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_INVALID; 19166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 19176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 19186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville TalvalaCamera2Client::Parameters::focusMode_t Camera2Client::focusModeStringToEnum( 19196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *focusMode) { 19206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 19216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_AUTO) ? 19226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_AUTO : 19236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_INFINITY) ? 19246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_INFINITY : 19256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_MACRO) ? 19266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_MACRO : 19276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_FIXED) ? 19286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_FIXED : 19296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_EDOF) ? 19306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_EDOF : 19316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO) ? 19326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_CONTINUOUS_VIDEO : 19336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE) ? 19346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_CONTINUOUS_PICTURE : 19356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_INVALID; 19366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 19376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 19386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalastatus_t Camera2Client::parseAreas(const char *areasCStr, 19396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Vector<Parameters::Area> *areas) { 19406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala static const size_t NUM_FIELDS = 5; 19416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas->clear(); 19426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areasCStr == NULL) { 19436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // If no key exists, use default (0,0,0,0,0) 19446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas->push(); 19456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return OK; 19466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 19476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala String8 areasStr(areasCStr); 19486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ssize_t areaStart = areasStr.find("(", 0) + 1; 19496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala while (areaStart != 0) { 19506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char* area = areasStr.string() + areaStart; 19516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala char *numEnd; 19526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int vals[NUM_FIELDS]; 19536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (size_t i = 0; i < NUM_FIELDS; i++) { 19546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 19556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala vals[i] = strtol(area, &numEnd, 10); 19566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || numEnd == area) return BAD_VALUE; 19576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala area = numEnd + 1; 19586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 19596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas->push(Parameters::Area( 19606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala vals[0], vals[1], vals[2], vals[3], vals[4]) ); 19616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areaStart = areasStr.find("(", areaStart) + 1; 19626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 19636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return OK; 19646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 19656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 19666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalastatus_t Camera2Client::validateAreas(const Vector<Parameters::Area> &areas, 19676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala size_t maxRegions) { 19686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // Definition of valid area can be found in 19696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // include/camera/CameraParameters.h 19706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areas.size() == 0) return BAD_VALUE; 19716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areas.size() == 1) { 19726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areas[0].left == 0 && 19736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas[0].top == 0 && 19746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas[0].right == 0 && 19756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas[0].bottom == 0 && 19766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas[0].weight == 0) { 19776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // Single (0,0,0,0,0) entry is always valid (== driver decides) 19786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return OK; 19796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 19806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 19816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areas.size() > maxRegions) { 19826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Too many areas requested: %d", 19836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, areas.size()); 19846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 19856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 19866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 19876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (Vector<Parameters::Area>::const_iterator a = areas.begin(); 19886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala a != areas.end(); a++) { 19896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->weight < 1 || a->weight > 1000) return BAD_VALUE; 19906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->left < -1000 || a->left > 1000) return BAD_VALUE; 19916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->top < -1000 || a->top > 1000) return BAD_VALUE; 19926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->right < -1000 || a->right > 1000) return BAD_VALUE; 19936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->bottom < -1000 || a->bottom > 1000) return BAD_VALUE; 19946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->left >= a->right) return BAD_VALUE; 19956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->top >= a->bottom) return BAD_VALUE; 19966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 19976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return OK; 19986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 19996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 20006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalabool Camera2Client::boolFromString(const char *boolStr) { 20016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return !boolStr ? false : 20026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(boolStr, CameraParameters::TRUE) ? true : 20036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala false; 20046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 20056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 20066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 200761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} // namespace android 2008