Camera2Client.cpp revision 3297daae9681004775012faba9181d65e097e00c
161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala/* 261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * you may not use this file except in compliance with the License. 661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * You may obtain a copy of the License at 761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 1061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 1161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 1261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * See the License for the specific language governing permissions and 1461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * limitations under the License. 1561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala */ 1661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 1761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#define LOG_TAG "Camera2Client" 18a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala#define ATRACE_TAG ATRACE_TAG_CAMERA 1961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala//#define LOG_NDEBUG 0 20a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala 21f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala#include <utils/Log.h> 22a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala#include <utils/Trace.h> 2361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 2461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include <cutils/properties.h> 2561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include <gui/SurfaceTextureClient.h> 2661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include <gui/Surface.h> 2761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 28f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala#include <math.h> 29f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 3061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include "Camera2Client.h" 3161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalanamespace android { 3361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#define ALOG1(...) ALOGD_IF(gLogLevel >= 1, __VA_ARGS__); 3561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#define ALOG2(...) ALOGD_IF(gLogLevel >= 2, __VA_ARGS__); 3661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatic int getCallingPid() { 3861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return IPCThreadState::self()->getCallingPid(); 3961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 4061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 4161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatic int getCallingUid() { 4261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return IPCThreadState::self()->getCallingUid(); 4361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 4461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 4561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala// Interface used by CameraService 4661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 4761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaCamera2Client::Camera2Client(const sp<CameraService>& cameraService, 4861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala const sp<ICameraClient>& cameraClient, 4961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int cameraId, 5061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int cameraFacing, 5161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int clientPid): 5261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala Client(cameraService, cameraClient, 53f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala cameraId, cameraFacing, clientPid), 546db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState(NOT_INITIALIZED), 55d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mPreviewStreamId(NO_STREAM), 56d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mPreviewRequest(NULL), 57d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureStreamId(NO_STREAM), 58d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureRequest(NULL) 59f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 60a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 6161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 62f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDevice = new Camera2Device(cameraId); 63f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 64f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 65f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::initialize(camera_module_t *module) 66f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 67a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 68f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 69f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 70f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = mDevice->initialize(module); 71f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) { 72f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: unable to initialize device: %s (%d)", 73f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 74f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 75f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 76f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 77f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = buildDefaultParameters(); 78f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) { 79f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: unable to build defaults: %s (%d)", 80f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 81f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 82f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 833cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 84f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (gLogLevel >= 1) { 85f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGD("%s: Default parameters converted from camera %d:", __FUNCTION__, 86f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mCameraId); 873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGD("%s", mParamsFlattened.string()); 88f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 89f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 906db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 916db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 92f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 9361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 9461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 9561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaCamera2Client::~Camera2Client() { 96a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 974ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala ALOGV("%s: Camera %d: Shutting down", __FUNCTION__, mCameraId); 984ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala 99f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDestructionStarted = true; 100f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 101f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala disconnect(); 1023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 10361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 10461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 10561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::dump(int fd, const Vector<String16>& args) { 106611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala String8 result; 1073297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat("Client2[%d] (%p) PID: %d, dump:\n", 108611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala mCameraId, 109611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala getCameraClient()->asBinder().get(), 110611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala mClientPid); 1117f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" State: "); 1127f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala#define CASE_APPEND_ENUM(x) case x: result.append(#x "\n"); break; 1137f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1144ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala result.append(getStateName(mState)); 1157f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1164ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala result.append("\n Current parameters:\n"); 1177f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Preview size: %d x %d\n", 1187f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.previewWidth, mParameters.previewHeight); 1197f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Preview FPS range: %d - %d\n", 1207f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.previewFpsRangeMin, mParameters.previewFpsRangeMax); 1217f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Preview HAL pixel format: 0x%x\n", 1227f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.previewFormat); 1237f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Picture size: %d x %d\n", 1247f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.pictureWidth, mParameters.pictureHeight); 1257f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Jpeg thumbnail size: %d x %d\n", 1267f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.jpegThumbWidth, mParameters.jpegThumbHeight); 1277f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Jpeg quality: %d, thumbnail quality: %d\n", 1287f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.jpegQuality, mParameters.jpegThumbQuality); 1297f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Jpeg rotation: %d\n", mParameters.jpegRotation); 1307f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" GPS tags %s\n", 1317f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsEnabled ? "enabled" : "disabled"); 1327f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala if (mParameters.gpsEnabled) { 1337f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" GPS lat x long x alt: %f x %f x %f\n", 1347f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsLatitude, mParameters.gpsLongitude, 1357f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsAltitude); 1367f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" GPS timestamp: %lld\n", 1377f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsTimestamp); 1387f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" GPS processing method: %s\n", 1397f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.gpsProcessingMethod.string()); 1407f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1417f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1427f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" White balance mode: "); 1437f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.wbMode) { 1447f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_AUTO) 1457f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_INCANDESCENT) 1467f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_FLUORESCENT) 1477f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_WARM_FLUORESCENT) 1487f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_DAYLIGHT) 1497f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT) 1507f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_TWILIGHT) 1517f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AWB_SHADE) 1527f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 1537f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1547f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1557f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Effect mode: "); 1567f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.effectMode) { 1577f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_OFF) 1587f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_MONO) 1597f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_NEGATIVE) 1607f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_SOLARIZE) 1617f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_SEPIA) 1627f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_POSTERIZE) 1637f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_WHITEBOARD) 1647f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_BLACKBOARD) 1657f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_EFFECT_AQUA) 1667f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 1677f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1687f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1697f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Antibanding mode: "); 1707f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.antibandingMode) { 1717f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AE_ANTIBANDING_AUTO) 1727f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AE_ANTIBANDING_OFF) 1737f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AE_ANTIBANDING_50HZ) 1747f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_AE_ANTIBANDING_60HZ) 1757f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 1767f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1777f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 1787f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Scene mode: "); 1797f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.sceneMode) { 1807f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED: 1817f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append("AUTO\n"); break; 1827f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_ACTION) 1837f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_PORTRAIT) 1847f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_LANDSCAPE) 1857f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_NIGHT) 1867f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT) 1877f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_THEATRE) 1887f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_BEACH) 1897f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_SNOW) 1907f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_SUNSET) 1917f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO) 1927f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_FIREWORKS) 1937f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_SPORTS) 1947f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_PARTY) 1957f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT) 1967f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(ANDROID_CONTROL_SCENE_MODE_BARCODE) 1977f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 1987f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 1997f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2007f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Flash mode: "); 2017f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.flashMode) { 2027f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_OFF) 2037f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_AUTO) 2047f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_ON) 2057f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_TORCH) 2067f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_RED_EYE) 2077f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FLASH_MODE_INVALID) 2087f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 2097f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2107f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2117f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Focus mode: "); 2127f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala switch (mParameters.focusMode) { 2137f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_AUTO) 2147f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_MACRO) 2157f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_CONTINUOUS_VIDEO) 2167f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_CONTINUOUS_PICTURE) 2177f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_EDOF) 2187f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_INFINITY) 2197f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_FIXED) 2207f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala CASE_APPEND_ENUM(Parameters::FOCUS_MODE_INVALID) 2217f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala default: result.append("UNKNOWN\n"); 2227f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2237f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2247f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.append(" Focusing areas:\n"); 2257f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala for (size_t i = 0; i < mParameters.focusingAreas.size(); i++) { 2267f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" [ (%d, %d, %d, %d), weight %d ]\n", 2277f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].left, 2287f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].top, 2297f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].right, 2307f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].bottom, 2317f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.focusingAreas[i].weight); 2327f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2337f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2347f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Exposure compensation index: %d\n", 2357f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.exposureCompensation); 2367f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2377f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" AE lock %s, AWB lock %s\n", 2387f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.autoExposureLock ? "enabled" : "disabled", 2397f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.autoWhiteBalanceLock ? "enabled" : "disabled" ); 2407f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2417f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" Metering areas:\n"); 2427f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala for (size_t i = 0; i < mParameters.meteringAreas.size(); i++) { 2437f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala result.appendFormat(" [ (%d, %d, %d, %d), weight %d ]\n", 2447f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].left, 2457f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].top, 2467f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].right, 2477f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].bottom, 2487f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.meteringAreas[i].weight); 2497f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala } 2507f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2513297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat(" Zoom index: %d\n", mParameters.zoom); 2523297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat(" Video size: %d x %d\n", mParameters.videoWidth, 2537f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.videoHeight); 2547f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2553297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat(" Recording hint is %s\n", 2567f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.recordingHint ? "set" : "not set"); 2577f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2583297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat(" Video stabilization is %s\n", 2597f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala mParameters.videoStabilization ? "enabled" : "disabled"); 2607f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2613297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.append(" Current streams:\n"); 2623297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat(" Preview stream ID: %d\n", mPreviewStreamId); 2633297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.appendFormat(" Capture stream ID: %d\n", mCaptureStreamId); 2643297daae9681004775012faba9181d65e097e00cEino-Ville Talvala 2653297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.append(" Current requests:\n"); 2663297daae9681004775012faba9181d65e097e00cEino-Ville Talvala if (mPreviewRequest != NULL) { 2673297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.append(" Preview request:\n"); 2683297daae9681004775012faba9181d65e097e00cEino-Ville Talvala write(fd, result.string(), result.size()); 2693297daae9681004775012faba9181d65e097e00cEino-Ville Talvala dump_camera_metadata(mPreviewRequest, fd, 2); 2703297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } else { 2713297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result.append(" Preview request: undefined\n"); 2723297daae9681004775012faba9181d65e097e00cEino-Ville Talvala write(fd, result.string(), result.size()); 2733297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 2743297daae9681004775012faba9181d65e097e00cEino-Ville Talvala 2753297daae9681004775012faba9181d65e097e00cEino-Ville Talvala if (mCaptureRequest != NULL) { 2763297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result = " Capture request:\n"; 2773297daae9681004775012faba9181d65e097e00cEino-Ville Talvala write(fd, result.string(), result.size()); 2783297daae9681004775012faba9181d65e097e00cEino-Ville Talvala dump_camera_metadata(mCaptureRequest, fd, 2); 2793297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } else { 2803297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result = " Capture request: undefined\n"; 2813297daae9681004775012faba9181d65e097e00cEino-Ville Talvala write(fd, result.string(), result.size()); 2823297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 2833297daae9681004775012faba9181d65e097e00cEino-Ville Talvala 2843297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result = " Device dump:\n"; 285611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala write(fd, result.string(), result.size()); 2867f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2873297daae9681004775012faba9181d65e097e00cEino-Ville Talvala status_t res = mDevice->dump(fd, args); 2883297daae9681004775012faba9181d65e097e00cEino-Ville Talvala if (res != OK) { 2893297daae9681004775012faba9181d65e097e00cEino-Ville Talvala result = String8::format(" Error dumping device: %s (%d)", 2903297daae9681004775012faba9181d65e097e00cEino-Ville Talvala strerror(-res), res); 2913297daae9681004775012faba9181d65e097e00cEino-Ville Talvala write(fd, result.string(), result.size()); 2923297daae9681004775012faba9181d65e097e00cEino-Ville Talvala } 2937f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala 2947f61084a428a5c7afbeff2fa9e9839baf9018020Eino-Ville Talvala#undef CASE_APPEND_ENUM 295611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala return NO_ERROR; 29661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 29761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 2984ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvalaconst char* Camera2Client::getStateName(State state) { 2994ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala#define CASE_ENUM_TO_CHAR(x) case x: return(#x); break; 3004ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala switch(state) { 3014ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(NOT_INITIALIZED) 3024ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(STOPPED) 3034ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(WAITING_FOR_PREVIEW_WINDOW) 3044ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(PREVIEW) 3054ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(RECORD) 3064ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(STILL_CAPTURE) 3074ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala CASE_ENUM_TO_CHAR(VIDEO_SNAPSHOT) 3084ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala default: 3094ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala return "Unknown state!"; 3104ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala break; 3114ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala } 3124ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala#undef CASE_ENUM_TO_CHAR 3134ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala} 3144ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala 31561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala// ICamera interface 31661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 31761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::disconnect() { 318a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 319ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 320ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 321f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (mDevice == 0) return; 322f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 323ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala stopPreviewLocked(); 3246db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 325d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mDevice->waitUntilDrained(); 326d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 327d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mPreviewStreamId != NO_STREAM) { 3286db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mDevice->deleteStream(mPreviewStreamId); 329d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mPreviewStreamId = NO_STREAM; 330d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 331d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 332d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCaptureStreamId != NO_STREAM) { 333d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mDevice->deleteStream(mCaptureStreamId); 334d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureStreamId = NO_STREAM; 3356db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 336f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 33761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala CameraService::Client::disconnect(); 33861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 33961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 34061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::connect(const sp<ICameraClient>& client) { 341a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 342ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 343ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 34461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 34561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 34661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 34761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::lock() { 348a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 349ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 350ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 35161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 35261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 35361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 35461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::unlock() { 355a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 356ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 357ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 35861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 35961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 36061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3616db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewDisplay( 3626db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<Surface>& surface) { 363a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 364ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 365ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 366ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala if (mState >= PREVIEW) return INVALID_OPERATION; 3676db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3686db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<IBinder> binder; 3696db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<ANativeWindow> window; 3706db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (surface != 0) { 3716db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala binder = surface->asBinder(); 3726db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala window = surface; 3736db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 3746db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 375d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return setPreviewWindowLocked(binder,window); 37661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 37761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3786db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewTexture( 3796db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<ISurfaceTexture>& surfaceTexture) { 380a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 381ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 382ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 383ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala if (mState >= PREVIEW) return INVALID_OPERATION; 3846db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3856db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<IBinder> binder; 3866db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<ANativeWindow> window; 3876db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (surfaceTexture != 0) { 3886db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala binder = surfaceTexture->asBinder(); 3896db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala window = new SurfaceTextureClient(surfaceTexture); 3906db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 391d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return setPreviewWindowLocked(binder, window); 3926db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala} 3936db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 394d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvalastatus_t Camera2Client::setPreviewWindowLocked(const sp<IBinder>& binder, 3956db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<ANativeWindow>& window) { 396a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 3976db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 3986db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 3996db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (binder == mPreviewSurface) { 4006db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return NO_ERROR; 4016db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4026db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 403d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // TODO: Should wait until HAL has no remaining requests 404d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 405d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mPreviewStreamId != NO_STREAM) { 4066db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->deleteStream(mPreviewStreamId); 4076db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 4086db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 4096db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4106db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4116db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->createStream(window, 4123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewWidth, mParameters.previewHeight, 413d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala CAMERA2_HAL_PIXEL_FORMAT_OPAQUE, 0, 4146db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &mPreviewStreamId); 4156db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 4166db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 4176db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4186db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 419bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala mPreviewSurface = binder; 420bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala 4216db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState == WAITING_FOR_PREVIEW_WINDOW) { 422d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return startPreviewLocked(); 4236db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4246db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4256db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 42661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 42761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 42861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::setPreviewCallbackFlag(int flag) { 429a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 430ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 43161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 43261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 43361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startPreview() { 434a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 435ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 436d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return startPreviewLocked(); 437d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala} 438ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 439d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvalastatus_t Camera2Client::startPreviewLocked() { 440d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ATRACE_CALL(); 4416db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 4424ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala if (mState >= PREVIEW) { 4434ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala ALOGE("%s: Can't start preview in state %s", 4444ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala __FUNCTION__, getStateName(mState)); 4454ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala return INVALID_OPERATION; 4464ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala } 4476db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 448d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mPreviewStreamId == NO_STREAM) { 4496db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = WAITING_FOR_PREVIEW_WINDOW; 4506db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 4516db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4526db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4536db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewRequest == NULL) { 4546db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala updatePreviewRequest(); 4556db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4566db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4576db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala uint8_t outputStream = mPreviewStreamId; 4586db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4596db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala camera_metadata_entry_t outputStreams; 4606db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = find_camera_metadata_entry(mPreviewRequest, 4616db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ANDROID_REQUEST_OUTPUT_STREAMS, 4626db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &outputStreams); 4636db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res == NAME_NOT_FOUND) { 4646db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = add_camera_metadata_entry(mPreviewRequest, 4656db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ANDROID_REQUEST_OUTPUT_STREAMS, 4666db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &outputStream, 1); 4676db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } else if (res == OK) { 4686db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = update_camera_metadata_entry(mPreviewRequest, 4696db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala outputStreams.index, &outputStream, 1, NULL); 4706db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4716db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4726db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 4736db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOGE("%s: Camera %d: Unable to set up preview request: %s (%d)", 4746db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 4756db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 4766db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 4776db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4786db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4796db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->setStreamingRequest(mPreviewRequest); 4806db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 481bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala ALOGE("%s: Camera %d: Unable to set preview request to start preview: " 482bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala "%s (%d)", 4836db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 4846db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 4856db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 4866db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 4876db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = PREVIEW; 4886db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 4896db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 49061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 49161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 49261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopPreview() { 493a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 494ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 495ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala stopPreviewLocked(); 496ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala} 497ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 498ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvalavoid Camera2Client::stopPreviewLocked() { 499ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala ATRACE_CALL(); 500d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala switch (mState) { 501d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case NOT_INITIALIZED: 502d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Call before initialized", 503d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 504d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 505d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case STOPPED: 506d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 507d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case STILL_CAPTURE: 508d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Cannot stop preview during still capture.", 509d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 510d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 511d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case RECORD: 512d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // TODO: Handle record stop here 513d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case PREVIEW: 514d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mDevice->setStreamingRequest(NULL); 515d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case WAITING_FOR_PREVIEW_WINDOW: 516d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mState = STOPPED; 517d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 518d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala default: 519d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unknown state %d", __FUNCTION__, mCameraId, 520d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mState); 521d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 52261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 52361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 52461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::previewEnabled() { 525a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 526ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 5276db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return mState == PREVIEW; 52861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 52961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 53061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::storeMetaDataInBuffers(bool enabled) { 531a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 532ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 53361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 53461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 53561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 53661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startRecording() { 537a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 538ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 53961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 54061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 54161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 54261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopRecording() { 543a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 544ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 54561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 54661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 54761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::recordingEnabled() { 548a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 549ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 55061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 55161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 55261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 55361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::releaseRecordingFrame(const sp<IMemory>& mem) { 554a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 555ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 55661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 55761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 55861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::autoFocus() { 559a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 560ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 5616db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 56261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 56361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 56461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::cancelAutoFocus() { 565a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 566ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 5676db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 56861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 56961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 57061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::takePicture(int msgType) { 571a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 572ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 573d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala status_t res; 574d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 575d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala switch (mState) { 576d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case NOT_INITIALIZED: 577d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case STOPPED: 578d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case WAITING_FOR_PREVIEW_WINDOW: 579d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Cannot take picture without preview enabled", 580d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 581d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return INVALID_OPERATION; 582d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case PREVIEW: 583d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case RECORD: 584d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Good to go for takePicture 585d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 586d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case STILL_CAPTURE: 587d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case VIDEO_SNAPSHOT: 588d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Already taking a picture", 589d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 590d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return INVALID_OPERATION; 591d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 592d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 593d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala Mutex::Autolock pl(mParamsLock); 594d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 595d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = updateCaptureStream(); 5964ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala if (res != OK) { 5974ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala ALOGE("%s: Can't set up still image stream: %s (%d)", 5984ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala __FUNCTION__, strerror(-res), res); 5994ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala return res; 6004ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala } 601d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 602d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCaptureRequest == NULL) { 6034ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala res = updateCaptureRequest(); 6044ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala if (res != OK) { 6054ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala ALOGE("%s: Can't set up still image capture request: %s (%d)", 6064ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala __FUNCTION__, strerror(-res), res); 6074ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala return res; 6084ecfec32aca8749baeb634f7c961f804cb1e8f3eEino-Ville Talvala } 609d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 610d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 611d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // TODO: For video snapshot, need 3 streams here 612d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala camera_metadata_entry_t outputStreams; 613d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala uint8_t streamIds[2] = { mPreviewStreamId, mCaptureStreamId }; 614d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = find_camera_metadata_entry(mCaptureRequest, 615d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ANDROID_REQUEST_OUTPUT_STREAMS, 616d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala &outputStreams); 617d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res == NAME_NOT_FOUND) { 618d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = add_camera_metadata_entry(mCaptureRequest, 619d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ANDROID_REQUEST_OUTPUT_STREAMS, 620d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala streamIds, 2); 621d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } else if (res == OK) { 622d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = update_camera_metadata_entry(mCaptureRequest, 623d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala outputStreams.index, streamIds, 2, NULL); 624d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 625d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 626d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 627d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to set up still image capture request: " 628d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "%s (%d)", 629d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 630d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 631d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 632d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 633d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala camera_metadata_t *captureCopy = clone_camera_metadata(mCaptureRequest); 634d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (captureCopy == NULL) { 635d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to copy capture request for HAL device", 636d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 637d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return NO_MEMORY; 638d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 639d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 640d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mState == PREVIEW) { 641d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mDevice->setStreamingRequest(NULL); 642d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 643d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to stop preview for still capture: " 644d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "%s (%d)", 645d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 646d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 647d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 648d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 649d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 650d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mDevice->capture(captureCopy); 651d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 652d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to submit still image capture request: " 653d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "%s (%d)", 654d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 655d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 656d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 657d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 658d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala switch (mState) { 659d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case PREVIEW: 660d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mState = STILL_CAPTURE; 661d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 662d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case RECORD: 663d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mState = VIDEO_SNAPSHOT; 664d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 665d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala default: 666d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unknown state for still capture!", 667d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 668d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return INVALID_OPERATION; 669d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 670d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 671d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return OK; 67261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 67361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 67461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::setParameters(const String8& params) { 675a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 676ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 6776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Mutex::Autolock pl(mParamsLock); 6786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala status_t res; 6796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala CameraParameters newParams(params); 6816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // TODO: Currently ignoring any changes to supposedly read-only 6836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // parameters such as supported preview sizes, etc. Should probably 6846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // produce an error if they're changed. 6856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala /** Extract and verify new parameters */ 6876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala size_t i; 6896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PREVIEW_SIZE 6916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int previewWidth, previewHeight; 6926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getPreviewSize(&previewWidth, &previewHeight); 6936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 6946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (previewWidth != mParameters.previewWidth || 6956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewHeight != mParameters.previewHeight) { 6966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (mState >= PREVIEW) { 6976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Preview size cannot be updated when preview " 6986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala "is active!", __FUNCTION__); 6996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availablePreviewSizes = 7026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES); 7036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availablePreviewSizes.count; i += 2 ) { 7046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availablePreviewSizes.data.i32[i] == previewWidth && 7056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala availablePreviewSizes.data.i32[i+1] == previewHeight) break; 7066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availablePreviewSizes.count) { 7086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested preview size %d x %d is not supported", 7096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, previewWidth, previewHeight); 7106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PREVIEW_FPS_RANGE 7156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int previewFpsRangeMin, previewFpsRangeMax, previewFps = 0; 7166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool fpsRangeChanged = false; 7176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getPreviewFpsRange(&previewFpsRangeMin, &previewFpsRangeMax); 7186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (previewFpsRangeMin != mParameters.previewFpsRangeMin || 7196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFpsRangeMax != mParameters.previewFpsRangeMax) { 7206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala fpsRangeChanged = true; 7216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availablePreviewFpsRanges = 7226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 2); 7236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availablePreviewFpsRanges.count; i += 2) { 7246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if ((availablePreviewFpsRanges.data.i32[i] == 7256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFpsRangeMin) && 7266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala (availablePreviewFpsRanges.data.i32[i+1] == 7276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFpsRangeMax) ) { 7286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala break; 7296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availablePreviewFpsRanges.count) { 7326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested preview FPS range %d - %d is not supported", 7336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, previewFpsRangeMin, previewFpsRangeMax); 7346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFps = previewFpsRangeMin; 7376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PREVIEW_FORMAT 7406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int previewFormat = formatStringToEnum(newParams.getPreviewFormat()); 7416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (previewFormat != mParameters.previewFormat) { 7426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (mState >= PREVIEW) { 7436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Preview format cannot be updated when preview " 7446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala "is active!", __FUNCTION__); 7456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableFormats = 7486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_FORMATS); 7496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableFormats.count; i++) { 7506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availableFormats.data.i32[i] == previewFormat) break; 7516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableFormats.count) { 7536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested preview format %s (0x%x) is not supported", 7546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, newParams.getPreviewFormat(), previewFormat); 7556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PREVIEW_FRAME_RATE 7606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // Deprecated, only use if the preview fps range is unchanged this time. 7616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // The single-value FPS is the same as the minimum of the range. 7626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (!fpsRangeChanged) { 7636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFps = newParams.getPreviewFrameRate(); 7646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (previewFps != mParameters.previewFps) { 7656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableFrameRates = 7666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); 7676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableFrameRates.count; i+=2) { 7686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availableFrameRates.data.i32[i] == previewFps) break; 7696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableFrameRates.count) { 7716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested preview frame rate %d is not supported", 7726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, previewFps); 7736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFpsRangeMin = availableFrameRates.data.i32[i]; 7766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala previewFpsRangeMax = availableFrameRates.data.i32[i+1]; 7776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // PICTURE_SIZE 7816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int pictureWidth, pictureHeight; 7826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getPictureSize(&pictureWidth, &pictureHeight); 7836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (pictureWidth == mParameters.pictureWidth || 7846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala pictureHeight == mParameters.pictureHeight) { 7856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availablePictureSizes = 7866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_JPEG_SIZES); 7876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availablePictureSizes.count; i+=2) { 7886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availablePictureSizes.data.i32[i] == pictureWidth && 7896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala availablePictureSizes.data.i32[i+1] == pictureHeight) break; 7906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availablePictureSizes.count) { 7926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested picture size %d x %d is not supported", 7936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, pictureWidth, pictureHeight); 7946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 7956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 7976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 7986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // JPEG_THUMBNAIL_WIDTH/HEIGHT 7996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int jpegThumbWidth, jpegThumbHeight; 8006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegThumbWidth = 8016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH); 8026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegThumbHeight = 8036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT); 8046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (jpegThumbWidth != mParameters.jpegThumbWidth || 8056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegThumbHeight != mParameters.jpegThumbHeight) { 8066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableJpegThumbSizes = 8076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES); 8086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableJpegThumbSizes.count; i+=2) { 8096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availableJpegThumbSizes.data.i32[i] == jpegThumbWidth && 8106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala availableJpegThumbSizes.data.i32[i+1] == jpegThumbHeight) { 8116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala break; 8126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableJpegThumbSizes.count) { 8156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested JPEG thumbnail size %d x %d is not supported", 8166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, jpegThumbWidth, jpegThumbHeight); 8176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // JPEG_THUMBNAIL_QUALITY 8226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int jpegThumbQuality = 8236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY); 8246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (jpegThumbQuality < 0 || jpegThumbQuality > 100) { 8256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested JPEG thumbnail quality %d is not supported", 8266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, jpegThumbQuality); 8276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // JPEG_QUALITY 8316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int jpegQuality = 8326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_QUALITY); 8336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (jpegQuality < 0 || jpegQuality > 100) { 8346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested JPEG quality %d is not supported", 8356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, jpegQuality); 8366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // ROTATION 8406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int jpegRotation = 8416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_ROTATION); 8426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (jpegRotation != 0 && 8436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegRotation != 90 && 8446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegRotation != 180 && 8456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala jpegRotation != 270) { 8466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested picture rotation angle %d is not supported", 8476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, jpegRotation); 8486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 8516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // GPS 8526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool gpsEnabled = false; 8536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala double gpsLatitude = 0, gpsLongitude = 0, gpsAltitude = 0; 8546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int64_t gpsTimestamp = 0; 8556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala String8 gpsProcessingMethod; 8566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsLatStr = 8576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_LATITUDE); 8586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (gpsLatStr != NULL) { 8596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsLongStr = 8606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_LONGITUDE); 8616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsAltitudeStr = 8626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_ALTITUDE); 8636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsTimeStr = 8646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_TIMESTAMP); 8656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *gpsProcMethodStr = 8666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_PROCESSING_METHOD); 8676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (gpsLongStr == NULL || 8686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsAltitudeStr == NULL || 8696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsTimeStr == NULL || 8706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsProcMethodStr == NULL) { 8716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Incomplete set of GPS parameters provided", 8726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__); 8736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala char *endPtr; 8766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 8776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsLatitude = strtod(gpsLatStr, &endPtr); 8786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || endPtr == gpsLatStr) { 8796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Malformed GPS latitude: %s", __FUNCTION__, gpsLatStr); 8806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 8836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsLongitude = strtod(gpsLongStr, &endPtr); 8846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || endPtr == gpsLongStr) { 8856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Malformed GPS longitude: %s", __FUNCTION__, gpsLongStr); 8866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 8896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsAltitude = strtod(gpsAltitudeStr, &endPtr); 8906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || endPtr == gpsAltitudeStr) { 8916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Malformed GPS altitude: %s", __FUNCTION__, 8926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsAltitudeStr); 8936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 8946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 8956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 8966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsTimestamp = strtoll(gpsTimeStr, &endPtr, 10); 8976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || endPtr == gpsTimeStr) { 8986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Malformed GPS timestamp: %s", __FUNCTION__, gpsTimeStr); 8996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsProcessingMethod = gpsProcMethodStr; 9026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala gpsEnabled = true; 9046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // WHITE_BALANCE 9076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int wbMode = wbModeStringToEnum( 9086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_WHITE_BALANCE) ); 9096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (wbMode != mParameters.wbMode) { 9106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableWbModes = 9116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AWB_AVAILABLE_MODES); 9126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableWbModes.count; i++) { 9136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (wbMode == availableWbModes.data.u8[i]) break; 9146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableWbModes.count) { 9166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested white balance mode %s is not supported", 9176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 9186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_WHITE_BALANCE)); 9196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // EFFECT 9246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int effectMode = effectModeStringToEnum( 9256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_EFFECT) ); 9266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (effectMode != mParameters.effectMode) { 9276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableEffectModes = 9286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_EFFECTS); 9296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableEffectModes.count; i++) { 9306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (effectMode == availableEffectModes.data.u8[i]) break; 9316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableEffectModes.count) { 9336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested effect mode \"%s\" is not supported", 9346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 9356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_EFFECT) ); 9366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // ANTIBANDING 9416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int antibandingMode = abModeStringToEnum( 9426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_ANTIBANDING) ); 9436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (antibandingMode != mParameters.antibandingMode) { 9446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableAbModes = 9456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES); 9466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableAbModes.count; i++) { 9476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (antibandingMode == availableAbModes.data.u8[i]) break; 9486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableAbModes.count) { 9506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested antibanding mode \"%s\" is not supported", 9516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 9526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_ANTIBANDING)); 9536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // SCENE_MODE 9586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int sceneMode = sceneModeStringToEnum( 9596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_SCENE_MODE) ); 9606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (sceneMode != mParameters.sceneMode) { 9616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableSceneModes = 9626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_SCENE_MODES); 9636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableSceneModes.count; i++) { 9646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (sceneMode == availableSceneModes.data.u8[i]) break; 9656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableSceneModes.count) { 9676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested scene mode \"%s\" is not supported", 9686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 9696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_SCENE_MODE)); 9706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 9746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // FLASH_MODE 9756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::flashMode_t flashMode = flashModeStringToEnum( 9766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE) ); 9776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (flashMode != mParameters.flashMode) { 9786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t flashAvailable = 9796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_FLASH_AVAILABLE, 1, 1); 9806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (!flashAvailable.data.u8[0] && 9816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala flashMode != Parameters::FLASH_MODE_OFF) { 9826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested flash mode \"%s\" is not supported: " 9836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala "No flash on device", __FUNCTION__, 9846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE)); 9856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } else if (flashMode == Parameters::FLASH_MODE_RED_EYE) { 9876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableAeModes = 9886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_MODES); 9896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableAeModes.count; i++) { 9906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (flashMode == availableAeModes.data.u8[i]) break; 9916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableAeModes.count) { 9936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested flash mode \"%s\" is not supported", 9946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 9956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE)); 9966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 9976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 9986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } else if (flashMode == -1) { 9996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested flash mode \"%s\" is unknown", 10006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 10016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE)); 10026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // FOCUS_MODE 10076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::focusMode_t focusMode = focusModeStringToEnum( 10086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FOCUS_MODE)); 10096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (focusMode != mParameters.focusMode) { 10106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (focusMode != Parameters::FOCUS_MODE_FIXED) { 10116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t minFocusDistance = 10126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_LENS_MINIMUM_FOCUS_DISTANCE); 10136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (minFocusDistance.data.f[0] == 0) { 10146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested focus mode \"%s\" is not available: " 10156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala "fixed focus lens", 10166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 10176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FOCUS_MODE)); 10186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } else if (focusMode != Parameters::FOCUS_MODE_INFINITY) { 10206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableFocusModes = 10216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AF_AVAILABLE_MODES); 10226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableFocusModes.count; i++) { 10236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (focusMode == availableFocusModes.data.u8[i]) break; 10246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableFocusModes.count) { 10266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested focus mode \"%s\" is not supported", 10276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 10286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_FOCUS_MODE)); 10296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // FOCUS_AREAS 10366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Vector<Parameters::Area> focusingAreas; 10376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala res = parseAreas(newParams.get(CameraParameters::KEY_FOCUS_AREAS), 10386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala &focusingAreas); 10396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala size_t max3aRegions = 10406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala (size_t)staticInfo(ANDROID_CONTROL_MAX_REGIONS, 1, 1).data.i32[0]; 10416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (res == OK) res = validateAreas(focusingAreas, max3aRegions); 10426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (res != OK) { 10436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested focus areas are malformed: %s", 10446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, newParams.get(CameraParameters::KEY_FOCUS_AREAS)); 10456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // EXPOSURE_COMPENSATION 10496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int exposureCompensation = 10506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION); 10516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t exposureCompensationRange = 10526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE); 10536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (exposureCompensation < exposureCompensationRange.data.i32[0] || 10546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala exposureCompensation > exposureCompensationRange.data.i32[1]) { 10556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested exposure compensation index is out of bounds: %d", 10566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, exposureCompensation); 10576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // AUTO_EXPOSURE_LOCK (always supported) 10616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool autoExposureLock = boolFromString( 10626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK)); 10636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // AUTO_WHITEBALANCE_LOCK (always supported) 10656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool autoWhiteBalanceLock = boolFromString( 10666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK)); 10676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // METERING_AREAS 10696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Vector<Parameters::Area> meteringAreas; 10706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala res = parseAreas(newParams.get(CameraParameters::KEY_METERING_AREAS), 10716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala &meteringAreas); 10726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (res == OK) res = validateAreas(focusingAreas, max3aRegions); 10736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (res != OK) { 10746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested metering areas are malformed: %s", 10756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, 10766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_METERING_AREAS)); 10776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // ZOOM 10816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int zoom = newParams.getInt(CameraParameters::KEY_ZOOM); 10826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (zoom < 0 || zoom > (int)NUM_ZOOM_STEPS) { 10836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested zoom level %d is not supported", 10846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, zoom); 10856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 10886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // VIDEO_SIZE 10896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int videoWidth, videoHeight; 10906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.getVideoSize(&videoWidth, &videoHeight); 10916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (videoWidth != mParameters.videoWidth || 10926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala videoHeight != mParameters.videoHeight) { 10936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (mState == RECORD) { 10946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Video size cannot be updated when recording is active!", 10956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__); 10966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 10976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 10986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableVideoSizes = 10996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES); 11006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (i = 0; i < availableVideoSizes.count; i += 2 ) { 11016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (availableVideoSizes.data.i32[i] == videoWidth && 11026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala availableVideoSizes.data.i32[i+1] == videoHeight) break; 11036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (i == availableVideoSizes.count) { 11056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Requested video size %d x %d is not supported", 11066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, videoWidth, videoHeight); 11076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 11086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // RECORDING_HINT (always supported) 11126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool recordingHint = boolFromString( 11136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_RECORDING_HINT) ); 11146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // VIDEO_STABILIZATION 11166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala bool videoStabilization = boolFromString( 11176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala newParams.get(CameraParameters::KEY_VIDEO_STABILIZATION) ); 11186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala camera_metadata_entry_t availableVideoStabilizationModes = 11196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES); 11206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (videoStabilization && availableVideoStabilizationModes.count == 1) { 11216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Video stabilization not supported", __FUNCTION__); 11226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 11236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala /** Update internal parameters */ 11256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewWidth = previewWidth; 11266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewHeight = previewHeight; 11276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewFpsRangeMin = previewFpsRangeMin; 11286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewFpsRangeMax = previewFpsRangeMax; 11296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewFps = previewFps; 11306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.previewFormat = previewFormat; 11316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.pictureWidth = pictureWidth; 11336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.pictureHeight = pictureHeight; 11346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.jpegThumbWidth = jpegThumbWidth; 11366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.jpegThumbHeight = jpegThumbHeight; 11376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.jpegQuality = jpegQuality; 11386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.jpegThumbQuality = jpegThumbQuality; 11396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsEnabled = gpsEnabled; 11416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsLatitude = gpsLatitude; 11426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsLongitude = gpsLongitude; 11436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsAltitude = gpsAltitude; 11446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsTimestamp = gpsTimestamp; 11456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.gpsProcessingMethod = gpsProcessingMethod; 11466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.wbMode = wbMode; 11486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.effectMode = effectMode; 11496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.antibandingMode = antibandingMode; 11506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.sceneMode = sceneMode; 11516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.flashMode = flashMode; 11536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.focusMode = focusMode; 11546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.focusingAreas = focusingAreas; 11566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.exposureCompensation = exposureCompensation; 11576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.autoExposureLock = autoExposureLock; 11586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.autoWhiteBalanceLock = autoWhiteBalanceLock; 11596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.meteringAreas = meteringAreas; 11606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.zoom = zoom; 11616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.videoWidth = videoWidth; 11636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.videoHeight = videoHeight; 11646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.recordingHint = recordingHint; 11666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala mParameters.videoStabilization = videoStabilization; 11676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala updatePreviewRequest(); 1169d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala updateCaptureRequest(); 11706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 11716db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 117261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 1173f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 117461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaString8 Camera2Client::getParameters() const { 1175a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 1176ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 1177ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 1178ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock pl(mParamsLock); 1179ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 11803cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala // TODO: Deal with focus distances 11813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala return mParamsFlattened; 118261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 118361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 118461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) { 1185a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 1186ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 11876db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 118861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 118961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 11903cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala/** Device-related methods */ 11913cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 1192d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvalavoid Camera2Client::onCaptureAvailable() { 1193d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ATRACE_CALL(); 1194d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala status_t res; 1195d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala sp<ICameraClient> currentClient; 1196d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala CpuConsumer::LockedBuffer imgBuffer; 1197d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala { 1198d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala Mutex::Autolock icl(mICameraLock); 1199d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1200d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // TODO: Signal errors here upstream 1201d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mState != STILL_CAPTURE && mState != VIDEO_SNAPSHOT) { 1202d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Still image produced unexpectedly!", 1203d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 1204d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return; 1205d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1206d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1207d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mCaptureConsumer->lockNextBuffer(&imgBuffer); 1208d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 1209d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Error receiving still image buffer: %s (%d)", 1210d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 1211d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return; 1212d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1213d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1214d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (imgBuffer.format != HAL_PIXEL_FORMAT_BLOB) { 1215d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unexpected format for still image: " 1216d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "%x, expected %x", __FUNCTION__, mCameraId, 1217d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala imgBuffer.format, 1218d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala HAL_PIXEL_FORMAT_BLOB); 1219d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureConsumer->unlockBuffer(imgBuffer); 1220d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return; 1221d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1222d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1223d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // TODO: Optimize this to avoid memcopy 1224d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala void* captureMemory = mCaptureHeap->getBase(); 1225d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala size_t size = mCaptureHeap->getSize(); 1226d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala memcpy(captureMemory, imgBuffer.data, size); 1227d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1228d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureConsumer->unlockBuffer(imgBuffer); 1229d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 1230d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala currentClient = mCameraClient; 1231d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala switch (mState) { 1232d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case STILL_CAPTURE: 1233d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mState = STOPPED; 1234d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 1235d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala case VIDEO_SNAPSHOT: 1236d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mState = RECORD; 1237d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 1238d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala default: 1239d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unexpected state %d", __FUNCTION__, 1240d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCameraId, mState); 1241d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala break; 1242d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1243d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1244d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Call outside mICameraLock to allow re-entrancy from notification 1245d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (currentClient != 0) { 1246d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala currentClient->dataCallback(CAMERA_MSG_COMPRESSED_IMAGE, 1247d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureMemory, NULL); 1248d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 1249d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala} 1250d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 12513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvalacamera_metadata_entry_t Camera2Client::staticInfo(uint32_t tag, 12523cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala size_t minCount, size_t maxCount) { 12533cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala status_t res; 12543cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t entry; 12553cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 12563cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala tag, 12573cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala &entry); 12583cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (CC_UNLIKELY( res != OK )) { 12593cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagSection = get_camera_metadata_section_name(tag); 12603cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagSection == NULL) tagSection = "<unknown>"; 12613cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagName = get_camera_metadata_tag_name(tag); 12623cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagName == NULL) tagName = "<unknown>"; 12633cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 12643cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGE("Error finding static metadata entry '%s.%s' (%x): %s (%d)", 12653cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala tagSection, tagName, tag, strerror(-res), res); 12663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.count = 0; 12673cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.data.u8 = NULL; 12683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } else if (CC_UNLIKELY( 12693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala (minCount != 0 && entry.count < minCount) || 12703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala (maxCount != 0 && entry.count > maxCount) ) ) { 12713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagSection = get_camera_metadata_section_name(tag); 12723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagSection == NULL) tagSection = "<unknown>"; 12733cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagName = get_camera_metadata_tag_name(tag); 12743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagName == NULL) tagName = "<unknown>"; 12753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGE("Malformed static metadata entry '%s.%s' (%x):" 12763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "Expected between %d and %d values, but got %d values", 12773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala tagSection, tagName, tag, minCount, maxCount, entry.count); 12783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.count = 0; 12793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.data.u8 = NULL; 12803cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } 12813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 12823cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala return entry; 12833cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala} 12843cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 12853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala/** Utility methods */ 12863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 1287f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1288f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::buildDefaultParameters() { 1289a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 1290ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala Mutex::Autolock pl(mParamsLock); 1291ac45eb3dfa7347f7b8c98be1111b2a5f9e344c46Eino-Ville Talvala 1292f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 12933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters params; 1294f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 12953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableProcessedSizes = 12963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 2); 12973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableProcessedSizes.count) return NO_INIT; 1298f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1299f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick more intelligently 13003cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewWidth = availableProcessedSizes.data.i32[0]; 13013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewHeight = availableProcessedSizes.data.i32[1]; 13023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.videoWidth = mParameters.previewWidth; 13033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.videoHeight = mParameters.previewHeight; 13043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 13053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setPreviewSize(mParameters.previewWidth, mParameters.previewHeight); 13063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setVideoSize(mParameters.videoWidth, mParameters.videoHeight); 13073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO, 13083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8::format("%dx%d", 13093cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewWidth, mParameters.previewHeight)); 1310f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1311f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewSizes; 1312f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableProcessedSizes.count; i += 2) { 1313f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewSizes += ","; 1314f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes += String8::format("%dx%d", 1315f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i], 1316f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i+1]); 1317f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 13183cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, 1319f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 13203cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES, 1321f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 1322f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1323f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 13243cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableFpsRanges = 13253cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 2); 13263cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableFpsRanges.count) return NO_INIT; 1327f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 13283cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMin = availableFpsRanges.data.i32[0]; 13293cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMax = availableFpsRanges.data.i32[1]; 1330f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 13313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, 13323cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8::format("%d,%d", 13333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMin, 13343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMax)); 1335f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1336f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1337f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFpsRange; 1338f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 1339f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFpsRange += ","; 1340f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange += String8::format("(%d,%d)", 1341f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i], 1342f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i+1]); 1343f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 13443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, 1345f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange); 1346f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1347f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 13483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; 13493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FORMAT, 13503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala formatEnumToString(mParameters.previewFormat)); // NV21 13513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 13523cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableFormats = 13533cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_FORMATS); 1354f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1355f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1356f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFormats; 1357f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 1358f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFormats.count; i++) { 1359f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedPreviewFormats += ","; 1360f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1361f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableFormats.data.i32[i]) { 1362f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: 1363bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1364bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV422SP; 1365f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1366f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: 1367bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1368bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV420SP; 1369f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1370f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: 1371bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1372bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV422I; 1373f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1374f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: 1375bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1376bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV420P; 1377f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1378f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: 1379bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedPreviewFormats += 1380bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::PIXEL_FORMAT_RGB565; 1381f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1382f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not advertizing JPEG, RAW_SENSOR, etc, for preview formats 1383f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 1384f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1385f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1386f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1387f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown preview format: %x", 1388f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableFormats.data.i32[i]); 1389f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1390f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1391f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1392f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 13933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS, 1394f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats); 1395f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1396f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1397f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // PREVIEW_FRAME_RATE / SUPPORTED_PREVIEW_FRAME_RATES are deprecated, but 1398f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // still have to do something sane for them 1399f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14003cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FRAME_RATE, 14013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMin); 1402f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1403f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1404f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFrameRates; 1405f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 1406f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFrameRates += ","; 1407f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates += String8::format("%d", 1408f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i]); 1409f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 14103cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES, 1411f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates); 1412f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1413f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableJpegSizes = 14153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 2); 14163cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableJpegSizes.count) return NO_INIT; 1417f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1418f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick maximum 14193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.pictureWidth = availableJpegSizes.data.i32[0]; 14203cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.pictureHeight = availableJpegSizes.data.i32[1]; 1421f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14223cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setPictureSize(mParameters.pictureWidth, 14233cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.pictureHeight); 1424f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1425f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1426f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPictureSizes; 1427f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegSizes.count; i += 2) { 1428f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPictureSizes += ","; 1429f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes += String8::format("%dx%d", 1430f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i], 1431f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i+1]); 1432f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 14333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, 1434f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes); 1435f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1436f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14373cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setPictureFormat(CameraParameters::PIXEL_FORMAT_JPEG); 14383cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS, 14393cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::PIXEL_FORMAT_JPEG); 1440f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14413cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableJpegThumbnailSizes = 14423cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, 2); 14433cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableJpegThumbnailSizes.count) return NO_INIT; 1444f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1445f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick default thumbnail size sensibly 14463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbWidth = availableJpegThumbnailSizes.data.i32[0]; 14473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbHeight = availableJpegThumbnailSizes.data.i32[1]; 1448f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, 14503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbWidth); 14513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, 14523cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbHeight); 1453f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1454f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1455f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedJpegThumbSizes; 1456f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegThumbnailSizes.count; i += 2) { 1457f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedJpegThumbSizes += ","; 1458f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes += String8::format("%dx%d", 1459f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i], 1460f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i+1]); 1461f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 14623cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, 1463f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes); 1464f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1465f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 14663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbQuality = 90; 14673cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, 14683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbQuality); 14693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegQuality = 90; 14703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_QUALITY, 14713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegQuality); 14723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegRotation = 0; 14733cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ROTATION, 14743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegRotation); 14753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 14763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.gpsEnabled = false; 14773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.gpsProcessingMethod = "unknown"; 14783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala // GPS fields in CameraParameters are not set by implementation 14793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 14803cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.wbMode = ANDROID_CONTROL_AWB_AUTO; 14813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_WHITE_BALANCE, 14823cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::WHITE_BALANCE_AUTO); 14833cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 14843cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableWhiteBalanceModes = 14853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AWB_AVAILABLE_MODES); 1486f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1487f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedWhiteBalance; 1488f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 1489f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableWhiteBalanceModes.count; i++) { 1490f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedWhiteBalance += ","; 1491f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1492f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableWhiteBalanceModes.data.u8[i]) { 1493f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_AUTO: 1494bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1495bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_AUTO; 1496f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1497f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_INCANDESCENT: 1498bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1499bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_INCANDESCENT; 1500f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1501f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_FLUORESCENT: 1502bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1503bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_FLUORESCENT; 1504f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1505f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_WARM_FLUORESCENT: 1506bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1507bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_WARM_FLUORESCENT; 1508f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1509f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_DAYLIGHT: 1510bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1511bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_DAYLIGHT; 1512f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1513f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT: 1514bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1515bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT; 1516f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1517f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_TWILIGHT: 1518bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1519bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_TWILIGHT; 1520f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1521f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_SHADE: 1522bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedWhiteBalance += 1523bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::WHITE_BALANCE_SHADE; 1524f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1525f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Skipping values not mappable to v1 API 1526f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_OFF: 1527f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1528f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1529f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1530f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown white balance value: %d", 1531f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 1532f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableWhiteBalanceModes.data.u8[i]); 1533f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1534f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1535f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1536f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 15373cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE, 1538f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance); 1539f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1540f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 15413cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.effectMode = ANDROID_CONTROL_EFFECT_OFF; 15423cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_EFFECT, 15433cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::EFFECT_NONE); 15443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 15453cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableEffects = 15463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_EFFECTS); 15473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableEffects.count) return NO_INIT; 1548f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1549f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedEffects; 1550f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 1551f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableEffects.count; i++) { 1552f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedEffects += ","; 1553f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1554f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableEffects.data.u8[i]) { 1555f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_OFF: 1556bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1557bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_NONE; 1558f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1559f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_MONO: 1560bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1561bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_MONO; 1562bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala break; 1563f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_NEGATIVE: 1564bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1565bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_NEGATIVE; 1566f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1567f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SOLARIZE: 1568bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1569bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_SOLARIZE; 1570f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1571f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SEPIA: 1572bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1573bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_SEPIA; 1574f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1575f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_POSTERIZE: 1576bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1577bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_POSTERIZE; 1578f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1579f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_WHITEBOARD: 1580bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1581bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_WHITEBOARD; 1582f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1583f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_BLACKBOARD: 1584bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1585bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_BLACKBOARD; 1586f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1587f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_AQUA: 1588bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedEffects += 1589bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::EFFECT_AQUA; 1590f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1591f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1592f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown effect value: %d", 1593f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableEffects.data.u8[i]); 1594f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1595f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1596f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1597f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 15983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_EFFECTS, supportedEffects); 1599f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1600f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.antibandingMode = ANDROID_CONTROL_AE_ANTIBANDING_AUTO; 16023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ANTIBANDING, 16033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::ANTIBANDING_AUTO); 16043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 16053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableAntibandingModes = 16063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES); 16073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableAntibandingModes.count) return NO_INIT; 1608f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1609f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedAntibanding; 1610f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 1611f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAntibandingModes.count; i++) { 1612f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedAntibanding += ","; 1613f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1614f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAntibandingModes.data.u8[i]) { 1615f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_OFF: 1616bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedAntibanding += 1617bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::ANTIBANDING_OFF; 1618f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1619f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_50HZ: 1620bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedAntibanding += 1621bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::ANTIBANDING_50HZ; 1622f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1623f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_60HZ: 1624bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedAntibanding += 1625bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::ANTIBANDING_60HZ; 1626f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1627f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_AUTO: 1628bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedAntibanding += 1629bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::ANTIBANDING_AUTO; 1630f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1631f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1632f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown antibanding value: %d", 1633f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 1634f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableAntibandingModes.data.u8[i]); 1635f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1636f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1637f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1638f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 16393cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_ANTIBANDING, 1640f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding); 1641f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1642f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 16433cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.sceneMode = ANDROID_CONTROL_OFF; 16443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SCENE_MODE, 16453cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::SCENE_MODE_AUTO); 16463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 16473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableSceneModes = 16483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_SCENE_MODES); 16493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableSceneModes.count) return NO_INIT; 1650f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1651bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala String8 supportedSceneModes(CameraParameters::SCENE_MODE_AUTO); 1652f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 1653f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool noSceneModes = false; 1654f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableSceneModes.count; i++) { 1655f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedSceneModes += ","; 1656f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1657f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableSceneModes.data.u8[i]) { 1658f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED: 1659f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala noSceneModes = true; 1660f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1661f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY: 1662f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not in old API 1663f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1664f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1665f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_ACTION: 1666bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1667bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_ACTION; 1668f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1669f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PORTRAIT: 1670bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1671bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_PORTRAIT; 1672f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1673f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_LANDSCAPE: 1674bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1675bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_LANDSCAPE; 1676f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1677f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT: 1678bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1679bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_NIGHT; 1680f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1681f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT: 1682bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1683bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_NIGHT_PORTRAIT; 1684f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1685f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_THEATRE: 1686bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1687bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_THEATRE; 1688f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1689f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BEACH: 1690bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1691bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_BEACH; 1692f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1693f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SNOW: 1694bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1695bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_SNOW; 1696f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1697f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SUNSET: 1698bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1699bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_SUNSET; 1700f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1701f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO: 1702bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1703bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_STEADYPHOTO; 1704f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1705f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FIREWORKS: 1706bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1707bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_FIREWORKS; 1708f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1709f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SPORTS: 1710bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1711bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_SPORTS; 1712f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1713f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PARTY: 1714bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1715bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_PARTY; 1716f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1717f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT: 1718bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1719bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_CANDLELIGHT; 1720f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1721f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BARCODE: 1722bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedSceneModes += 1723bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::SCENE_MODE_BARCODE; 1724f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1725f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1726f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown scene mode value: %d", 1727bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala __FUNCTION__, mCameraId, 1728bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala availableSceneModes.data.u8[i]); 1729f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1730f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1731f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1732f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1733f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (!noSceneModes) { 17343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_SCENE_MODES, 1735f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes); 1736f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1737f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1738f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 17393cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t flashAvailable = 17403cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_FLASH_AVAILABLE, 1, 1); 17413cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!flashAvailable.count) return NO_INIT; 1742f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 17433cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableAeModes = 17443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_MODES); 17453cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableAeModes.count) return NO_INIT; 1746f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1747f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (flashAvailable.data.u8[0]) { 17483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.flashMode = Parameters::FLASH_MODE_AUTO; 17493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FLASH_MODE, 17503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_AUTO); 17513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 17523cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8 supportedFlashModes(CameraParameters::FLASH_MODE_OFF); 17533cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala supportedFlashModes = supportedFlashModes + 17543cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_AUTO + 17553cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_ON + 17563cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_TORCH; 1757f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAeModes.count; i++) { 1758f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableAeModes.data.u8[i] == 1759f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_ON_AUTO_FLASH_REDEYE) { 17603cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala supportedFlashModes = supportedFlashModes + "," + 17613cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_RED_EYE; 1762f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1763f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1764f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 17653cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 1766f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFlashModes); 17673cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } else { 17683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.flashMode = Parameters::FLASH_MODE_OFF; 17693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FLASH_MODE, 17703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_OFF); 17713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 17723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_OFF); 1773f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1774f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 17753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t minFocusDistance = 17763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_LENS_MINIMUM_FOCUS_DISTANCE, 1, 1); 17773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!minFocusDistance.count) return NO_INIT; 17783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 17793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableAfModes = 17803cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AF_AVAILABLE_MODES); 17813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableAfModes.count) return NO_INIT; 17823cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 1783f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (minFocusDistance.data.f[0] == 0) { 1784f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Fixed-focus lens 17853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusMode = Parameters::FOCUS_MODE_FIXED; 17863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_MODE, 17873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_FIXED); 17883cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 17893cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_FIXED); 1790f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 17913cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusMode = Parameters::FOCUS_MODE_AUTO; 17923cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_MODE, 17933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_AUTO); 17943cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8 supportedFocusModes(CameraParameters::FOCUS_MODE_FIXED); 17953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala supportedFocusModes = supportedFocusModes + "," + 17963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_INFINITY; 1797f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 1798bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala 1799f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAfModes.count; i++) { 1800f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedFocusModes += ","; 1801f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1802f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAfModes.data.u8[i]) { 1803f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_AUTO: 1804bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1805bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_AUTO; 1806f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1807f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_MACRO: 1808bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1809bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_MACRO; 1810f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1811f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_VIDEO: 1812bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1813bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO; 1814f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1815f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_PICTURE: 1816bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1817bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE; 1818f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1819f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_EDOF: 1820bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala supportedFocusModes += 1821bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala CameraParameters::FOCUS_MODE_EDOF; 1822f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1823bd47b7bcfe7f5a97fef81143f4282c41590626feEino-Ville Talvala // Not supported in old API 1824f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_OFF: 1825f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1826f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1827f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 1828f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown AF mode value: %d", 1829f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableAfModes.data.u8[i]); 1830f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 1831f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 1832f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1833f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 18343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 1835f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes); 1836f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1837f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18383cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t max3aRegions = 18393cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_MAX_REGIONS, 1, 1); 18403cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!max3aRegions.count) return NO_INIT; 1841f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18423cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS, 1843f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 18443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_AREAS, 1845f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 18463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusingAreas.clear(); 18473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusingAreas.add(Parameters::Area(0,0,0,0,0)); 18483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 18493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableFocalLengths = 18503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_LENS_AVAILABLE_FOCAL_LENGTHS); 18513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableFocalLengths.count) return NO_INIT; 1852f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1853f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float minFocalLength = availableFocalLengths.data.f[0]; 18543cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_FOCAL_LENGTH, minFocalLength); 1855f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18563cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t sensorSize = 18573cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SENSOR_PHYSICAL_SIZE, 2, 2); 18583cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!sensorSize.count) return NO_INIT; 1859f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1860f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // The fields of view here assume infinity focus, maximum wide angle 1861f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float horizFov = 180 / M_PI * 1862f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[0] / (2 * minFocalLength)); 1863f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float vertFov = 180 / M_PI * 1864f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[1] / (2 * minFocalLength)); 18653cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE, horizFov); 18663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_VERTICAL_VIEW_ANGLE, vertFov); 1867f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.exposureCompensation = 0; 18693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_EXPOSURE_COMPENSATION, 18703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.exposureCompensation); 1871f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t exposureCompensationRange = 18733cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE, 2, 2); 18743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!exposureCompensationRange.count) return NO_INIT; 18753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 18763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION, 1877f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[1]); 18783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION, 1879f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[0]); 1880f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t exposureCompensationStep = 18823cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_STEP, 1, 1); 18833cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!exposureCompensationStep.count) return NO_INIT; 18843cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 18853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP, 1886f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].numerator / 1887f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].denominator); 1888f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18893cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.autoExposureLock = false; 18903cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, 18913cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 18923cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED, 18933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1894f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 18953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.autoWhiteBalanceLock = false; 18963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, 18973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 18983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED, 18993cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1900f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.meteringAreas.add(Parameters::Area(0, 0, 0, 0, 0)); 19023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_METERING_AREAS, 1903f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 19043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_METERING_AREAS, 1905f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 1906f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.zoom = 0; 19083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM, mParameters.zoom); 19093cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_ZOOM, NUM_ZOOM_STEPS - 1); 1910f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t maxDigitalZoom = 19123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_MAX_ZOOM, 1, 1); 19133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!maxDigitalZoom.count) return NO_INIT; 1914f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1915f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 1916f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 zoomRatios; 1917f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoom = 1.f; 1918f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoomIncrement = (maxDigitalZoom.data.f[0] - zoom) / 19196db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala (NUM_ZOOM_STEPS-1); 1920f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 19216db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala for (size_t i=0; i < NUM_ZOOM_STEPS; i++) { 1922f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) zoomRatios += ","; 1923f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 1924f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoomRatios += String8::format("%d", static_cast<int>(zoom * 100)); 1925f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoom += zoomIncrement; 1926f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 19273cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM_RATIOS, zoomRatios); 1928f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1929f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19303cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM_SUPPORTED, 19313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 19323cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED, 19333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1934f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19353cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_DISTANCES, 1936f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Infinity,Infinity,Infinity"); 1937f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19383cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t maxFacesDetected = 19393cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_STATS_MAX_FACE_COUNT, 1, 1); 19403cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW, 1941f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala maxFacesDetected.data.i32[0]); 19423cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW, 1943f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 0); 1944f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19453cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_FRAME_FORMAT, 19463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala formatEnumToString(HAL_PIXEL_FORMAT_YCrCb_420_SP)); 1947f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_RECORDING_HINT, 19493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 1950f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED, 19523cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1953f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19543cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION, 19553cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 19563cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 19573cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableVideoStabilizationModes = 19583cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES); 19593cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableVideoStabilizationModes.count) return NO_INIT; 1960f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1961f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableVideoStabilizationModes.count > 1) { 19623cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 19633cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 1964f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 19653cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 19663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 1967f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 1968f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParamsFlattened = params.flatten(); 19703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 1971f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 1972f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 197361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 19746db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::updatePreviewRequest() { 1975a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 19766db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 19776db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewRequest == NULL) { 19786db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->createDefaultRequest(CAMERA2_TEMPLATE_PREVIEW, 19796db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &mPreviewRequest); 19806db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 19816db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOGE("%s: Camera %d: Unable to create default preview request: " 19826db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala "%s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 19836db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 19846db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 19856db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 19863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala // TODO: Adjust for params changes 19876db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 19886db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala} 19896db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1990d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvalastatus_t Camera2Client::updateCaptureStream() { 1991d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala status_t res; 1992d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Find out buffer size for JPEG 1993d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala camera_metadata_entry_t maxJpegSize = 1994d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala staticInfo(ANDROID_JPEG_MAX_SIZE); 1995d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (maxJpegSize.count == 0) { 1996d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Can't find ANDROID_JPEG_MAX_SIZE!", 1997d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 1998d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return INVALID_OPERATION; 1999d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2000d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 2001d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCaptureConsumer == 0) { 2002d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Create CPU buffer queue endpoint 2003d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureConsumer = new CpuConsumer(1); 2004d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureConsumer->setFrameAvailableListener(new CaptureWaiter(this)); 2005d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureConsumer->setName(String8("Camera2Client::CaptureConsumer")); 2006d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureWindow = new SurfaceTextureClient( 2007d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureConsumer->getProducerInterface()); 2008d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Create memory for API consumption 2009d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureHeap = new MemoryHeapBase(maxJpegSize.data.i32[0], 0, 2010d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "Camera2Client::CaptureHeap"); 2011d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCaptureHeap->getSize() == 0) { 2012d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to allocate memory for capture", 2013d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala __FUNCTION__, mCameraId); 2014d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return NO_MEMORY; 2015d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2016d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureMemory = new MemoryBase(mCaptureHeap, 2017d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 0, maxJpegSize.data.i32[0]); 2018d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2019d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCaptureStreamId == NO_STREAM) { 2020d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Create stream for HAL production 2021d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mDevice->createStream(mCaptureWindow, 2022d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mParameters.pictureWidth, mParameters.pictureHeight, 2023d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala HAL_PIXEL_FORMAT_BLOB, maxJpegSize.data.i32[0], 2024d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala &mCaptureStreamId); 2025d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 2026d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Can't create output stream for capture: " 2027d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "%s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 2028d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 2029d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2030d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 2031d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } else { 2032d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // Check if stream parameters have to change 2033d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala uint32_t currentWidth, currentHeight; 2034d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mDevice->getStreamInfo(mCaptureStreamId, 2035d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ¤tWidth, ¤tHeight, 0); 2036d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 2037d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Error querying capture output stream info: " 2038d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "%s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 2039d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 2040d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2041d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (currentWidth != (uint32_t)mParameters.pictureWidth || 2042d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala currentHeight != (uint32_t)mParameters.pictureHeight) { 2043d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mDevice->deleteStream(mCaptureStreamId); 2044d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 2045d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to delete old output stream " 2046d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala "for capture: %s (%d)", __FUNCTION__, mCameraId, 2047d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala strerror(-res), res); 2048d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 2049d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2050d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala mCaptureStreamId = NO_STREAM; 2051d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return updateCaptureStream(); 2052d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2053d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2054d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return OK; 2055d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala} 2056d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvalastatus_t Camera2Client::updateCaptureRequest() { 2057d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ATRACE_CALL(); 2058d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala status_t res; 2059d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (mCaptureRequest == NULL) { 2060d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala res = mDevice->createDefaultRequest(CAMERA2_TEMPLATE_STILL_CAPTURE, 2061d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala &mCaptureRequest); 2062d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala if (res != OK) { 2063d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala ALOGE("%s: Camera %d: Unable to create default still image request:" 2064d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala " %s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 2065d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return res; 2066d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2067d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala } 2068d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala // TODO: Adjust for params changes 2069d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala return OK; 2070d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala} 2071d4bcfde6bf3e7b28e36f6ec66e6d9e5adebfa949Eino-Ville Talvala 20726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::formatStringToEnum(const char *format) { 20736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 20746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV422SP) ? 20756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_YCbCr_422_SP : // NV16 20766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV420SP) ? 20776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_YCrCb_420_SP : // NV21 20786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV422I) ? 20796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_YCbCr_422_I : // YUY2 20806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV420P) ? 20816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_YV12 : // YV12 20826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_RGB565) ? 20836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_RGB_565 : // RGB565 20846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_RGBA8888) ? 20856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_RGBA_8888 : // RGB8888 20866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_BAYER_RGGB) ? 20876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala HAL_PIXEL_FORMAT_RAW_SENSOR : // Raw sensor data 20886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 20896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 20906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 20913cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvalaconst char* Camera2Client::formatEnumToString(int format) { 20923cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char *fmt; 20933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala switch(format) { 20943cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: // NV16 20953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV422SP; 20963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 20973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: // NV21 20983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV420SP; 20993cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 21003cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: // YUY2 21013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV422I; 21023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 21033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: // YV12 21043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV420P; 21053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 21063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: // RGB565 21073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_RGB565; 21083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 21093cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGBA_8888: // RGBA8888 21103cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_RGBA8888; 21113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 21123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 21133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGW("Raw sensor preview format requested."); 21143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_BAYER_RGGB; 21153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 21163cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala default: 21173cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGE("%s: Unknown preview format: %x", 21183cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala __FUNCTION__, format); 21193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = NULL; 21203cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 21213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } 21223cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala return fmt; 21233cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala} 21246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 21256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::wbModeStringToEnum(const char *wbMode) { 21266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 21276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_AUTO) ? 21286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_AUTO : 21296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_INCANDESCENT) ? 21306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_INCANDESCENT : 21316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_FLUORESCENT) ? 21326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_FLUORESCENT : 21336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_WARM_FLUORESCENT) ? 21346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_WARM_FLUORESCENT : 21356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_DAYLIGHT) ? 21366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_DAYLIGHT : 21376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT) ? 21386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT : 21396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_TWILIGHT) ? 21406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_TWILIGHT : 21416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_SHADE) ? 21426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AWB_SHADE : 21436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 21446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 21456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 21466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::effectModeStringToEnum(const char *effectMode) { 21476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 21486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_NONE) ? 21496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_OFF : 21506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_MONO) ? 21516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_MONO : 21526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_NEGATIVE) ? 21536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_NEGATIVE : 21546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_SOLARIZE) ? 21556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_SOLARIZE : 21566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_SEPIA) ? 21576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_SEPIA : 21586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_POSTERIZE) ? 21596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_POSTERIZE : 21606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_WHITEBOARD) ? 21616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_WHITEBOARD : 21626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_BLACKBOARD) ? 21636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_BLACKBOARD : 21646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_AQUA) ? 21656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_EFFECT_AQUA : 21666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 21676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 21686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 21696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::abModeStringToEnum(const char *abMode) { 21706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 21716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_AUTO) ? 21726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_AUTO : 21736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_OFF) ? 21746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_OFF : 21756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_50HZ) ? 21766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_50HZ : 21776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_60HZ) ? 21786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_60HZ : 21796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 21806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 21816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 21826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalaint Camera2Client::sceneModeStringToEnum(const char *sceneMode) { 21836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 21846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_AUTO) ? 21856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED : 21866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_ACTION) ? 21876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_ACTION : 21886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_PORTRAIT) ? 21896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_PORTRAIT : 21906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_LANDSCAPE) ? 21916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_LANDSCAPE : 21926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_NIGHT) ? 21936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_NIGHT : 21946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_NIGHT_PORTRAIT) ? 21956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT : 21966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_THEATRE) ? 21976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_THEATRE : 21986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_BEACH) ? 21996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_BEACH : 22006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_SNOW) ? 22016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_SNOW : 22026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_SUNSET) ? 22036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_SUNSET : 22046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_STEADYPHOTO) ? 22056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO : 22066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_FIREWORKS) ? 22076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_FIREWORKS : 22086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_SPORTS) ? 22096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_SPORTS : 22106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_PARTY) ? 22116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_PARTY : 22126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_CANDLELIGHT) ? 22136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT : 22146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_BARCODE) ? 22156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_BARCODE: 22166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala -1; 22176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 22186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 22196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville TalvalaCamera2Client::Parameters::flashMode_t Camera2Client::flashModeStringToEnum( 22206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *flashMode) { 22216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 22226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_OFF) ? 22236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_OFF : 22246861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_AUTO) ? 22256861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_AUTO : 22266861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_ON) ? 22276861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_ON : 22286861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_RED_EYE) ? 22296861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_RED_EYE : 22306861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_TORCH) ? 22316861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_TORCH : 22326861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FLASH_MODE_INVALID; 22336861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 22346861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 22356861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville TalvalaCamera2Client::Parameters::focusMode_t Camera2Client::focusModeStringToEnum( 22366861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char *focusMode) { 22376861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return 22386861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_AUTO) ? 22396861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_AUTO : 22406861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_INFINITY) ? 22416861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_INFINITY : 22426861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_MACRO) ? 22436861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_MACRO : 22446861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_FIXED) ? 22456861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_FIXED : 22466861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_EDOF) ? 22476861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_EDOF : 22486861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO) ? 22496861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_CONTINUOUS_VIDEO : 22506861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE) ? 22516861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_CONTINUOUS_PICTURE : 22526861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Parameters::FOCUS_MODE_INVALID; 22536861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 22546861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 22556861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalastatus_t Camera2Client::parseAreas(const char *areasCStr, 22566861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala Vector<Parameters::Area> *areas) { 22576861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala static const size_t NUM_FIELDS = 5; 22586861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas->clear(); 22596861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areasCStr == NULL) { 22606861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // If no key exists, use default (0,0,0,0,0) 22616861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas->push(); 22626861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return OK; 22636861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 22646861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala String8 areasStr(areasCStr); 22656861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ssize_t areaStart = areasStr.find("(", 0) + 1; 22666861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala while (areaStart != 0) { 22676861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala const char* area = areasStr.string() + areaStart; 22686861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala char *numEnd; 22696861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala int vals[NUM_FIELDS]; 22706861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (size_t i = 0; i < NUM_FIELDS; i++) { 22716861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala errno = 0; 22726861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala vals[i] = strtol(area, &numEnd, 10); 22736861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (errno || numEnd == area) return BAD_VALUE; 22746861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala area = numEnd + 1; 22756861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 22766861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas->push(Parameters::Area( 22776861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala vals[0], vals[1], vals[2], vals[3], vals[4]) ); 22786861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areaStart = areasStr.find("(", areaStart) + 1; 22796861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 22806861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return OK; 22816861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 22826861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 22836861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalastatus_t Camera2Client::validateAreas(const Vector<Parameters::Area> &areas, 22846861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala size_t maxRegions) { 22856861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // Definition of valid area can be found in 22866861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // include/camera/CameraParameters.h 22876861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areas.size() == 0) return BAD_VALUE; 22886861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areas.size() == 1) { 22896861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areas[0].left == 0 && 22906861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas[0].top == 0 && 22916861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas[0].right == 0 && 22926861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas[0].bottom == 0 && 22936861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala areas[0].weight == 0) { 22946861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala // Single (0,0,0,0,0) entry is always valid (== driver decides) 22956861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return OK; 22966861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 22976861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 22986861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (areas.size() > maxRegions) { 22996861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala ALOGE("%s: Too many areas requested: %d", 23006861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala __FUNCTION__, areas.size()); 23016861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return BAD_VALUE; 23026861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 23036861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 23046861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala for (Vector<Parameters::Area>::const_iterator a = areas.begin(); 23056861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala a != areas.end(); a++) { 23066861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->weight < 1 || a->weight > 1000) return BAD_VALUE; 23076861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->left < -1000 || a->left > 1000) return BAD_VALUE; 23086861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->top < -1000 || a->top > 1000) return BAD_VALUE; 23096861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->right < -1000 || a->right > 1000) return BAD_VALUE; 23106861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->bottom < -1000 || a->bottom > 1000) return BAD_VALUE; 23116861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->left >= a->right) return BAD_VALUE; 23126861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala if (a->top >= a->bottom) return BAD_VALUE; 23136861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala } 23146861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return OK; 23156861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 23166861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 23176861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvalabool Camera2Client::boolFromString(const char *boolStr) { 23186861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala return !boolStr ? false : 23196861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala !strcmp(boolStr, CameraParameters::TRUE) ? true : 23206861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala false; 23216861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala} 23226861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 23236861a4e9f929c2cb4a3131244e01e676c5b28f55Eino-Ville Talvala 232461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} // namespace android 2325