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 &params);
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