Parameters.h revision 01831d233c84da7f9092e62f143626918a5a747e
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> 26c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala#include <utils/KeyedVector.h> 27c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala#include <camera/CameraParameters.h> 28bd02dd1bf1f34eb4e100d0d058f1fe5a2790d67eIgor Murashkin#include <camera/CameraMetadata.h> 292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalanamespace android { 312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalanamespace camera2 { 322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala/** 3469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * Current camera state; this is the full state of the Camera under the old 3569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * camera API (contents of the CameraParameters object in a more-efficient 3669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * format, plus other state). The enum values are mostly based off the 3769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * corresponding camera2 enums, not the camera1 strings. A few are defined here 3869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * if they don't cleanly map to camera2 values. 3969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala */ 402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalastruct Parameters { 4169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala /** 4269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * Parameters and other state 4369230df9905534cda15becd44c0109874c4be5f0Eino-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 previewFps; // deprecated, here only for tracking changes 502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int previewFormat; 512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int previewTransform; // set by CAMERA_CMD_SET_DISPLAY_ORIENTATION 532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int pictureWidth, pictureHeight; 552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t jpegThumbSize[2]; 57eae312137f71af037d5f5b4071eef8e2ecd6055eEino-Ville Talvala uint8_t jpegQuality, jpegThumbQuality; 582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t jpegRotation; 592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool gpsEnabled; 612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala double gpsCoordinates[3]; 622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int64_t gpsTimestamp; 632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 gpsProcessingMethod; 642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint8_t wbMode; 662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint8_t effectMode; 672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint8_t antibandingMode; 682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint8_t sceneMode; 692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala enum flashMode_t { 712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FLASH_MODE_OFF = 0, 722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FLASH_MODE_AUTO, 732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FLASH_MODE_ON, 742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FLASH_MODE_TORCH, 752d2b40b67515208273197ac2f03c5fabd430efaeIgor Murashkin FLASH_MODE_RED_EYE = ANDROID_CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE, 762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FLASH_MODE_INVALID = -1 772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } flashMode; 782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala enum focusMode_t { 802d2b40b67515208273197ac2f03c5fabd430efaeIgor Murashkin FOCUS_MODE_AUTO = ANDROID_CONTROL_AF_MODE_AUTO, 812d2b40b67515208273197ac2f03c5fabd430efaeIgor Murashkin FOCUS_MODE_MACRO = ANDROID_CONTROL_AF_MODE_MACRO, 822d2b40b67515208273197ac2f03c5fabd430efaeIgor Murashkin FOCUS_MODE_CONTINUOUS_VIDEO = ANDROID_CONTROL_AF_MODE_CONTINUOUS_VIDEO, 832d2b40b67515208273197ac2f03c5fabd430efaeIgor Murashkin FOCUS_MODE_CONTINUOUS_PICTURE = ANDROID_CONTROL_AF_MODE_CONTINUOUS_PICTURE, 842d2b40b67515208273197ac2f03c5fabd430efaeIgor Murashkin FOCUS_MODE_EDOF = ANDROID_CONTROL_AF_MODE_EDOF, 852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FOCUS_MODE_INFINITY, 862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FOCUS_MODE_FIXED, 872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala FOCUS_MODE_INVALID = -1 882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } focusMode; 892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 90f1a6e0d28abdd0fcf9d35ecf53d7497f573f6113Eino-Ville Talvala uint8_t focusState; // Latest focus state from HAL 91f1a6e0d28abdd0fcf9d35ecf53d7497f573f6113Eino-Ville Talvala 924c843702c7c2d2ca951e25bc54787c68c2071a8bEino-Ville Talvala // For use with triggerAfWithAuto quirk 934c843702c7c2d2ca951e25bc54787c68c2071a8bEino-Ville Talvala focusMode_t shadowFocusMode; 944c843702c7c2d2ca951e25bc54787c68c2071a8bEino-Ville Talvala 952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala struct Area { 962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int left, top, right, bottom; 972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int weight; 982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Area() {} 992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Area(int left, int top, int right, int bottom, int weight): 1002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala left(left), top(top), right(right), bottom(bottom), 1012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala weight(weight) {} 10265dc3fc6fd708350c8d984736da5a2a0b72c5324Eino-Ville Talvala bool isEmpty() const { 10365dc3fc6fd708350c8d984736da5a2a0b72c5324Eino-Ville Talvala return (left == 0) && (top == 0) && (right == 0) && (bottom == 0); 10465dc3fc6fd708350c8d984736da5a2a0b72c5324Eino-Ville Talvala } 1052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala }; 1062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Vector<Area> focusingAreas; 1072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t exposureCompensation; 1092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool autoExposureLock; 1102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool autoWhiteBalanceLock; 1112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Vector<Area> meteringAreas; 1132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int zoom; 1152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int videoWidth, videoHeight; 1172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool recordingHint; 1192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool videoStabilization; 1202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 121c3dbf1a40df85b75e5805382838a90416f69730fJames Painter enum lightFxMode_t { 122c3dbf1a40df85b75e5805382838a90416f69730fJames Painter LIGHTFX_NONE = 0, 123c3dbf1a40df85b75e5805382838a90416f69730fJames Painter LIGHTFX_LOWLIGHT, 124c3dbf1a40df85b75e5805382838a90416f69730fJames Painter LIGHTFX_HDR 125c3dbf1a40df85b75e5805382838a90416f69730fJames Painter } lightFx; 126c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 127c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala CameraParameters params; 1282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 paramsFlattened; 1292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // These parameters are also part of the camera API-visible state, but not 1312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // directly listed in Camera.Parameters 1322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool storeMetadataInBuffers; 1332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool playShutterSound; 1342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool enableFaceDetect; 1352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool enableFocusMoveMessages; 1372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int afTriggerCounter; 1382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int currentAfTriggerId; 1392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool afInMotion; 1402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 14169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala int precaptureTriggerCounter; 14269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 1432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint32_t previewCallbackFlags; 1442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool previewCallbackOneShot; 1452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 14669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala bool zslMode; 14769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 1482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Overall camera state 1492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala enum State { 1502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala DISCONNECTED, 1512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala STOPPED, 1522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala WAITING_FOR_PREVIEW_WINDOW, 1532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala PREVIEW, 1542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala RECORD, 1552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala STILL_CAPTURE, 1562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala VIDEO_SNAPSHOT 1572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } state; 1582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Number of zoom steps to simulate 16001831d233c84da7f9092e62f143626918a5a747eZhijun He static const unsigned int NUM_ZOOM_STEPS = 100; 1612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Full static camera info, object owned by someone else, such as 1632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Camera2Device. 1642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const CameraMetadata *info; 1652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Fast-access static device information; this is a subset of the 1672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // information available through the staticInfo() method, used for 1682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // frequently-accessed values or values that have to be calculated from the 1692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // static information. 1702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala struct DeviceInfo { 1712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t arrayWidth; 1722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t arrayHeight; 1732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint8_t bestFaceDetectMode; 1742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t maxFaces; 175c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala struct OverrideModes { 176c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala flashMode_t flashMode; 177c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala uint8_t wbMode; 178c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala focusMode_t focusMode; 179c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala OverrideModes(): 180c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala flashMode(FLASH_MODE_INVALID), 1812d2b40b67515208273197ac2f03c5fabd430efaeIgor Murashkin wbMode(ANDROID_CONTROL_AWB_MODE_OFF), 182c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala focusMode(FOCUS_MODE_INVALID) { 183c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala } 184c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala }; 185c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala DefaultKeyedVector<uint8_t, OverrideModes> sceneModeOverrides; 186a1220f482f5a50488777ab789abd861b5565acdcEino-Ville Talvala float minFocalLength; 18792086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala bool useFlexibleYuv; 1882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } fastInfo; 1892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 190c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala // Quirks information; these are short-lived flags to enable workarounds for 191c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala // incomplete HAL implementations 192c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala struct Quirks { 193c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala bool triggerAfWithAuto; 194c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala bool useZslFormat; 1953a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin bool meteringCropRegion; 196c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala } quirks; 197c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala 19869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala /** 19969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala * Parameter manipulation and setup methods 20069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala */ 2012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters(int cameraId, int cameraFacing); 2032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ~Parameters(); 2042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Sets up default parameters 2062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala status_t initialize(const CameraMetadata *info); 2072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 208596cb97dff006229f10db8bd7306f4d228f96dfdEino-Ville Talvala // Build fast-access device static info from static info 2092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala status_t buildFastInfo(); 210596cb97dff006229f10db8bd7306f4d228f96dfdEino-Ville Talvala // Query for quirks from static info 211596cb97dff006229f10db8bd7306f4d228f96dfdEino-Ville Talvala status_t buildQuirks(); 2122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Get entry from camera static characteristics information. min/maxCount 2142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // are used for error checking the number of values in the entry. 0 for 2152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // max/minCount means to do no bounds check in that direction. In case of 2162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // error, the entry data pointer is null and the count is 0. 2172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t staticInfo(uint32_t tag, 21837b2602761cbfc20f8a36e27eb4cf1b3dfd04e6bIgor Murashkin size_t minCount=0, size_t maxCount=0, bool required=true) const; 2192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Validate and update camera parameters based on new settings 221c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala status_t set(const String8 ¶mString); 222c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala 223c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala // Retrieve the current settings 224c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala String8 get() const; 2252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 22669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala // Update passed-in request for common parameters 22769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala status_t updateRequest(CameraMetadata *request) const; 22869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 229db30e68be637ca85da238c1e8e3534ec07919985Eino-Ville Talvala // Add/update JPEG entries in metadata 230db30e68be637ca85da238c1e8e3534ec07919985Eino-Ville Talvala status_t updateRequestJpeg(CameraMetadata *request) const; 231db30e68be637ca85da238c1e8e3534ec07919985Eino-Ville Talvala 232e500bc25cb801e69b4193b2863ec40bb3de04db9Igor Murashkin // Calculate the crop region rectangle based on current stream sizes 233e500bc25cb801e69b4193b2863ec40bb3de04db9Igor Murashkin struct CropRegion { 234e500bc25cb801e69b4193b2863ec40bb3de04db9Igor Murashkin float left; 235e500bc25cb801e69b4193b2863ec40bb3de04db9Igor Murashkin float top; 236e500bc25cb801e69b4193b2863ec40bb3de04db9Igor Murashkin float width; 237e500bc25cb801e69b4193b2863ec40bb3de04db9Igor Murashkin float height; 2383a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin 2393a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin enum Outputs { 2403a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin OUTPUT_PREVIEW = 0x01, 2413a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin OUTPUT_VIDEO = 0x02, 2423a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin OUTPUT_JPEG_THUMBNAIL = 0x04, 2433a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin OUTPUT_PICTURE = 0x08, 2443a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin }; 245e500bc25cb801e69b4193b2863ec40bb3de04db9Igor Murashkin }; 2463a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin CropRegion calculateCropRegion(CropRegion::Outputs outputs) const; 247e500bc25cb801e69b4193b2863ec40bb3de04db9Igor Murashkin 248a1220f482f5a50488777ab789abd861b5565acdcEino-Ville Talvala // Calculate the field of view of the high-resolution JPEG capture 249a1220f482f5a50488777ab789abd861b5565acdcEino-Ville Talvala status_t calculatePictureFovs(float *horizFov, float *vertFov) const; 250a1220f482f5a50488777ab789abd861b5565acdcEino-Ville Talvala 2512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Static methods for debugging and converting between camera1 and camera2 2522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // parameters 2532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static const char *getStateName(State state); 2552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int formatStringToEnum(const char *format); 2572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static const char *formatEnumToString(int format); 2582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int wbModeStringToEnum(const char *wbMode); 260c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala static const char* wbModeEnumToString(uint8_t wbMode); 2612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int effectModeStringToEnum(const char *effectMode); 2622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int abModeStringToEnum(const char *abMode); 2632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int sceneModeStringToEnum(const char *sceneMode); 2642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static flashMode_t flashModeStringToEnum(const char *flashMode); 265c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala static const char* flashModeEnumToString(flashMode_t flashMode); 2662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static focusMode_t focusModeStringToEnum(const char *focusMode); 267c85f826e7b67bdf159a3f1b01bc9f1f33d05aaffEino-Ville Talvala static const char* focusModeEnumToString(focusMode_t focusMode); 268c3dbf1a40df85b75e5805382838a90416f69730fJames Painter static lightFxMode_t lightFxStringToEnum(const char *lightFxMode); 269f93992e4b0dce1755ef4d2571b0930ef3a1107f0Eino-Ville Talvala 2702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static status_t parseAreas(const char *areasCStr, 2712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Vector<Area> *areas); 272572bf9a00204ac91de8c5347d793891c6a4bf1d7Igor Murashkin 273572bf9a00204ac91de8c5347d793891c6a4bf1d7Igor Murashkin enum AreaKind 274572bf9a00204ac91de8c5347d793891c6a4bf1d7Igor Murashkin { 275572bf9a00204ac91de8c5347d793891c6a4bf1d7Igor Murashkin AREA_KIND_FOCUS, 276572bf9a00204ac91de8c5347d793891c6a4bf1d7Igor Murashkin AREA_KIND_METERING 277572bf9a00204ac91de8c5347d793891c6a4bf1d7Igor Murashkin }; 278572bf9a00204ac91de8c5347d793891c6a4bf1d7Igor Murashkin status_t validateAreas(const Vector<Area> &areas, 279572bf9a00204ac91de8c5347d793891c6a4bf1d7Igor Murashkin size_t maxRegions, 280572bf9a00204ac91de8c5347d793891c6a4bf1d7Igor Murashkin AreaKind areaKind) const; 2812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static bool boolFromString(const char *boolStr); 2822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Map from camera orientation + facing to gralloc transform enum 2842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static int degToTransform(int degrees, bool mirror); 2852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 286823b786e8558b7e73d9096cdd629e8896226e422Eino-Ville Talvala // API specifies FPS ranges are done in fixed point integer, with LSB = 0.001. 287823b786e8558b7e73d9096cdd629e8896226e422Eino-Ville Talvala // Note that this doesn't apply to the (deprecated) single FPS value. 288b5d91138fddcb1c4acdc91ddc68a9f4097da5b40Eino-Ville Talvala static const int kFpsToApiScale = 1000; 289b5d91138fddcb1c4acdc91ddc68a9f4097da5b40Eino-Ville Talvala 2902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Transform between (-1000,-1000)-(1000,1000) normalized coords from camera 2912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // API and HAL2 (0,0)-(activePixelArray.width/height) coordinates 2922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int arrayXToNormalized(int width) const; 2932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int arrayYToNormalized(int height) const; 2942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int normalizedXToArray(int x) const; 2952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int normalizedYToArray(int y) const; 29663dc19921f2770f07bf976bb7573a1133d6548f9Igor Murashkin 29763dc19921f2770f07bf976bb7573a1133d6548f9Igor Murashkin struct Range { 29863dc19921f2770f07bf976bb7573a1133d6548f9Igor Murashkin int min; 29963dc19921f2770f07bf976bb7573a1133d6548f9Igor Murashkin int max; 30063dc19921f2770f07bf976bb7573a1133d6548f9Igor Murashkin }; 30163dc19921f2770f07bf976bb7573a1133d6548f9Igor Murashkin 30263dc19921f2770f07bf976bb7573a1133d6548f9Igor Murashkin int32_t fpsFromRange(int32_t min, int32_t max) const; 30363dc19921f2770f07bf976bb7573a1133d6548f9Igor Murashkin 3043a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkinprivate: 3053a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin 3063a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin // Convert between HAL2 sensor array coordinates and 3073a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin // viewfinder crop-region relative array coordinates 3083a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin int cropXToArray(int x) const; 3093a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin int cropYToArray(int y) const; 3103a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin int arrayXToCrop(int x) const; 3113a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin int arrayYToCrop(int y) const; 3123a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin 3133a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin // Convert between viewfinder crop-region relative array coordinates 3143a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin // and camera API (-1000,1000)-(1000,1000) normalized coords 3153a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin int cropXToNormalized(int x) const; 3163a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin int cropYToNormalized(int y) const; 3173a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin int normalizedXToCrop(int x) const; 3183a6e45320685b36bb266bbf8fa548f4474d90d6cIgor Murashkin int normalizedYToCrop(int y) const; 3192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; 3202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala// This class encapsulates the Parameters class so that it can only be accessed 3222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala// by constructing a Lock object, which locks the SharedParameter's mutex. 3232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaclass SharedParameters { 3242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala public: 3252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala SharedParameters(int cameraId, int cameraFacing): 3262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mParameters(cameraId, cameraFacing) { 3272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala template<typename S, typename P> 3302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala class BaseLock { 3312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala public: 3322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala BaseLock(S &p): 3332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mParameters(p.mParameters), 3342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mSharedParameters(p) { 3352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mSharedParameters.mLock.lock(); 3362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ~BaseLock() { 3392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mSharedParameters.mLock.unlock(); 3402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala P &mParameters; 3422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala private: 3432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Disallow copying, default construction 3442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala BaseLock(); 3452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala BaseLock(const BaseLock &); 3462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala BaseLock &operator=(const BaseLock &); 3472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala S &mSharedParameters; 3482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala }; 3492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala typedef BaseLock<SharedParameters, Parameters> Lock; 3502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala typedef BaseLock<const SharedParameters, const Parameters> ReadLock; 3512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Access static info, read-only and immutable, so no lock needed 3532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t staticInfo(uint32_t tag, 3542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala size_t minCount=0, size_t maxCount=0) const { 3552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return mParameters.staticInfo(tag, minCount, maxCount); 3562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Only use for dumping or other debugging 3592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const Parameters &unsafeAccess() { 3602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return mParameters; 3612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala private: 3632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters mParameters; 3642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala mutable Mutex mLock; 3652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; 3662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; // namespace camera2 3692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; // namespace android 3702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#endif 372