Parameters.h revision ce6249980434dd04e0eac397083d917cdc4452e9
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> 268a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala#include <utils/KeyedVector.h> 278a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala#include <camera/CameraParameters.h> 287efa520c76e6a1f6b3146404cc6aca5a8353583aIgor Murashkin#include <camera/CameraMetadata.h> 292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalanamespace android { 312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalanamespace camera2 { 322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 33da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala/** 34da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * Current camera state; this is the full state of the Camera under the old 35da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * camera API (contents of the CameraParameters object in a more-efficient 36da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * format, plus other state). The enum values are mostly based off the 37da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * corresponding camera2 enums, not the camera1 strings. A few are defined here 38da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * if they don't cleanly map to camera2 values. 39da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala */ 402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalastruct Parameters { 41da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala /** 42da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * Parameters and other state 43da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala */ 442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int cameraId; 452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int cameraFacing; 462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int previewWidth, previewHeight; 482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t previewFpsRange[2]; 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]; 56c695b7c660e1fe62fca35c6b25c1849f3c81a49fEino-Ville Talvala uint8_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, 74d32b99b1a87497280add6efc0e99bd383e402de1Igor Murashkin FLASH_MODE_RED_EYE = ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE, 752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FLASH_MODE_INVALID = -1 762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } flashMode; 772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala enum focusMode_t { 79d32b99b1a87497280add6efc0e99bd383e402de1Igor Murashkin FOCUS_MODE_AUTO = ANDROID_CONTROL_AF_MODE_AUTO, 80d32b99b1a87497280add6efc0e99bd383e402de1Igor Murashkin FOCUS_MODE_MACRO = ANDROID_CONTROL_AF_MODE_MACRO, 81d32b99b1a87497280add6efc0e99bd383e402de1Igor Murashkin FOCUS_MODE_CONTINUOUS_VIDEO = ANDROID_CONTROL_AF_MODE_CONTINUOUS_VIDEO, 82d32b99b1a87497280add6efc0e99bd383e402de1Igor Murashkin FOCUS_MODE_CONTINUOUS_PICTURE = ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE, 83d32b99b1a87497280add6efc0e99bd383e402de1Igor Murashkin FOCUS_MODE_EDOF = ANDROID_CONTROL_AF_MODE_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 89d6cc4a62f3d94cad4dd36bd0a844ba8764177d26Eino-Ville Talvala uint8_t focusState; // Latest focus state from HAL 90d6cc4a62f3d94cad4dd36bd0a844ba8764177d26Eino-Ville Talvala 9195069fefbdf54d87a624c2ac73727fce1c38545eEino-Ville Talvala // For use with triggerAfWithAuto quirk 9295069fefbdf54d87a624c2ac73727fce1c38545eEino-Ville Talvala focusMode_t shadowFocusMode; 9395069fefbdf54d87a624c2ac73727fce1c38545eEino-Ville Talvala 942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala struct Area { 952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int left, top, right, bottom; 962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int weight; 972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Area() {} 982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Area(int left, int top, int right, int bottom, int weight): 992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala left(left), top(top), right(right), bottom(bottom), 1002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala weight(weight) {} 101ac0cd56627b121081308213d5a327cfbae410f4dEino-Ville Talvala bool isEmpty() const { 102ac0cd56627b121081308213d5a327cfbae410f4dEino-Ville Talvala return (left == 0) && (top == 0) && (right == 0) && (bottom == 0); 103ac0cd56627b121081308213d5a327cfbae410f4dEino-Ville Talvala } 1042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala }; 1052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Vector<Area> focusingAreas; 1062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1073ef464e095da6c5d1acb5723dbc4b9f7cfd4ecf8Zhijun He struct Size { 1083ef464e095da6c5d1acb5723dbc4b9f7cfd4ecf8Zhijun He int32_t width; 1093ef464e095da6c5d1acb5723dbc4b9f7cfd4ecf8Zhijun He int32_t height; 1103ef464e095da6c5d1acb5723dbc4b9f7cfd4ecf8Zhijun He }; 1113ef464e095da6c5d1acb5723dbc4b9f7cfd4ecf8Zhijun He 1122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t exposureCompensation; 1132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool autoExposureLock; 1142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool autoWhiteBalanceLock; 1152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 116ce6249980434dd04e0eac397083d917cdc4452e9Ruben Brunk // 3A region types, for use with ANDROID_CONTROL_MAX_REGIONS 117ce6249980434dd04e0eac397083d917cdc4452e9Ruben Brunk enum region_t { 118ce6249980434dd04e0eac397083d917cdc4452e9Ruben Brunk REGION_AE = 0, 119ce6249980434dd04e0eac397083d917cdc4452e9Ruben Brunk REGION_AWB, 120ce6249980434dd04e0eac397083d917cdc4452e9Ruben Brunk REGION_AF, 121ce6249980434dd04e0eac397083d917cdc4452e9Ruben Brunk NUM_REGION // Number of region types 122ce6249980434dd04e0eac397083d917cdc4452e9Ruben Brunk } region; 123ce6249980434dd04e0eac397083d917cdc4452e9Ruben Brunk 1242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Vector<Area> meteringAreas; 1252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int zoom; 1272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int videoWidth, videoHeight; 1292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool recordingHint; 1312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool videoStabilization; 1322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 133e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter enum lightFxMode_t { 134e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter LIGHTFX_NONE = 0, 135e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter LIGHTFX_LOWLIGHT, 136e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter LIGHTFX_HDR 137e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter } lightFx; 138e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter 1398a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala CameraParameters params; 1402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 paramsFlattened; 1412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // These parameters are also part of the camera API-visible state, but not 1432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // directly listed in Camera.Parameters 1442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool storeMetadataInBuffers; 1452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool playShutterSound; 1462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool enableFaceDetect; 1472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool enableFocusMoveMessages; 1492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int afTriggerCounter; 1502b07e0207da44d7b3cc63c369fd10c9f12a5e2cdEino-Ville Talvala int afStateCounter; 1512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int currentAfTriggerId; 1522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool afInMotion; 1532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 154da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala int precaptureTriggerCounter; 155da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 1562b07e0207da44d7b3cc63c369fd10c9f12a5e2cdEino-Ville Talvala int takePictureCounter; 1572b07e0207da44d7b3cc63c369fd10c9f12a5e2cdEino-Ville Talvala 1582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint32_t previewCallbackFlags; 1592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool previewCallbackOneShot; 1603ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala bool previewCallbackSurface; 1612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 162da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala bool zslMode; 163da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 1642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Overall camera state 1652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala enum State { 1662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala DISCONNECTED, 1672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala STOPPED, 1682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala WAITING_FOR_PREVIEW_WINDOW, 1692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala PREVIEW, 1702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala RECORD, 1712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala STILL_CAPTURE, 1722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala VIDEO_SNAPSHOT 1732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } state; 1742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Number of zoom steps to simulate 17601831d233c84da7f9092e62f143626918a5a747eZhijun He static const unsigned int NUM_ZOOM_STEPS = 100; 1773ef464e095da6c5d1acb5723dbc4b9f7cfd4ecf8Zhijun He // Max preview size allowed 1783ef464e095da6c5d1acb5723dbc4b9f7cfd4ecf8Zhijun He static const unsigned int MAX_PREVIEW_WIDTH = 1920; 1793ef464e095da6c5d1acb5723dbc4b9f7cfd4ecf8Zhijun He static const unsigned int MAX_PREVIEW_HEIGHT = 1080; 1809fc79c6fccc41255bb4f3538e2a21b01db8dc2dcZhijun He // Aspect ratio tolerance 1819fc79c6fccc41255bb4f3538e2a21b01db8dc2dcZhijun He static const float ASPECT_RATIO_TOLERANCE = 0.001; 1822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Full static camera info, object owned by someone else, such as 1842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Camera2Device. 1852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const CameraMetadata *info; 1862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Fast-access static device information; this is a subset of the 1882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // information available through the staticInfo() method, used for 1892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // frequently-accessed values or values that have to be calculated from the 1902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // static information. 1912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala struct DeviceInfo { 1922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t arrayWidth; 1932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t arrayHeight; 1940181fde7bd20238cb13ae2665f0e5bfe7c2d9ac8Eino-Ville Talvala int32_t bestStillCaptureFpsRange[2]; 1952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint8_t bestFaceDetectMode; 1962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t maxFaces; 1978a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala struct OverrideModes { 1988a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala flashMode_t flashMode; 1998a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala uint8_t wbMode; 2008a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala focusMode_t focusMode; 2018a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala OverrideModes(): 2028a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala flashMode(FLASH_MODE_INVALID), 203d32b99b1a87497280add6efc0e99bd383e402de1Igor Murashkin wbMode(ANDROID_CONTROL_AWB_MODE_OFF), 2048a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala focusMode(FOCUS_MODE_INVALID) { 2058a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala } 2068a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala }; 2078a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala DefaultKeyedVector<uint8_t, OverrideModes> sceneModeOverrides; 2081f1872f1e1f3705e235ce784ce6d79102d26c117Eino-Ville Talvala float minFocalLength; 2094a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala bool useFlexibleYuv; 2102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } fastInfo; 2112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2128a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala // Quirks information; these are short-lived flags to enable workarounds for 2138a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala // incomplete HAL implementations 2148a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala struct Quirks { 2158a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala bool triggerAfWithAuto; 2168a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala bool useZslFormat; 2177373cbe85e617345f7002256a4be389fe62af913Igor Murashkin bool meteringCropRegion; 218fd6ecdd39bd83ea020f78b425e96310380d66c35Eino-Ville Talvala bool partialResults; 2198a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala } quirks; 2208a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala 221da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala /** 222da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * Parameter manipulation and setup methods 223da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala */ 2242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters(int cameraId, int cameraFacing); 2262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ~Parameters(); 2272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Sets up default parameters 2292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala status_t initialize(const CameraMetadata *info); 2302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 231e382ee28709b83264a46b09e8f766c5ef42efa35Eino-Ville Talvala // Build fast-access device static info from static info 2322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala status_t buildFastInfo(); 233e382ee28709b83264a46b09e8f766c5ef42efa35Eino-Ville Talvala // Query for quirks from static info 234e382ee28709b83264a46b09e8f766c5ef42efa35Eino-Ville Talvala status_t buildQuirks(); 2352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Get entry from camera static characteristics information. min/maxCount 2372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // are used for error checking the number of values in the entry. 0 for 2382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // max/minCount means to do no bounds check in that direction. In case of 2392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // error, the entry data pointer is null and the count is 0. 2402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t staticInfo(uint32_t tag, 241d8c7ad1cbc2e6830560a085380a5828cc3d41010Igor Murashkin size_t minCount=0, size_t maxCount=0, bool required=true) const; 2422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Validate and update camera parameters based on new settings 2448a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala status_t set(const String8 ¶mString); 2458a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala 2468a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala // Retrieve the current settings 2478a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala String8 get() const; 2482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 249da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala // Update passed-in request for common parameters 250da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala status_t updateRequest(CameraMetadata *request) const; 251da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 252ec7710898208162576c3242f5a590651ab42aa2dEino-Ville Talvala // Add/update JPEG entries in metadata 253ec7710898208162576c3242f5a590651ab42aa2dEino-Ville Talvala status_t updateRequestJpeg(CameraMetadata *request) const; 254ec7710898208162576c3242f5a590651ab42aa2dEino-Ville Talvala 255018d228ac43a8da7d5f36e45fd105c9baf2490a0Igor Murashkin // Calculate the crop region rectangle based on current stream sizes 256018d228ac43a8da7d5f36e45fd105c9baf2490a0Igor Murashkin struct CropRegion { 257018d228ac43a8da7d5f36e45fd105c9baf2490a0Igor Murashkin float left; 258018d228ac43a8da7d5f36e45fd105c9baf2490a0Igor Murashkin float top; 259018d228ac43a8da7d5f36e45fd105c9baf2490a0Igor Murashkin float width; 260018d228ac43a8da7d5f36e45fd105c9baf2490a0Igor Murashkin float height; 2617373cbe85e617345f7002256a4be389fe62af913Igor Murashkin 2627373cbe85e617345f7002256a4be389fe62af913Igor Murashkin enum Outputs { 2637373cbe85e617345f7002256a4be389fe62af913Igor Murashkin OUTPUT_PREVIEW = 0x01, 2647373cbe85e617345f7002256a4be389fe62af913Igor Murashkin OUTPUT_VIDEO = 0x02, 2657373cbe85e617345f7002256a4be389fe62af913Igor Murashkin OUTPUT_JPEG_THUMBNAIL = 0x04, 2667373cbe85e617345f7002256a4be389fe62af913Igor Murashkin OUTPUT_PICTURE = 0x08, 2677373cbe85e617345f7002256a4be389fe62af913Igor Murashkin }; 268018d228ac43a8da7d5f36e45fd105c9baf2490a0Igor Murashkin }; 2697373cbe85e617345f7002256a4be389fe62af913Igor Murashkin CropRegion calculateCropRegion(CropRegion::Outputs outputs) const; 270018d228ac43a8da7d5f36e45fd105c9baf2490a0Igor Murashkin 2711f1872f1e1f3705e235ce784ce6d79102d26c117Eino-Ville Talvala // Calculate the field of view of the high-resolution JPEG capture 2721f1872f1e1f3705e235ce784ce6d79102d26c117Eino-Ville Talvala status_t calculatePictureFovs(float *horizFov, float *vertFov) const; 2731f1872f1e1f3705e235ce784ce6d79102d26c117Eino-Ville Talvala 2742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Static methods for debugging and converting between camera1 and camera2 2752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // parameters 2762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static const char *getStateName(State state); 2782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int formatStringToEnum(const char *format); 2802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static const char *formatEnumToString(int format); 2812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int wbModeStringToEnum(const char *wbMode); 2838a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala static const char* wbModeEnumToString(uint8_t wbMode); 2842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int effectModeStringToEnum(const char *effectMode); 2852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int abModeStringToEnum(const char *abMode); 2862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int sceneModeStringToEnum(const char *sceneMode); 2872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static flashMode_t flashModeStringToEnum(const char *flashMode); 2888a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala static const char* flashModeEnumToString(flashMode_t flashMode); 2892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static focusMode_t focusModeStringToEnum(const char *focusMode); 2908a42dd8cd1a245d844f96cfd67dc342d7937e353Eino-Ville Talvala static const char* focusModeEnumToString(focusMode_t focusMode); 291e538206d15282afbc5b168d60b1026a5dfcd13c0James Painter static lightFxMode_t lightFxStringToEnum(const char *lightFxMode); 2921aecbcb23d6304b1c86bd7ee8f6c5352d8d356ccEino-Ville Talvala 2932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static status_t parseAreas(const char *areasCStr, 2942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Vector<Area> *areas); 2957d2a4aaaf5691ee523fc0d03c286620f392ed16fIgor Murashkin 2967d2a4aaaf5691ee523fc0d03c286620f392ed16fIgor Murashkin enum AreaKind 2977d2a4aaaf5691ee523fc0d03c286620f392ed16fIgor Murashkin { 2987d2a4aaaf5691ee523fc0d03c286620f392ed16fIgor Murashkin AREA_KIND_FOCUS, 2997d2a4aaaf5691ee523fc0d03c286620f392ed16fIgor Murashkin AREA_KIND_METERING 3007d2a4aaaf5691ee523fc0d03c286620f392ed16fIgor Murashkin }; 3017d2a4aaaf5691ee523fc0d03c286620f392ed16fIgor Murashkin status_t validateAreas(const Vector<Area> &areas, 3027d2a4aaaf5691ee523fc0d03c286620f392ed16fIgor Murashkin size_t maxRegions, 3037d2a4aaaf5691ee523fc0d03c286620f392ed16fIgor Murashkin AreaKind areaKind) const; 3042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static bool boolFromString(const char *boolStr); 3052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Map from camera orientation + facing to gralloc transform enum 3072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int degToTransform(int degrees, bool mirror); 3082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 309d0cec0cb574a3d629afb7c32883bc986d7a65535Eino-Ville Talvala // API specifies FPS ranges are done in fixed point integer, with LSB = 0.001. 310d0cec0cb574a3d629afb7c32883bc986d7a65535Eino-Ville Talvala // Note that this doesn't apply to the (deprecated) single FPS value. 311c9d7e4da3f963dadbea19e9b520fb7a7e28e614aEino-Ville Talvala static const int kFpsToApiScale = 1000; 312c9d7e4da3f963dadbea19e9b520fb7a7e28e614aEino-Ville Talvala 3132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Transform between (-1000,-1000)-(1000,1000) normalized coords from camera 3142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // API and HAL2 (0,0)-(activePixelArray.width/height) coordinates 3152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int arrayXToNormalized(int width) const; 3162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int arrayYToNormalized(int height) const; 3172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int normalizedXToArray(int x) const; 3182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int normalizedYToArray(int y) const; 319af3d28870f7890370d6acb21d20cf1ccab4b9e08Igor Murashkin 320af3d28870f7890370d6acb21d20cf1ccab4b9e08Igor Murashkin struct Range { 321af3d28870f7890370d6acb21d20cf1ccab4b9e08Igor Murashkin int min; 322af3d28870f7890370d6acb21d20cf1ccab4b9e08Igor Murashkin int max; 323af3d28870f7890370d6acb21d20cf1ccab4b9e08Igor Murashkin }; 324af3d28870f7890370d6acb21d20cf1ccab4b9e08Igor Murashkin 325af3d28870f7890370d6acb21d20cf1ccab4b9e08Igor Murashkin int32_t fpsFromRange(int32_t min, int32_t max) const; 326af3d28870f7890370d6acb21d20cf1ccab4b9e08Igor Murashkin 3277373cbe85e617345f7002256a4be389fe62af913Igor Murashkinprivate: 3287373cbe85e617345f7002256a4be389fe62af913Igor Murashkin 3297373cbe85e617345f7002256a4be389fe62af913Igor Murashkin // Convert between HAL2 sensor array coordinates and 3307373cbe85e617345f7002256a4be389fe62af913Igor Murashkin // viewfinder crop-region relative array coordinates 3317373cbe85e617345f7002256a4be389fe62af913Igor Murashkin int cropXToArray(int x) const; 3327373cbe85e617345f7002256a4be389fe62af913Igor Murashkin int cropYToArray(int y) const; 3337373cbe85e617345f7002256a4be389fe62af913Igor Murashkin int arrayXToCrop(int x) const; 3347373cbe85e617345f7002256a4be389fe62af913Igor Murashkin int arrayYToCrop(int y) const; 3357373cbe85e617345f7002256a4be389fe62af913Igor Murashkin 3367373cbe85e617345f7002256a4be389fe62af913Igor Murashkin // Convert between viewfinder crop-region relative array coordinates 3377373cbe85e617345f7002256a4be389fe62af913Igor Murashkin // and camera API (-1000,1000)-(1000,1000) normalized coords 3387373cbe85e617345f7002256a4be389fe62af913Igor Murashkin int cropXToNormalized(int x) const; 3397373cbe85e617345f7002256a4be389fe62af913Igor Murashkin int cropYToNormalized(int y) const; 3407373cbe85e617345f7002256a4be389fe62af913Igor Murashkin int normalizedXToCrop(int x) const; 3417373cbe85e617345f7002256a4be389fe62af913Igor Murashkin int normalizedYToCrop(int y) const; 3423ef464e095da6c5d1acb5723dbc4b9f7cfd4ecf8Zhijun He 3433ef464e095da6c5d1acb5723dbc4b9f7cfd4ecf8Zhijun He Vector<Size> availablePreviewSizes; 3443ef464e095da6c5d1acb5723dbc4b9f7cfd4ecf8Zhijun He // Get size list (that are no larger than limit) from static metadata. 3453ef464e095da6c5d1acb5723dbc4b9f7cfd4ecf8Zhijun He status_t getFilteredPreviewSizes(Size limit, Vector<Size> *sizes); 3469fc79c6fccc41255bb4f3538e2a21b01db8dc2dcZhijun He // Get max size (from the size array) that matches the given aspect ratio. 3479fc79c6fccc41255bb4f3538e2a21b01db8dc2dcZhijun He Size getMaxSizeForRatio(float ratio, const int32_t* sizeArray, size_t count); 3482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; 3492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala// This class encapsulates the Parameters class so that it can only be accessed 3512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala// by constructing a Lock object, which locks the SharedParameter's mutex. 3522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaclass SharedParameters { 3532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala public: 3542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala SharedParameters(int cameraId, int cameraFacing): 3552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mParameters(cameraId, cameraFacing) { 3562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala template<typename S, typename P> 3592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala class BaseLock { 3602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala public: 3612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala BaseLock(S &p): 3622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mParameters(p.mParameters), 3632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mSharedParameters(p) { 3642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mSharedParameters.mLock.lock(); 3652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ~BaseLock() { 3682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mSharedParameters.mLock.unlock(); 3692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala P &mParameters; 3712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala private: 3722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Disallow copying, default construction 3732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala BaseLock(); 3742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala BaseLock(const BaseLock &); 3752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala BaseLock &operator=(const BaseLock &); 3762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala S &mSharedParameters; 3772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala }; 3782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala typedef BaseLock<SharedParameters, Parameters> Lock; 3792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala typedef BaseLock<const SharedParameters, const Parameters> ReadLock; 3802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Access static info, read-only and immutable, so no lock needed 3822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t staticInfo(uint32_t tag, 3832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala size_t minCount=0, size_t maxCount=0) const { 3842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return mParameters.staticInfo(tag, minCount, maxCount); 3852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Only use for dumping or other debugging 3882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const Parameters &unsafeAccess() { 3892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return mParameters; 3902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala private: 3922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters mParameters; 3932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mutable Mutex mLock; 3942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; 3952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; // namespace camera2 3982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; // namespace android 3992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 4002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#endif 401