Parameters.h revision e538206d15282afbc5b168d60b1026a5dfcd13c0
12e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala/* 22e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 32e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * 42e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 52e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * you may not use this file except in compliance with the License. 62e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * You may obtain a copy of the License at 72e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * 82e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 92e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * 102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * See the License for the specific language governing permissions and 142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala * limitations under the License. 152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala */ 162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2PARAMETERS_H 182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2PARAMETERS_H 192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include <system/graphics.h> 212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include <utils/Errors.h> 232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include <utils/Mutex.h> 242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include <utils/String8.h> 252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include <utils/Vector.h> 262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include "CameraMetadata.h" 282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalanamespace android { 302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalanamespace camera2 { 312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 32da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala/** 33da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * Current camera state; this is the full state of the Camera under the old 34da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * camera API (contents of the CameraParameters object in a more-efficient 35da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * format, plus other state). The enum values are mostly based off the 36da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * corresponding camera2 enums, not the camera1 strings. A few are defined here 37da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * if they don't cleanly map to camera2 values. 38da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala */ 392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalastruct Parameters { 40da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala /** 41da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * Parameters and other state 42da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala */ 432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int cameraId; 442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int cameraFacing; 452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int previewWidth, previewHeight; 472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t previewFpsRange[2]; 482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int previewFps; // deprecated, here only for tracking changes 492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int previewFormat; 502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int previewTransform; // set by CAMERA_CMD_SET_DISPLAY_ORIENTATION 522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int pictureWidth, pictureHeight; 542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t jpegThumbSize[2]; 562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t jpegQuality, jpegThumbQuality; 572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t jpegRotation; 582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool gpsEnabled; 602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala double gpsCoordinates[3]; 612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int64_t gpsTimestamp; 622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 gpsProcessingMethod; 632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint8_t wbMode; 652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint8_t effectMode; 662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint8_t antibandingMode; 672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint8_t sceneMode; 682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala enum flashMode_t { 702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FLASH_MODE_OFF = 0, 712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FLASH_MODE_AUTO, 722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FLASH_MODE_ON, 732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FLASH_MODE_TORCH, 742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FLASH_MODE_RED_EYE = ANDROID_CONTROL_AE_ON_AUTO_FLASH_REDEYE, 752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FLASH_MODE_INVALID = -1 762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } flashMode; 772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala enum focusMode_t { 792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FOCUS_MODE_AUTO = ANDROID_CONTROL_AF_AUTO, 802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FOCUS_MODE_MACRO = ANDROID_CONTROL_AF_MACRO, 812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FOCUS_MODE_CONTINUOUS_VIDEO = ANDROID_CONTROL_AF_CONTINUOUS_VIDEO, 822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FOCUS_MODE_CONTINUOUS_PICTURE = ANDROID_CONTROL_AF_CONTINUOUS_PICTURE, 832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FOCUS_MODE_EDOF = ANDROID_CONTROL_AF_EDOF, 842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FOCUS_MODE_INFINITY, 852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FOCUS_MODE_FIXED, 862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FOCUS_MODE_INVALID = -1 872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } focusMode; 882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala struct Area { 902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int left, top, right, bottom; 912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int weight; 922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Area() {} 932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Area(int left, int top, int right, int bottom, int weight): 942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala left(left), top(top), right(right), bottom(bottom), 952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala weight(weight) {} 962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala }; 972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Vector<Area> focusingAreas; 982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t exposureCompensation; 1002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool autoExposureLock; 1012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool autoWhiteBalanceLock; 1022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Vector<Area> meteringAreas; 1042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int zoom; 1062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int videoWidth, videoHeight; 1082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool recordingHint; 1102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool videoStabilization; 1112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 112e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter enum lightFxMode_t { 113e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter LIGHTFX_NONE = 0, 114e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter LIGHTFX_LOWLIGHT, 115e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter LIGHTFX_HDR 116e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter } lightFx; 117e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter 1182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 paramsFlattened; 1192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // These parameters are also part of the camera API-visible state, but not 1212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // directly listed in Camera.Parameters 1222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool storeMetadataInBuffers; 1232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool playShutterSound; 1242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool enableFaceDetect; 1252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool enableFocusMoveMessages; 1272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int afTriggerCounter; 1282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int currentAfTriggerId; 1292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool afInMotion; 1302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 131da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala int precaptureTriggerCounter; 132da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 1332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint32_t previewCallbackFlags; 1342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool previewCallbackOneShot; 1352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 136da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala bool zslMode; 137da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 1382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Overall camera state 1392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala enum State { 1402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala DISCONNECTED, 1412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala STOPPED, 1422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala WAITING_FOR_PREVIEW_WINDOW, 1432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala PREVIEW, 1442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala RECORD, 1452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala STILL_CAPTURE, 1462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala VIDEO_SNAPSHOT 1472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } state; 1482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Number of zoom steps to simulate 150161fac83b369f4873859a101b6a71efeb596bd4aEino-Ville Talvala static const unsigned int NUM_ZOOM_STEPS = 30; 1512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Full static camera info, object owned by someone else, such as 1532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Camera2Device. 1542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const CameraMetadata *info; 1552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Fast-access static device information; this is a subset of the 1572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // information available through the staticInfo() method, used for 1582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // frequently-accessed values or values that have to be calculated from the 1592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // static information. 1602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala struct DeviceInfo { 1612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t arrayWidth; 1622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t arrayHeight; 1632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint8_t bestFaceDetectMode; 1642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t maxFaces; 1652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } fastInfo; 1662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 167da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala /** 168da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * Parameter manipulation and setup methods 169da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala */ 1702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters(int cameraId, int cameraFacing); 1722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ~Parameters(); 1732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Sets up default parameters 1752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala status_t initialize(const CameraMetadata *info); 1762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Build fast device info 1782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala status_t buildFastInfo(); 1792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Get entry from camera static characteristics information. min/maxCount 1812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // are used for error checking the number of values in the entry. 0 for 1822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // max/minCount means to do no bounds check in that direction. In case of 1832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // error, the entry data pointer is null and the count is 0. 1842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t staticInfo(uint32_t tag, 1852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala size_t minCount=0, size_t maxCount=0) const; 1862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Validate and update camera parameters based on new settings 1882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala status_t set(const String8 ¶ms); 1892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 190da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala // Update passed-in request for common parameters 191da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala status_t updateRequest(CameraMetadata *request) const; 192da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 1932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Static methods for debugging and converting between camera1 and camera2 1942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // parameters 1952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static const char *getStateName(State state); 1972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int formatStringToEnum(const char *format); 1992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static const char *formatEnumToString(int format); 2002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int wbModeStringToEnum(const char *wbMode); 2022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int effectModeStringToEnum(const char *effectMode); 2032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int abModeStringToEnum(const char *abMode); 2042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int sceneModeStringToEnum(const char *sceneMode); 2052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static flashMode_t flashModeStringToEnum(const char *flashMode); 2062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static focusMode_t focusModeStringToEnum(const char *focusMode); 207e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter static lightFxMode_t lightFxStringToEnum(const char *lightFxMode); 2082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static status_t parseAreas(const char *areasCStr, 2092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Vector<Area> *areas); 2102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static status_t validateAreas(const Vector<Area> &areas, 2112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala size_t maxRegions); 2122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static bool boolFromString(const char *boolStr); 2132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Map from camera orientation + facing to gralloc transform enum 2152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int degToTransform(int degrees, bool mirror); 2162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Transform between (-1000,-1000)-(1000,1000) normalized coords from camera 2182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // API and HAL2 (0,0)-(activePixelArray.width/height) coordinates 2192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int arrayXToNormalized(int width) const; 2202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int arrayYToNormalized(int height) const; 2212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int normalizedXToArray(int x) const; 2222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int normalizedYToArray(int y) const; 2232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; 2252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala// This class encapsulates the Parameters class so that it can only be accessed 2272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala// by constructing a Lock object, which locks the SharedParameter's mutex. 2282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaclass SharedParameters { 2292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala public: 2302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala SharedParameters(int cameraId, int cameraFacing): 2312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mParameters(cameraId, cameraFacing) { 2322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 2332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala template<typename S, typename P> 2352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala class BaseLock { 2362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala public: 2372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala BaseLock(S &p): 2382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mParameters(p.mParameters), 2392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mSharedParameters(p) { 2402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mSharedParameters.mLock.lock(); 2412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 2422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ~BaseLock() { 2442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mSharedParameters.mLock.unlock(); 2452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 2462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala P &mParameters; 2472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala private: 2482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Disallow copying, default construction 2492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala BaseLock(); 2502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala BaseLock(const BaseLock &); 2512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala BaseLock &operator=(const BaseLock &); 2522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala S &mSharedParameters; 2532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala }; 2542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala typedef BaseLock<SharedParameters, Parameters> Lock; 2552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala typedef BaseLock<const SharedParameters, const Parameters> ReadLock; 2562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Access static info, read-only and immutable, so no lock needed 2582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t staticInfo(uint32_t tag, 2592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala size_t minCount=0, size_t maxCount=0) const { 2602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return mParameters.staticInfo(tag, minCount, maxCount); 2612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 2622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Only use for dumping or other debugging 2642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const Parameters &unsafeAccess() { 2652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return mParameters; 2662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 2672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala private: 2682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters mParameters; 2692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mutable Mutex mLock; 2702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; 2712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; // namespace camera2 2742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; // namespace android 2752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#endif 277