Parameters.cpp revision 4c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2
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#define LOG_TAG "Camera2::Parameters" 182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#define ATRACE_TAG ATRACE_TAG_CAMERA 192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala//#define LOG_NDEBUG 0 202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#include <utils/Log.h> 2269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#include <utils/Trace.h> 2369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include <math.h> 252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include <stdlib.h> 262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include "Parameters.h" 282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include "system/camera.h" 292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#include "camera/CameraParameters.h" 302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalanamespace android { 322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalanamespace camera2 { 332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville TalvalaParameters::Parameters(int cameraId, 352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int cameraFacing) : 362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala cameraId(cameraId), 372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala cameraFacing(cameraFacing), 382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala info(NULL) { 392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville TalvalaParameters::~Parameters() { 422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalastatus_t Parameters::initialize(const CameraMetadata *info) { 452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala status_t res; 462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (info->entryCount() == 0) { 482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: No static information provided!", __FUNCTION__); 492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::info = info; 522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala res = buildFastInfo(); 542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (res != OK) return res; 552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters params; 572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableProcessedSizes = 592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 2); 602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!availableProcessedSizes.count) return NO_INIT; 612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // TODO: Pick more intelligently 632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala previewWidth = availableProcessedSizes.data.i32[0]; 642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala previewHeight = availableProcessedSizes.data.i32[1]; 652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala videoWidth = previewWidth; 662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala videoHeight = previewHeight; 672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.setPreviewSize(previewWidth, previewHeight); 692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.setVideoSize(videoWidth, videoHeight); 702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO, 712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8::format("%dx%d", 722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala previewWidth, previewHeight)); 732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala { 742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 supportedPreviewSizes; 752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < availableProcessedSizes.count; i += 2) { 762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i != 0) supportedPreviewSizes += ","; 772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewSizes += String8::format("%dx%d", 782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableProcessedSizes.data.i32[i], 792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableProcessedSizes.data.i32[i+1]); 802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, 822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewSizes); 832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES, 842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewSizes); 852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableFpsRanges = 882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 2); 892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!availableFpsRanges.count) return NO_INIT; 902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala previewFpsRange[0] = availableFpsRanges.data.i32[0]; 922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala previewFpsRange[1] = availableFpsRanges.data.i32[1]; 932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, 952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8::format("%d,%d", 962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala previewFpsRange[0], 972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala previewFpsRange[1])); 982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala { 1002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 supportedPreviewFpsRange; 1012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 1022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i != 0) supportedPreviewFpsRange += ","; 1032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewFpsRange += String8::format("(%d,%d)", 1042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableFpsRanges.data.i32[i], 1052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableFpsRanges.data.i32[i+1]); 1062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 1072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, 1082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewFpsRange); 1092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 1102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala previewFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; 1122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FORMAT, 1132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala formatEnumToString(previewFormat)); // NV21 1142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala previewTransform = degToTransform(0, 1162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala cameraFacing == CAMERA_FACING_FRONT); 1172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableFormats = 1192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_FORMATS); 1202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala { 1222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 supportedPreviewFormats; 1232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool addComma = false; 1242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < availableFormats.count; i++) { 1252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (addComma) supportedPreviewFormats += ","; 1262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = true; 1272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala switch (availableFormats.data.i32[i]) { 1282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: 1292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewFormats += 1302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV422SP; 1312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 1322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: 1332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewFormats += 1342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV420SP; 1352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 1362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: 1372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewFormats += 1382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV422I; 1392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 1402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: 1412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewFormats += 1422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::PIXEL_FORMAT_YUV420P; 1432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 1442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: 1452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewFormats += 1462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::PIXEL_FORMAT_RGB565; 1472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 1482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGBA_8888: 1492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewFormats += 1502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::PIXEL_FORMAT_RGBA8888; 1512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 1522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Not advertizing JPEG, RAW_SENSOR, etc, for preview formats 1532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 1542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_BLOB: 1552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = false; 1562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 1572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala default: 1592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown preview format: %x", 1602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, cameraId, availableFormats.data.i32[i]); 1612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = false; 1622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 1632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 1642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 1652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS, 1662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewFormats); 1672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 1682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // PREVIEW_FRAME_RATE / SUPPORTED_PREVIEW_FRAME_RATES are deprecated, but 1702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // still have to do something sane for them 1712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FRAME_RATE, 1732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala previewFpsRange[0]); 1742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala { 1762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 supportedPreviewFrameRates; 1772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 1782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i != 0) supportedPreviewFrameRates += ","; 1792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewFrameRates += String8::format("%d", 1802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableFpsRanges.data.i32[i]); 1812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 1822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES, 1832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPreviewFrameRates); 1842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 1852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableJpegSizes = 1872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 2); 1882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!availableJpegSizes.count) return NO_INIT; 1892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // TODO: Pick maximum 1912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala pictureWidth = availableJpegSizes.data.i32[0]; 1922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala pictureHeight = availableJpegSizes.data.i32[1]; 1932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.setPictureSize(pictureWidth, 1952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala pictureHeight); 1962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala { 1982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 supportedPictureSizes; 1992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < availableJpegSizes.count; i += 2) { 2002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i != 0) supportedPictureSizes += ","; 2012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPictureSizes += String8::format("%dx%d", 2022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableJpegSizes.data.i32[i], 2032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableJpegSizes.data.i32[i+1]); 2042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 2052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, 2062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedPictureSizes); 2072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 2082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.setPictureFormat(CameraParameters::PIXEL_FORMAT_JPEG); 2102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS, 2112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::PIXEL_FORMAT_JPEG); 2122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableJpegThumbnailSizes = 214a1e4e309e9a32afa3a26576fa592789168db182eEino-Ville Talvala staticInfo(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, 4); 2152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!availableJpegThumbnailSizes.count) return NO_INIT; 2162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // TODO: Pick default thumbnail size sensibly 2182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala jpegThumbSize[0] = availableJpegThumbnailSizes.data.i32[0]; 2192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala jpegThumbSize[1] = availableJpegThumbnailSizes.data.i32[1]; 2202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, 2222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala jpegThumbSize[0]); 2232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, 2242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala jpegThumbSize[1]); 2252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala { 2272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 supportedJpegThumbSizes; 2282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < availableJpegThumbnailSizes.count; i += 2) { 2292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i != 0) supportedJpegThumbSizes += ","; 2302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedJpegThumbSizes += String8::format("%dx%d", 2312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i], 2322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i+1]); 2332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 2342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, 2352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedJpegThumbSizes); 2362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 2372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala jpegThumbQuality = 90; 2392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, 2402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala jpegThumbQuality); 2412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala jpegQuality = 90; 2422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_QUALITY, 2432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala jpegQuality); 2442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala jpegRotation = 0; 2452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_ROTATION, 2462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala jpegRotation); 2472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala gpsEnabled = false; 2492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala gpsProcessingMethod = "unknown"; 2502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // GPS fields in CameraParameters are not set by implementation 2512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala wbMode = ANDROID_CONTROL_AWB_AUTO; 2532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_WHITE_BALANCE, 2542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::WHITE_BALANCE_AUTO); 2552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableWhiteBalanceModes = 2572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AWB_AVAILABLE_MODES); 2582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala { 2592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 supportedWhiteBalance; 2602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool addComma = false; 2612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < availableWhiteBalanceModes.count; i++) { 2622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (addComma) supportedWhiteBalance += ","; 2632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = true; 2642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala switch (availableWhiteBalanceModes.data.u8[i]) { 2652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AWB_AUTO: 2662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedWhiteBalance += 2672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::WHITE_BALANCE_AUTO; 2682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 2692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AWB_INCANDESCENT: 2702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedWhiteBalance += 2712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::WHITE_BALANCE_INCANDESCENT; 2722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 2732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AWB_FLUORESCENT: 2742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedWhiteBalance += 2752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::WHITE_BALANCE_FLUORESCENT; 2762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 2772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AWB_WARM_FLUORESCENT: 2782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedWhiteBalance += 2792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::WHITE_BALANCE_WARM_FLUORESCENT; 2802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 2812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AWB_DAYLIGHT: 2822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedWhiteBalance += 2832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::WHITE_BALANCE_DAYLIGHT; 2842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 2852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT: 2862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedWhiteBalance += 2872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT; 2882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 2892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AWB_TWILIGHT: 2902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedWhiteBalance += 2912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::WHITE_BALANCE_TWILIGHT; 2922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 2932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AWB_SHADE: 2942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedWhiteBalance += 2952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::WHITE_BALANCE_SHADE; 2962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 2972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Skipping values not mappable to v1 API 2982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AWB_OFF: 2992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = false; 3002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala default: 3022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown white balance value: %d", 3032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, cameraId, 3042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableWhiteBalanceModes.data.u8[i]); 3052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = false; 3062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE, 3102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedWhiteBalance); 3112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala effectMode = ANDROID_CONTROL_EFFECT_OFF; 3142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_EFFECT, 3152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::EFFECT_NONE); 3162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableEffects = 3182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_EFFECTS); 3192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!availableEffects.count) return NO_INIT; 3202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala { 3212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 supportedEffects; 3222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool addComma = false; 3232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < availableEffects.count; i++) { 3242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (addComma) supportedEffects += ","; 3252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = true; 3262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala switch (availableEffects.data.u8[i]) { 3272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_OFF: 3282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedEffects += 3292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::EFFECT_NONE; 3302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_MONO: 3322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedEffects += 3332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::EFFECT_MONO; 3342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_NEGATIVE: 3362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedEffects += 3372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::EFFECT_NEGATIVE; 3382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SOLARIZE: 3402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedEffects += 3412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::EFFECT_SOLARIZE; 3422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SEPIA: 3442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedEffects += 3452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::EFFECT_SEPIA; 3462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_POSTERIZE: 3482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedEffects += 3492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::EFFECT_POSTERIZE; 3502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_WHITEBOARD: 3522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedEffects += 3532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::EFFECT_WHITEBOARD; 3542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_BLACKBOARD: 3562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedEffects += 3572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::EFFECT_BLACKBOARD; 3582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_AQUA: 3602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedEffects += 3612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::EFFECT_AQUA; 3622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala default: 3642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown effect value: %d", 3652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, cameraId, availableEffects.data.u8[i]); 3662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = false; 3672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_EFFECTS, supportedEffects); 3712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 3722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala antibandingMode = ANDROID_CONTROL_AE_ANTIBANDING_AUTO; 3742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_ANTIBANDING, 3752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::ANTIBANDING_AUTO); 3762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 3772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableAntibandingModes = 3782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES); 3792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!availableAntibandingModes.count) return NO_INIT; 3802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala { 3812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 supportedAntibanding; 3822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool addComma = false; 3832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < availableAntibandingModes.count; i++) { 3842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (addComma) supportedAntibanding += ","; 3852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = true; 3862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala switch (availableAntibandingModes.data.u8[i]) { 3872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_OFF: 3882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedAntibanding += 3892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::ANTIBANDING_OFF; 3902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_50HZ: 3922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedAntibanding += 3932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::ANTIBANDING_50HZ; 3942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_60HZ: 3962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedAntibanding += 3972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::ANTIBANDING_60HZ; 3982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 3992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_AUTO: 4002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedAntibanding += 4012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::ANTIBANDING_AUTO; 4022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala default: 4042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown antibanding value: %d", 4052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, cameraId, 4062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableAntibandingModes.data.u8[i]); 4072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = false; 4082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 4102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 4112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_ANTIBANDING, 4122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedAntibanding); 4132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 4142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 4152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala sceneMode = ANDROID_CONTROL_OFF; 4162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SCENE_MODE, 4172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_AUTO); 4182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 4192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableSceneModes = 4202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_SCENE_MODES); 4212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!availableSceneModes.count) return NO_INIT; 4222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala { 4232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 supportedSceneModes(CameraParameters::SCENE_MODE_AUTO); 4242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool addComma = true; 4252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool noSceneModes = false; 4262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < availableSceneModes.count; i++) { 4272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (addComma) supportedSceneModes += ","; 4282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = true; 4292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala switch (availableSceneModes.data.u8[i]) { 4302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED: 4312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala noSceneModes = true; 4322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY: 4342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Not in old API 4352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = false; 4362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_ACTION: 4382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_ACTION; 4402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PORTRAIT: 4422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_PORTRAIT; 4442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_LANDSCAPE: 4462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_LANDSCAPE; 4482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT: 4502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_NIGHT; 4522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT: 4542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_NIGHT_PORTRAIT; 4562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_THEATRE: 4582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_THEATRE; 4602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BEACH: 4622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_BEACH; 4642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SNOW: 4662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_SNOW; 4682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SUNSET: 4702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_SUNSET; 4722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO: 4742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_STEADYPHOTO; 4762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FIREWORKS: 4782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_FIREWORKS; 4802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SPORTS: 4822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_SPORTS; 4842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PARTY: 4862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_PARTY; 4882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT: 4902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_CANDLELIGHT; 4922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BARCODE: 4942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes += 4952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::SCENE_MODE_BARCODE; 4962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 4972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala default: 4982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown scene mode value: %d", 4992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, cameraId, 5002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableSceneModes.data.u8[i]); 5012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = false; 5022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 5032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 5042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 5052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!noSceneModes) { 5062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_SCENE_MODES, 5072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedSceneModes); 5082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 5092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 5102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 5112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t flashAvailable = 5122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_FLASH_AVAILABLE, 1, 1); 5132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!flashAvailable.count) return NO_INIT; 5142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 5152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableAeModes = 5162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_MODES); 5172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!availableAeModes.count) return NO_INIT; 5182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 5192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (flashAvailable.data.u8[0]) { 5202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala flashMode = Parameters::FLASH_MODE_AUTO; 5212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_FLASH_MODE, 5222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FLASH_MODE_AUTO); 5232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 5242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 supportedFlashModes(CameraParameters::FLASH_MODE_OFF); 5252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedFlashModes = supportedFlashModes + 5262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_AUTO + 5272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_ON + 5282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_TORCH; 5292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < availableAeModes.count; i++) { 5302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (availableAeModes.data.u8[i] == 5312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AE_ON_AUTO_FLASH_REDEYE) { 5322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedFlashModes = supportedFlashModes + "," + 5332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FLASH_MODE_RED_EYE; 5342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 5352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 5362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 5372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 5382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedFlashModes); 5392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else { 5402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala flashMode = Parameters::FLASH_MODE_OFF; 5412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_FLASH_MODE, 5422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FLASH_MODE_OFF); 5432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 5442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FLASH_MODE_OFF); 5452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 5462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 5472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t minFocusDistance = 5482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_LENS_MINIMUM_FOCUS_DISTANCE, 1, 1); 5492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!minFocusDistance.count) return NO_INIT; 5502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 5512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableAfModes = 5522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AF_AVAILABLE_MODES); 5532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!availableAfModes.count) return NO_INIT; 5542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 5552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (minFocusDistance.data.f[0] == 0) { 5562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Fixed-focus lens 5572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala focusMode = Parameters::FOCUS_MODE_FIXED; 5582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_MODE, 5592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FOCUS_MODE_FIXED); 5602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 5612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FOCUS_MODE_FIXED); 5622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else { 5632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala focusMode = Parameters::FOCUS_MODE_AUTO; 5642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_MODE, 5652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FOCUS_MODE_AUTO); 5662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 supportedFocusModes(CameraParameters::FOCUS_MODE_INFINITY); 5672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool addComma = true; 5682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 5692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < availableAfModes.count; i++) { 5702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (addComma) supportedFocusModes += ","; 5712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = true; 5722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala switch (availableAfModes.data.u8[i]) { 5732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AF_AUTO: 5742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedFocusModes += 5752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FOCUS_MODE_AUTO; 5762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 5772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AF_MACRO: 5782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedFocusModes += 5792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FOCUS_MODE_MACRO; 5802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 5812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_VIDEO: 5822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedFocusModes += 5832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO; 5842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 5852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_PICTURE: 5862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedFocusModes += 5872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE; 5882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 5892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AF_EDOF: 5902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedFocusModes += 5912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FOCUS_MODE_EDOF; 5922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 5932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Not supported in old API 5942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_CONTROL_AF_OFF: 5952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = false; 5962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 5972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala default: 5982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown AF mode value: %d", 5992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, cameraId, availableAfModes.data.u8[i]); 6002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = false; 6012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 6022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 6032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 6042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 6052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala supportedFocusModes); 6062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 6072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t max3aRegions = 6092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_MAX_REGIONS, 1, 1); 6102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!max3aRegions.count) return NO_INIT; 6112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS, 6132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala max3aRegions.data.i32[0]); 6142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_AREAS, 6152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala "(0,0,0,0,0)"); 6162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala focusingAreas.clear(); 6172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala focusingAreas.add(Parameters::Area(0,0,0,0,0)); 6182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableFocalLengths = 6202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_LENS_AVAILABLE_FOCAL_LENGTHS); 6212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!availableFocalLengths.count) return NO_INIT; 6222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala float minFocalLength = availableFocalLengths.data.f[0]; 6242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.setFloat(CameraParameters::KEY_FOCAL_LENGTH, minFocalLength); 6252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t sensorSize = 6272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_SENSOR_PHYSICAL_SIZE, 2, 2); 6282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!sensorSize.count) return NO_INIT; 6292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // The fields of view here assume infinity focus, maximum wide angle 6312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala float horizFov = 180 / M_PI * 6322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2 * atanf(sensorSize.data.f[0] / (2 * minFocalLength)); 6332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala float vertFov = 180 / M_PI * 6342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 2 * atanf(sensorSize.data.f[1] / (2 * minFocalLength)); 6352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.setFloat(CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE, horizFov); 6362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.setFloat(CameraParameters::KEY_VERTICAL_VIEW_ANGLE, vertFov); 6372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala exposureCompensation = 0; 6392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_EXPOSURE_COMPENSATION, 6402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala exposureCompensation); 6412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t exposureCompensationRange = 6432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE, 2, 2); 6442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!exposureCompensationRange.count) return NO_INIT; 6452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION, 6472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala exposureCompensationRange.data.i32[1]); 6482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION, 6492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala exposureCompensationRange.data.i32[0]); 6502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t exposureCompensationStep = 6522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_STEP, 1, 1); 6532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!exposureCompensationStep.count) return NO_INIT; 6542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.setFloat(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP, 6562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala (float)exposureCompensationStep.data.r[0].numerator / 6572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala exposureCompensationStep.data.r[0].denominator); 6582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala autoExposureLock = false; 6602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, 6612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FALSE); 6622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED, 6632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::TRUE); 6642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala autoWhiteBalanceLock = false; 6662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, 6672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FALSE); 6682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED, 6692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::TRUE); 6702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala meteringAreas.add(Parameters::Area(0, 0, 0, 0, 0)); 6722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_METERING_AREAS, 6732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala max3aRegions.data.i32[0]); 6742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_METERING_AREAS, 6752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala "(0,0,0,0,0)"); 6762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala zoom = 0; 6782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM, zoom); 6792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_ZOOM, NUM_ZOOM_STEPS - 1); 6802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t maxDigitalZoom = 6822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_MAX_ZOOM, 1, 1); 6832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!maxDigitalZoom.count) return NO_INIT; 6842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 6852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala { 6862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 zoomRatios; 6872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala float zoom = 1.f; 6882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala float zoomIncrement = (maxDigitalZoom.data.f[0] - zoom) / 6892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala (NUM_ZOOM_STEPS-1); 6902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool addComma = false; 6912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i=0; i < NUM_ZOOM_STEPS; i++) { 6922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (addComma) zoomRatios += ","; 6932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala addComma = true; 6942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala zoomRatios += String8::format("%d", static_cast<int>(zoom * 100)); 6952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala zoom += zoomIncrement; 6962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 6972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM_RATIOS, zoomRatios); 6982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 6992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM_SUPPORTED, 7012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::TRUE); 7022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED, 7032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::TRUE); 7042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_DISTANCES, 7062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala "Infinity,Infinity,Infinity"); 7072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW, 7092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fastInfo.maxFaces); 7102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW, 7112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 0); 7122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_FRAME_FORMAT, 7142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::PIXEL_FORMAT_ANDROID_OPAQUE); 7152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_RECORDING_HINT, 7172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FALSE); 7182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED, 7202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::TRUE); 7212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION, 7232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FALSE); 7242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableVideoStabilizationModes = 7262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES); 7272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!availableVideoStabilizationModes.count) return NO_INIT; 7282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (availableVideoStabilizationModes.count > 1) { 7302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 7312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::TRUE); 7322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else { 7332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 7342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters::FALSE); 7352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 7362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Set up initial state for non-Camera.Parameters state variables 7382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala storeMetadataInBuffers = true; 7402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala playShutterSound = true; 7412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala enableFaceDetect = false; 7422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala enableFocusMoveMessages = false; 74469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala afTriggerCounter = 1; 7452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala currentAfTriggerId = -1; 7462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 74769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala precaptureTriggerCounter = 1; 74869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 7492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala previewCallbackFlags = 0; 7502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 751c3dbf1a40df85b75e5805382838a90416f69730fJames Painter zslMode = false; 752c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 753c3dbf1a40df85b75e5805382838a90416f69730fJames Painter lightFx = LIGHTFX_NONE; 754c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 7552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala state = STOPPED; 7562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala paramsFlattened = params.flatten(); 7582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return OK; 7602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 7612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalastatus_t Parameters::buildFastInfo() { 7632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t activeArraySize = 7652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_SENSOR_ACTIVE_ARRAY_SIZE, 2, 2); 7662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!activeArraySize.count) return NO_INIT; 7672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t arrayWidth = activeArraySize.data.i32[0]; 7682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t arrayHeight = activeArraySize.data.i32[1]; 7692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableFaceDetectModes = 7712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_STATS_AVAILABLE_FACE_DETECT_MODES); 7722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!availableFaceDetectModes.count) return NO_INIT; 7732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala uint8_t bestFaceDetectMode = 7752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_STATS_FACE_DETECTION_OFF; 7762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i = 0 ; i < availableFaceDetectModes.count; i++) { 7772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala switch (availableFaceDetectModes.data.u8[i]) { 7782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_STATS_FACE_DETECTION_OFF: 7792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 7802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_STATS_FACE_DETECTION_SIMPLE: 7812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (bestFaceDetectMode != 7822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_STATS_FACE_DETECTION_FULL) { 7832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bestFaceDetectMode = 7842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_STATS_FACE_DETECTION_SIMPLE; 7852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 7862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 7872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case ANDROID_STATS_FACE_DETECTION_FULL: 7882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bestFaceDetectMode = 7892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_STATS_FACE_DETECTION_FULL; 7902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 7912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala default: 7922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Camera %d: Unknown face detect mode %d:", 7932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, cameraId, 7942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableFaceDetectModes.data.u8[i]); 7952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return NO_INIT; 7962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 7972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 7982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 7992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t maxFacesDetected = 8002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_STATS_MAX_FACE_COUNT, 1, 1); 8012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!maxFacesDetected.count) return NO_INIT; 8022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int32_t maxFaces = maxFacesDetected.data.i32[0]; 8042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fastInfo.arrayWidth = arrayWidth; 8062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fastInfo.arrayHeight = arrayHeight; 8072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fastInfo.bestFaceDetectMode = bestFaceDetectMode; 8082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fastInfo.maxFaces = maxFaces; 8092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return OK; 8102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 8112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalacamera_metadata_ro_entry_t Parameters::staticInfo(uint32_t tag, 8132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala size_t minCount, size_t maxCount) const { 8142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala status_t res; 8152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t entry = info->find(tag); 8162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (CC_UNLIKELY( entry.count == 0 )) { 8182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char* tagSection = get_camera_metadata_section_name(tag); 8192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (tagSection == NULL) tagSection = "<unknown>"; 8202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char* tagName = get_camera_metadata_tag_name(tag); 8212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (tagName == NULL) tagName = "<unknown>"; 8222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("Error finding static metadata entry '%s.%s' (%x)", 8242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala tagSection, tagName, tag); 8252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else if (CC_UNLIKELY( 8262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala (minCount != 0 && entry.count < minCount) || 8272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala (maxCount != 0 && entry.count > maxCount) ) ) { 8282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char* tagSection = get_camera_metadata_section_name(tag); 8292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (tagSection == NULL) tagSection = "<unknown>"; 8302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char* tagName = get_camera_metadata_tag_name(tag); 8312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (tagName == NULL) tagName = "<unknown>"; 8322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("Malformed static metadata entry '%s.%s' (%x):" 8332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala "Expected between %d and %d values, but got %d values", 8342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala tagSection, tagName, tag, minCount, maxCount, entry.count); 8352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 8362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return entry; 8382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 8392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalastatus_t Parameters::set(const String8& params) { 8412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala status_t res; 8422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CameraParameters newParams(params); 8442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // TODO: Currently ignoring any changes to supposedly read-only parameters 8462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // such as supported preview sizes, etc. Should probably produce an error if 8472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // they're changed. 8482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala /** Extract and verify new parameters */ 8502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala size_t i; 8522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters validatedParams(*this); 8542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // PREVIEW_SIZE 8562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.getPreviewSize(&validatedParams.previewWidth, 8572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala &validatedParams.previewHeight); 8582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.previewWidth != previewWidth || 8602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewHeight != previewHeight) { 8612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (state >= PREVIEW) { 8622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Preview size cannot be updated when preview " 8632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala "is active! (Currently %d x %d, requested %d x %d", 8642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, 8652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala previewWidth, previewHeight, 8662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewWidth, validatedParams.previewHeight); 8672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 8682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 8692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availablePreviewSizes = 8702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES); 8712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availablePreviewSizes.count; i += 2 ) { 8722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if ((availablePreviewSizes.data.i32[i] == 8732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewWidth) && 8742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala (availablePreviewSizes.data.i32[i+1] == 8752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewHeight)) break; 8762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 8772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availablePreviewSizes.count) { 8782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested preview size %d x %d is not supported", 8792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, validatedParams.previewWidth, 8802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewHeight); 8812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 8822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 8832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 8842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 8852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // PREVIEW_FPS_RANGE 8862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala bool fpsRangeChanged = false; 8872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.getPreviewFpsRange(&validatedParams.previewFpsRange[0], 8882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala &validatedParams.previewFpsRange[1]); 8892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.previewFpsRange[0] != previewFpsRange[0] || 8902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewFpsRange[1] != previewFpsRange[1]) { 8912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fpsRangeChanged = true; 8922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availablePreviewFpsRanges = 8932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 2); 8942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availablePreviewFpsRanges.count; i += 2) { 8952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if ((availablePreviewFpsRanges.data.i32[i] == 8962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewFpsRange[0]) && 8972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala (availablePreviewFpsRanges.data.i32[i+1] == 8982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewFpsRange[1]) ) { 8992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 9002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availablePreviewFpsRanges.count) { 9032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested preview FPS range %d - %d is not supported", 9042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, validatedParams.previewFpsRange[0], 9052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewFpsRange[1]); 9062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 9072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewFps = validatedParams.previewFpsRange[0]; 9092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 9112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // PREVIEW_FORMAT 9122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewFormat = 9132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala formatStringToEnum(newParams.getPreviewFormat()); 9142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.previewFormat != previewFormat) { 9152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (state >= PREVIEW) { 9162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Preview format cannot be updated when preview " 9172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala "is active!", __FUNCTION__); 9182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 9192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableFormats = 9212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_FORMATS); 9222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availableFormats.count; i++) { 9232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (availableFormats.data.i32[i] == validatedParams.previewFormat) 9242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 9252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availableFormats.count) { 9272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested preview format %s (0x%x) is not supported", 9282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, newParams.getPreviewFormat(), 9292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewFormat); 9302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 9312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 9342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // PREVIEW_FRAME_RATE 9352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Deprecated, only use if the preview fps range is unchanged this time. 9362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // The single-value FPS is the same as the minimum of the range. 9372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!fpsRangeChanged) { 9382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewFps = newParams.getPreviewFrameRate(); 9392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.previewFps != previewFps) { 9402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableFrameRates = 9412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); 9422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availableFrameRates.count; i+=2) { 9432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (availableFrameRates.data.i32[i] == 9442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewFps) break; 9452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availableFrameRates.count) { 9472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested preview frame rate %d is not supported", 9482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, validatedParams.previewFps); 9492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 9502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewFpsRange[0] = 9522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableFrameRates.data.i32[i]; 9532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.previewFpsRange[1] = 9542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableFrameRates.data.i32[i+1]; 9552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 9582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // PICTURE_SIZE 9592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.getPictureSize(&validatedParams.pictureWidth, 9602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala &validatedParams.pictureHeight); 9612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.pictureWidth == pictureWidth || 9622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.pictureHeight == pictureHeight) { 9632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availablePictureSizes = 9642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_JPEG_SIZES); 9652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availablePictureSizes.count; i+=2) { 9662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if ((availablePictureSizes.data.i32[i] == 9672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.pictureWidth) && 9682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala (availablePictureSizes.data.i32[i+1] == 9692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.pictureHeight)) break; 9702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availablePictureSizes.count) { 9722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested picture size %d x %d is not supported", 9732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, validatedParams.pictureWidth, 9742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.pictureHeight); 9752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 9762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 9792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // JPEG_THUMBNAIL_WIDTH/HEIGHT 9802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegThumbSize[0] = 9812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH); 9822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegThumbSize[1] = 9832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT); 9842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.jpegThumbSize[0] != jpegThumbSize[0] || 9852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegThumbSize[1] != jpegThumbSize[1]) { 9862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableJpegThumbSizes = 9872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES); 9882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availableJpegThumbSizes.count; i+=2) { 9892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if ((availableJpegThumbSizes.data.i32[i] == 9902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegThumbSize[0]) && 9912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala (availableJpegThumbSizes.data.i32[i+1] == 9922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegThumbSize[1])) break; 9932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 9942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availableJpegThumbSizes.count) { 9952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested JPEG thumbnail size %d x %d is not supported", 9962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, validatedParams.jpegThumbSize[0], 9972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegThumbSize[1]); 9982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 9992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 10002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 10012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 10022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // JPEG_THUMBNAIL_QUALITY 10032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegThumbQuality = 10042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY); 10052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.jpegThumbQuality < 0 || 10062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegThumbQuality > 100) { 10072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested JPEG thumbnail quality %d is not supported", 10082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, validatedParams.jpegThumbQuality); 10092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 10102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 10112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 10122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // JPEG_QUALITY 10132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegQuality = 10142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_JPEG_QUALITY); 10152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.jpegQuality < 0 || validatedParams.jpegQuality > 100) { 10162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested JPEG quality %d is not supported", 10172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, validatedParams.jpegQuality); 10182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 10192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 10202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 10212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // ROTATION 10222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegRotation = 10232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_ROTATION); 10242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.jpegRotation != 0 && 10252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegRotation != 90 && 10262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegRotation != 180 && 10272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.jpegRotation != 270) { 10282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested picture rotation angle %d is not supported", 10292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, validatedParams.jpegRotation); 10302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 10312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 10322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 10332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // GPS 10342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 10352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char *gpsLatStr = 10362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_LATITUDE); 10372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (gpsLatStr != NULL) { 10382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char *gpsLongStr = 10392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_LONGITUDE); 10402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char *gpsAltitudeStr = 10412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_ALTITUDE); 10422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char *gpsTimeStr = 10432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_TIMESTAMP); 10442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char *gpsProcMethodStr = 10452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_GPS_PROCESSING_METHOD); 10462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (gpsLongStr == NULL || 10472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala gpsAltitudeStr == NULL || 10482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala gpsTimeStr == NULL || 10492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala gpsProcMethodStr == NULL) { 10502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Incomplete set of GPS parameters provided", 10512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__); 10522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 10532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 10542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala char *endPtr; 10552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala errno = 0; 10562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.gpsCoordinates[0] = strtod(gpsLatStr, &endPtr); 10572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (errno || endPtr == gpsLatStr) { 10582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Malformed GPS latitude: %s", __FUNCTION__, gpsLatStr); 10592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 10602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 10612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala errno = 0; 10622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.gpsCoordinates[1] = strtod(gpsLongStr, &endPtr); 10632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (errno || endPtr == gpsLongStr) { 10642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Malformed GPS longitude: %s", __FUNCTION__, gpsLongStr); 10652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 10662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 10672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala errno = 0; 10682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.gpsCoordinates[2] = strtod(gpsAltitudeStr, &endPtr); 10692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (errno || endPtr == gpsAltitudeStr) { 10702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Malformed GPS altitude: %s", __FUNCTION__, 10712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala gpsAltitudeStr); 10722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 10732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 10742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala errno = 0; 10752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.gpsTimestamp = strtoll(gpsTimeStr, &endPtr, 10); 10762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (errno || endPtr == gpsTimeStr) { 10772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Malformed GPS timestamp: %s", __FUNCTION__, gpsTimeStr); 10782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 10792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 10802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.gpsProcessingMethod = gpsProcMethodStr; 10812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 10822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.gpsEnabled = true; 10832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else { 10842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.gpsEnabled = false; 10852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 10862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 10872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // WHITE_BALANCE 10882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.wbMode = wbModeStringToEnum( 10892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_WHITE_BALANCE) ); 10902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.wbMode != wbMode) { 10912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableWbModes = 10922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AWB_AVAILABLE_MODES); 10932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availableWbModes.count; i++) { 10942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.wbMode == availableWbModes.data.u8[i]) break; 10952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 10962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availableWbModes.count) { 10972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested white balance mode %s is not supported", 10982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, 10992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_WHITE_BALANCE)); 11002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 11012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 11042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // EFFECT 11052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.effectMode = effectModeStringToEnum( 11062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_EFFECT) ); 11072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.effectMode != effectMode) { 11082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableEffectModes = 11092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_EFFECTS); 11102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availableEffectModes.count; i++) { 11112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.effectMode == availableEffectModes.data.u8[i]) break; 11122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availableEffectModes.count) { 11142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested effect mode \"%s\" is not supported", 11152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, 11162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_EFFECT) ); 11172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 11182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 11212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // ANTIBANDING 11222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.antibandingMode = abModeStringToEnum( 11232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_ANTIBANDING) ); 11242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.antibandingMode != antibandingMode) { 11252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableAbModes = 11262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES); 11272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availableAbModes.count; i++) { 11282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.antibandingMode == availableAbModes.data.u8[i]) 11292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 11302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availableAbModes.count) { 11322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested antibanding mode \"%s\" is not supported", 11332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, 11342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_ANTIBANDING)); 11352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 11362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 11392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // SCENE_MODE 11402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.sceneMode = sceneModeStringToEnum( 11412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_SCENE_MODE) ); 11422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.sceneMode != sceneMode && 11432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.sceneMode != 11442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED) { 11452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableSceneModes = 11462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_SCENE_MODES); 11472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availableSceneModes.count; i++) { 11482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.sceneMode == availableSceneModes.data.u8[i]) 11492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 11502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availableSceneModes.count) { 11522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested scene mode \"%s\" is not supported", 11532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, 11542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_SCENE_MODE)); 11552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 11562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 11592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // FLASH_MODE 11602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.flashMode = flashModeStringToEnum( 11612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE) ); 11622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.flashMode != flashMode) { 11632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t flashAvailable = 11642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_FLASH_AVAILABLE, 1, 1); 11652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!flashAvailable.data.u8[0] && 11662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.flashMode != Parameters::FLASH_MODE_OFF) { 11672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested flash mode \"%s\" is not supported: " 11682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala "No flash on device", __FUNCTION__, 11692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE)); 11702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 11712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else if (validatedParams.flashMode == Parameters::FLASH_MODE_RED_EYE) { 11722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableAeModes = 11732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_MODES); 11742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availableAeModes.count; i++) { 11752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.flashMode == availableAeModes.data.u8[i]) 11762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 11772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availableAeModes.count) { 11792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested flash mode \"%s\" is not supported", 11802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, 11812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE)); 11822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 11832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else if (validatedParams.flashMode == -1) { 11852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested flash mode \"%s\" is unknown", 11862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, 11872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_FLASH_MODE)); 11882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 11892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 11912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 11922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // FOCUS_MODE 11932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.focusMode = focusModeStringToEnum( 11942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_FOCUS_MODE)); 11952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.focusMode != focusMode) { 11962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.currentAfTriggerId = -1; 11972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.focusMode != Parameters::FOCUS_MODE_FIXED) { 11982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t minFocusDistance = 11992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_LENS_MINIMUM_FOCUS_DISTANCE); 12002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (minFocusDistance.data.f[0] == 0) { 12012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested focus mode \"%s\" is not available: " 12022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala "fixed focus lens", 12032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, 12042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_FOCUS_MODE)); 12052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 12062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else if (validatedParams.focusMode != 12072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FOCUS_MODE_INFINITY) { 12082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableFocusModes = 12092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AF_AVAILABLE_MODES); 12102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availableFocusModes.count; i++) { 12112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.focusMode == 12122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableFocusModes.data.u8[i]) break; 12132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 12142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availableFocusModes.count) { 12152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested focus mode \"%s\" is not supported", 12162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, 12172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_FOCUS_MODE)); 12182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 12192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 12202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 12212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 12222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else { 12232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.currentAfTriggerId = currentAfTriggerId; 12242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 12252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 12262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // FOCUS_AREAS 12272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala res = parseAreas(newParams.get(CameraParameters::KEY_FOCUS_AREAS), 12282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala &validatedParams.focusingAreas); 12292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala size_t max3aRegions = 12302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala (size_t)staticInfo(ANDROID_CONTROL_MAX_REGIONS, 1, 1).data.i32[0]; 12312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (res == OK) res = validateAreas(validatedParams.focusingAreas, 12322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala max3aRegions); 12332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (res != OK) { 12342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested focus areas are malformed: %s", 12352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, newParams.get(CameraParameters::KEY_FOCUS_AREAS)); 12362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 12372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 12382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 12392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // EXPOSURE_COMPENSATION 12402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.exposureCompensation = 12412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.getInt(CameraParameters::KEY_EXPOSURE_COMPENSATION); 12422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t exposureCompensationRange = 12432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE); 12442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if ((validatedParams.exposureCompensation < 12452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala exposureCompensationRange.data.i32[0]) || 12462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala (validatedParams.exposureCompensation > 12472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala exposureCompensationRange.data.i32[1])) { 12482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested exposure compensation index is out of bounds: %d", 12492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, validatedParams.exposureCompensation); 12502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 12512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 12522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 12532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // AUTO_EXPOSURE_LOCK (always supported) 12542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.autoExposureLock = boolFromString( 12552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_AUTO_EXPOSURE_LOCK)); 12562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 12572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // AUTO_WHITEBALANCE_LOCK (always supported) 12582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.autoWhiteBalanceLock = boolFromString( 12592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK)); 12602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 12612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // METERING_AREAS 12622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala res = parseAreas(newParams.get(CameraParameters::KEY_METERING_AREAS), 12632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala &validatedParams.meteringAreas); 12642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (res == OK) { 12652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala res = validateAreas(validatedParams.meteringAreas, max3aRegions); 12662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 12672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (res != OK) { 12682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested metering areas are malformed: %s", 12692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, 12702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_METERING_AREAS)); 12712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 12722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 12732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 12742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // ZOOM 12752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.zoom = newParams.getInt(CameraParameters::KEY_ZOOM); 12762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.zoom < 0 || validatedParams.zoom > (int)NUM_ZOOM_STEPS) { 12772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested zoom level %d is not supported", 12782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, validatedParams.zoom); 12792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 12802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 12812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 12822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // VIDEO_SIZE 12832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.getVideoSize(&validatedParams.videoWidth, 12842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala &validatedParams.videoHeight); 12852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.videoWidth != videoWidth || 12862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.videoHeight != videoHeight) { 12872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (state == RECORD) { 12882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Video size cannot be updated when recording is active!", 12892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__); 12902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 12912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 12922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableVideoSizes = 12932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES); 12942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (i = 0; i < availableVideoSizes.count; i += 2 ) { 12952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if ((availableVideoSizes.data.i32[i] == 12962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.videoWidth) && 12972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala (availableVideoSizes.data.i32[i+1] == 12982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.videoHeight)) break; 12992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 13002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (i == availableVideoSizes.count) { 13012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Requested video size %d x %d is not supported", 13022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, validatedParams.videoWidth, 13032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.videoHeight); 13042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 13052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 13062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 13072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 13082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // RECORDING_HINT (always supported) 13092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.recordingHint = boolFromString( 13102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_RECORDING_HINT) ); 13112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 13122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // VIDEO_STABILIZATION 13132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.videoStabilization = boolFromString( 13142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala newParams.get(CameraParameters::KEY_VIDEO_STABILIZATION) ); 13152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala camera_metadata_ro_entry_t availableVideoStabilizationModes = 13162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES); 13172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (validatedParams.videoStabilization && 13182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala availableVideoStabilizationModes.count == 1) { 13192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Video stabilization not supported", __FUNCTION__); 13202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 13212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1322c3dbf1a40df85b75e5805382838a90416f69730fJames Painter // LIGHTFX 1323c3dbf1a40df85b75e5805382838a90416f69730fJames Painter validatedParams.lightFx = lightFxStringToEnum( 1324c3dbf1a40df85b75e5805382838a90416f69730fJames Painter newParams.get(CameraParameters::KEY_LIGHTFX)); 1325c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 13262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala /** Update internal parameters */ 13272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 13282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala validatedParams.paramsFlattened = params; 13292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala *this = validatedParams; 13302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 13312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return OK; 13322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 13332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 133469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalastatus_t Parameters::updateRequest(CameraMetadata *request) const { 133569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ATRACE_CALL(); 133669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala status_t res; 133769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 133869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala uint8_t metadataMode = ANDROID_REQUEST_METADATA_FULL; 133969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_REQUEST_METADATA_MODE, 134069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &metadataMode, 1); 134169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 134269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 134369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_AE_TARGET_FPS_RANGE, 134469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala previewFpsRange, 2); 134569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 134669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 134769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_AWB_MODE, 13482d6a503f548ac047f30995c4f74f58259ab9027bEino-Ville Talvala &wbMode, 1); 134969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 13502d6a503f548ac047f30995c4f74f58259ab9027bEino-Ville Talvala 13512d6a503f548ac047f30995c4f74f58259ab9027bEino-Ville Talvala uint8_t reqWbLock = autoWhiteBalanceLock ? 13522d6a503f548ac047f30995c4f74f58259ab9027bEino-Ville Talvala ANDROID_CONTROL_AWB_LOCK_ON : ANDROID_CONTROL_AWB_LOCK_OFF; 13532d6a503f548ac047f30995c4f74f58259ab9027bEino-Ville Talvala res = request->update(ANDROID_CONTROL_AWB_LOCK, 13542d6a503f548ac047f30995c4f74f58259ab9027bEino-Ville Talvala &reqWbLock, 1); 13552d6a503f548ac047f30995c4f74f58259ab9027bEino-Ville Talvala 135669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_EFFECT_MODE, 135769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &effectMode, 1); 135869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 135969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_AE_ANTIBANDING_MODE, 136069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &antibandingMode, 1); 136169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 136269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 136369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala uint8_t reqControlMode = 136469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala (sceneMode == ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED) ? 136569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ANDROID_CONTROL_AUTO : ANDROID_CONTROL_USE_SCENE_MODE; 136669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_MODE, 136769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &reqControlMode, 1); 136869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 136969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (reqControlMode == ANDROID_CONTROL_USE_SCENE_MODE) { 137069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_SCENE_MODE, 137169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &sceneMode, 1); 137269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 137369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 137469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 137569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala uint8_t reqFlashMode = ANDROID_FLASH_OFF; 137669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala uint8_t reqAeMode; 137769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala switch (flashMode) { 137869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::FLASH_MODE_OFF: 137969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqAeMode = ANDROID_CONTROL_AE_ON; break; 138069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::FLASH_MODE_AUTO: 138169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqAeMode = ANDROID_CONTROL_AE_ON_AUTO_FLASH; break; 138269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::FLASH_MODE_ON: 138369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqAeMode = ANDROID_CONTROL_AE_ON_ALWAYS_FLASH; break; 138469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::FLASH_MODE_TORCH: 138569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqAeMode = ANDROID_CONTROL_AE_ON; 138669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFlashMode = ANDROID_FLASH_TORCH; 138769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala break; 138869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::FLASH_MODE_RED_EYE: 138969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqAeMode = ANDROID_CONTROL_AE_ON_AUTO_FLASH_REDEYE; break; 139069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala default: 139169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Camera %d: Unknown flash mode %d", __FUNCTION__, 139269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala cameraId, flashMode); 139369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return BAD_VALUE; 139469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 139569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_FLASH_MODE, 139669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &reqFlashMode, 1); 139769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 139869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_AE_MODE, 139969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &reqAeMode, 1); 140069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 140169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 14022d6a503f548ac047f30995c4f74f58259ab9027bEino-Ville Talvala uint8_t reqAeLock = autoExposureLock ? 14032d6a503f548ac047f30995c4f74f58259ab9027bEino-Ville Talvala ANDROID_CONTROL_AE_LOCK_ON : ANDROID_CONTROL_AE_LOCK_OFF; 14042d6a503f548ac047f30995c4f74f58259ab9027bEino-Ville Talvala res = request->update(ANDROID_CONTROL_AE_LOCK, 14052d6a503f548ac047f30995c4f74f58259ab9027bEino-Ville Talvala &reqAeLock, 1); 14062d6a503f548ac047f30995c4f74f58259ab9027bEino-Ville Talvala 140769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala float reqFocusDistance = 0; // infinity focus in diopters 140869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala uint8_t reqFocusMode; 140969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala switch (focusMode) { 141069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::FOCUS_MODE_AUTO: 141169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::FOCUS_MODE_MACRO: 141269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::FOCUS_MODE_CONTINUOUS_VIDEO: 141369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::FOCUS_MODE_CONTINUOUS_PICTURE: 141469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::FOCUS_MODE_EDOF: 141569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFocusMode = focusMode; 141669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala break; 141769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::FOCUS_MODE_INFINITY: 141869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala case Parameters::FOCUS_MODE_FIXED: 141969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFocusMode = ANDROID_CONTROL_AF_OFF; 142069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala break; 142169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala default: 142269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ALOGE("%s: Camera %d: Unknown focus mode %d", __FUNCTION__, 142369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala cameraId, focusMode); 142469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return BAD_VALUE; 142569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 142669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_LENS_FOCUS_DISTANCE, 142769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &reqFocusDistance, 1); 142869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 142969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_AF_MODE, 143069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &reqFocusMode, 1); 143169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 143269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 143369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala size_t reqFocusingAreasSize = focusingAreas.size() * 5; 143469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala int32_t *reqFocusingAreas = new int32_t[reqFocusingAreasSize]; 143569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala for (size_t i = 0; i < reqFocusingAreasSize; i += 5) { 143669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (focusingAreas[i].weight != 0) { 143769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFocusingAreas[i + 0] = 143869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala normalizedXToArray(focusingAreas[i].left); 143969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFocusingAreas[i + 1] = 144069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala normalizedYToArray(focusingAreas[i].top); 144169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFocusingAreas[i + 2] = 144269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala normalizedXToArray(focusingAreas[i].right); 144369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFocusingAreas[i + 3] = 144469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala normalizedYToArray(focusingAreas[i].bottom); 144569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } else { 144669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFocusingAreas[i + 0] = 0; 144769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFocusingAreas[i + 1] = 0; 144869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFocusingAreas[i + 2] = 0; 144969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFocusingAreas[i + 3] = 0; 145069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 145169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFocusingAreas[i + 4] = focusingAreas[i].weight; 145269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 145369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_AF_REGIONS, 145469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqFocusingAreas, reqFocusingAreasSize); 145569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 145669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala delete[] reqFocusingAreas; 145769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 145869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_AE_EXP_COMPENSATION, 145969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &exposureCompensation, 1); 146069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 146169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 146269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala size_t reqMeteringAreasSize = meteringAreas.size() * 5; 146369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala int32_t *reqMeteringAreas = new int32_t[reqMeteringAreasSize]; 146469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala for (size_t i = 0; i < reqMeteringAreasSize; i += 5) { 146569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (meteringAreas[i].weight != 0) { 146669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqMeteringAreas[i + 0] = 146769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala normalizedXToArray(meteringAreas[i].left); 146869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqMeteringAreas[i + 1] = 146969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala normalizedYToArray(meteringAreas[i].top); 147069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqMeteringAreas[i + 2] = 147169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala normalizedXToArray(meteringAreas[i].right); 147269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqMeteringAreas[i + 3] = 147369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala normalizedYToArray(meteringAreas[i].bottom); 147469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } else { 147569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqMeteringAreas[i + 0] = 0; 147669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqMeteringAreas[i + 1] = 0; 147769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqMeteringAreas[i + 2] = 0; 147869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqMeteringAreas[i + 3] = 0; 147969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 148069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqMeteringAreas[i + 4] = meteringAreas[i].weight; 148169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 148269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_AE_REGIONS, 148369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqMeteringAreas, reqMeteringAreasSize); 148469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 148569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 148669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_AWB_REGIONS, 148769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqMeteringAreas, reqMeteringAreasSize); 148869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 148969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala delete[] reqMeteringAreas; 149069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 149169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala // Need to convert zoom index into a crop rectangle. The rectangle is 149269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala // chosen to maximize its area on the sensor 149369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 149469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala camera_metadata_ro_entry_t maxDigitalZoom = 149569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_MAX_ZOOM); 149669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala float zoomIncrement = (maxDigitalZoom.data.f[0] - 1) / 149769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala (NUM_ZOOM_STEPS-1); 149869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala float zoomRatio = 1 + zoomIncrement * zoom; 149969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 150069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala float zoomLeft, zoomTop, zoomWidth, zoomHeight; 150169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (previewWidth >= previewHeight) { 150269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala zoomWidth = fastInfo.arrayWidth / zoomRatio; 150369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala zoomHeight = zoomWidth * 150469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala previewHeight / previewWidth; 150569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } else { 150669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala zoomHeight = fastInfo.arrayHeight / zoomRatio; 150769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala zoomWidth = zoomHeight * 150869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala previewWidth / previewHeight; 150969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala } 151069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala zoomLeft = (fastInfo.arrayWidth - zoomWidth) / 2; 151169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala zoomTop = (fastInfo.arrayHeight - zoomHeight) / 2; 151269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 151369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala int32_t reqCropRegion[3] = { zoomLeft, zoomTop, zoomWidth }; 151469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_SCALER_CROP_REGION, 151569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala reqCropRegion, 3); 151669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 151769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 151869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala // TODO: Decide how to map recordingHint, or whether just to ignore it 151969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 152069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala uint8_t reqVstabMode = videoStabilization ? 152169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ANDROID_CONTROL_VIDEO_STABILIZATION_ON : 152269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ANDROID_CONTROL_VIDEO_STABILIZATION_OFF; 152369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_CONTROL_VIDEO_STABILIZATION_MODE, 152469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &reqVstabMode, 1); 152569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 152669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 152769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala uint8_t reqFaceDetectMode = enableFaceDetect ? 152869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala fastInfo.bestFaceDetectMode : 152969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala (uint8_t)ANDROID_STATS_FACE_DETECTION_OFF; 153069230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala res = request->update(ANDROID_STATS_FACE_DETECT_MODE, 153169230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala &reqFaceDetectMode, 1); 153269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala if (res != OK) return res; 153369230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 153469230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala return OK; 153569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala} 153669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 15372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaconst char* Parameters::getStateName(State state) { 15382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#define CASE_ENUM_TO_CHAR(x) case x: return(#x); break; 15392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala switch(state) { 15402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CASE_ENUM_TO_CHAR(DISCONNECTED) 15412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CASE_ENUM_TO_CHAR(STOPPED) 15422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CASE_ENUM_TO_CHAR(WAITING_FOR_PREVIEW_WINDOW) 15432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CASE_ENUM_TO_CHAR(PREVIEW) 15442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CASE_ENUM_TO_CHAR(RECORD) 15452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CASE_ENUM_TO_CHAR(STILL_CAPTURE) 15462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala CASE_ENUM_TO_CHAR(VIDEO_SNAPSHOT) 15472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala default: 15482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return "Unknown state!"; 15492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 15502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 15512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#undef CASE_ENUM_TO_CHAR 15522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 15532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 15542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaint Parameters::formatStringToEnum(const char *format) { 15552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return 15564c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala !format ? 15574c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala HAL_PIXEL_FORMAT_YCrCb_420_SP : 15582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV422SP) ? 15592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala HAL_PIXEL_FORMAT_YCbCr_422_SP : // NV16 15602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV420SP) ? 15612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala HAL_PIXEL_FORMAT_YCrCb_420_SP : // NV21 15622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV422I) ? 15632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala HAL_PIXEL_FORMAT_YCbCr_422_I : // YUY2 15642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_YUV420P) ? 15652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala HAL_PIXEL_FORMAT_YV12 : // YV12 15662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_RGB565) ? 15672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala HAL_PIXEL_FORMAT_RGB_565 : // RGB565 15682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_RGBA8888) ? 15692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala HAL_PIXEL_FORMAT_RGBA_8888 : // RGB8888 15702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(format, CameraParameters::PIXEL_FORMAT_BAYER_RGGB) ? 15712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala HAL_PIXEL_FORMAT_RAW_SENSOR : // Raw sensor data 15722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala -1; 15732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 15742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 15752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaconst char* Parameters::formatEnumToString(int format) { 15762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char *fmt; 15772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala switch(format) { 15782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: // NV16 15792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV422SP; 15802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 15812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: // NV21 15822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV420SP; 15832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 15842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: // YUY2 15852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV422I; 15862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 15872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: // YV12 15882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV420P; 15892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 15902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: // RGB565 15912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_RGB565; 15922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 15932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGBA_8888: // RGBA8888 15942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_RGBA8888; 15952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 15962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 15972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGW("Raw sensor preview format requested."); 15982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_BAYER_RGGB; 15992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 16002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala default: 16012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Unknown preview format: %x", 16022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, format); 16032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala fmt = NULL; 16042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala break; 16052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 16062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return fmt; 16072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 16082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 16092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaint Parameters::wbModeStringToEnum(const char *wbMode) { 16102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return 16114c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala !wbMode ? 16124c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala ANDROID_CONTROL_AWB_AUTO : 16132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_AUTO) ? 16142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AWB_AUTO : 16152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_INCANDESCENT) ? 16162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AWB_INCANDESCENT : 16172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_FLUORESCENT) ? 16182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AWB_FLUORESCENT : 16192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_WARM_FLUORESCENT) ? 16202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AWB_WARM_FLUORESCENT : 16212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_DAYLIGHT) ? 16222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AWB_DAYLIGHT : 16232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_CLOUDY_DAYLIGHT) ? 16242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT : 16252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_TWILIGHT) ? 16262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AWB_TWILIGHT : 16272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(wbMode, CameraParameters::WHITE_BALANCE_SHADE) ? 16282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AWB_SHADE : 16292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala -1; 16302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 16312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 16322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaint Parameters::effectModeStringToEnum(const char *effectMode) { 16332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return 16344c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala !effectMode ? 16354c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala ANDROID_CONTROL_EFFECT_OFF : 16362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_NONE) ? 16372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_EFFECT_OFF : 16382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_MONO) ? 16392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_EFFECT_MONO : 16402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_NEGATIVE) ? 16412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_EFFECT_NEGATIVE : 16422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_SOLARIZE) ? 16432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_EFFECT_SOLARIZE : 16442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_SEPIA) ? 16452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_EFFECT_SEPIA : 16462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_POSTERIZE) ? 16472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_EFFECT_POSTERIZE : 16482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_WHITEBOARD) ? 16492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_EFFECT_WHITEBOARD : 16502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_BLACKBOARD) ? 16512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_EFFECT_BLACKBOARD : 16522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(effectMode, CameraParameters::EFFECT_AQUA) ? 16532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_EFFECT_AQUA : 16542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala -1; 16552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 16562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 16572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaint Parameters::abModeStringToEnum(const char *abMode) { 16582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return 16594c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala !abMode ? 16604c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_AUTO : 16612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_AUTO) ? 16622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_AUTO : 16632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_OFF) ? 16642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_OFF : 16652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_50HZ) ? 16662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_50HZ : 16672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(abMode, CameraParameters::ANTIBANDING_60HZ) ? 16682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_AE_ANTIBANDING_60HZ : 16692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala -1; 16702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 16712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 16722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaint Parameters::sceneModeStringToEnum(const char *sceneMode) { 16732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return 16744c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala !sceneMode ? 16754c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED : 16762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_AUTO) ? 16772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED : 16782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_ACTION) ? 16792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_ACTION : 16802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_PORTRAIT) ? 16812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_PORTRAIT : 16822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_LANDSCAPE) ? 16832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_LANDSCAPE : 16842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_NIGHT) ? 16852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_NIGHT : 16862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_NIGHT_PORTRAIT) ? 16872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT : 16882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_THEATRE) ? 16892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_THEATRE : 16902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_BEACH) ? 16912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_BEACH : 16922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_SNOW) ? 16932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_SNOW : 16942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_SUNSET) ? 16952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_SUNSET : 16962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_STEADYPHOTO) ? 16972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO : 16982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_FIREWORKS) ? 16992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_FIREWORKS : 17002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_SPORTS) ? 17012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_SPORTS : 17022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_PARTY) ? 17032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_PARTY : 17042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_CANDLELIGHT) ? 17052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT : 17062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(sceneMode, CameraParameters::SCENE_MODE_BARCODE) ? 17072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ANDROID_CONTROL_SCENE_MODE_BARCODE: 17082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala -1; 17092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 17102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 17112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville TalvalaParameters::Parameters::flashMode_t Parameters::flashModeStringToEnum( 17122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char *flashMode) { 17132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return 17144c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala !flashMode ? 17154c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala Parameters::FLASH_MODE_INVALID : 17162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_OFF) ? 17172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FLASH_MODE_OFF : 17182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_AUTO) ? 17192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FLASH_MODE_AUTO : 17202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_ON) ? 17212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FLASH_MODE_ON : 17222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_RED_EYE) ? 17232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FLASH_MODE_RED_EYE : 17242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(flashMode, CameraParameters::FLASH_MODE_TORCH) ? 17252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FLASH_MODE_TORCH : 17262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FLASH_MODE_INVALID; 17272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 17282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 17292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville TalvalaParameters::Parameters::focusMode_t Parameters::focusModeStringToEnum( 17302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char *focusMode) { 17312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return 17324c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala !focusMode ? 17334c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala Parameters::FOCUS_MODE_INVALID : 17342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_AUTO) ? 17352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FOCUS_MODE_AUTO : 17362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_INFINITY) ? 17372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FOCUS_MODE_INFINITY : 17382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_MACRO) ? 17392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FOCUS_MODE_MACRO : 17402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_FIXED) ? 17412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FOCUS_MODE_FIXED : 17422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_EDOF) ? 17432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FOCUS_MODE_EDOF : 17442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_CONTINUOUS_VIDEO) ? 17452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FOCUS_MODE_CONTINUOUS_VIDEO : 17462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(focusMode, CameraParameters::FOCUS_MODE_CONTINUOUS_PICTURE) ? 17472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FOCUS_MODE_CONTINUOUS_PICTURE : 17482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Parameters::FOCUS_MODE_INVALID; 17492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 17502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 1751c3dbf1a40df85b75e5805382838a90416f69730fJames PainterParameters::Parameters::lightFxMode_t Parameters::lightFxStringToEnum( 1752c3dbf1a40df85b75e5805382838a90416f69730fJames Painter const char *lightFxMode) { 1753c3dbf1a40df85b75e5805382838a90416f69730fJames Painter return 17544c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala !lightFxMode ? 17554c6b0b8fe86740a7cee1e179d0f55cbcd143d2d2Eino-Ville Talvala Parameters::LIGHTFX_NONE : 1756c3dbf1a40df85b75e5805382838a90416f69730fJames Painter !strcmp(lightFxMode, CameraParameters::LIGHTFX_LOWLIGHT) ? 1757c3dbf1a40df85b75e5805382838a90416f69730fJames Painter Parameters::LIGHTFX_LOWLIGHT : 1758c3dbf1a40df85b75e5805382838a90416f69730fJames Painter !strcmp(lightFxMode, CameraParameters::LIGHTFX_HDR) ? 1759c3dbf1a40df85b75e5805382838a90416f69730fJames Painter Parameters::LIGHTFX_HDR : 1760c3dbf1a40df85b75e5805382838a90416f69730fJames Painter Parameters::LIGHTFX_NONE; 1761c3dbf1a40df85b75e5805382838a90416f69730fJames Painter} 1762c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 17632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalastatus_t Parameters::parseAreas(const char *areasCStr, 17642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala Vector<Parameters::Area> *areas) { 17652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala static const size_t NUM_FIELDS = 5; 17662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala areas->clear(); 17672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (areasCStr == NULL) { 17682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // If no key exists, use default (0,0,0,0,0) 17692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala areas->push(); 17702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return OK; 17712e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 17722e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala String8 areasStr(areasCStr); 17732e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ssize_t areaStart = areasStr.find("(", 0) + 1; 17742e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala while (areaStart != 0) { 17752e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala const char* area = areasStr.string() + areaStart; 17762e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala char *numEnd; 17772e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala int vals[NUM_FIELDS]; 17782e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (size_t i = 0; i < NUM_FIELDS; i++) { 17792e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala errno = 0; 17802e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala vals[i] = strtol(area, &numEnd, 10); 17812e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (errno || numEnd == area) return BAD_VALUE; 17822e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala area = numEnd + 1; 17832e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 17842e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala areas->push(Parameters::Area( 17852e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala vals[0], vals[1], vals[2], vals[3], vals[4]) ); 17862e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala areaStart = areasStr.find("(", areaStart) + 1; 17872e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 17882e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return OK; 17892e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 17902e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 17912e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalastatus_t Parameters::validateAreas(const Vector<Parameters::Area> &areas, 17922e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala size_t maxRegions) { 17932e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Definition of valid area can be found in 17942e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // include/camera/CameraParameters.h 17952e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (areas.size() == 0) return BAD_VALUE; 17962e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (areas.size() == 1) { 17972e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (areas[0].left == 0 && 17982e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala areas[0].top == 0 && 17992e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala areas[0].right == 0 && 18002e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala areas[0].bottom == 0 && 18012e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala areas[0].weight == 0) { 18022e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala // Single (0,0,0,0,0) entry is always valid (== driver decides) 18032e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return OK; 18042e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 18052e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 18062e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (areas.size() > maxRegions) { 18072e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Too many areas requested: %d", 18082e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala __FUNCTION__, areas.size()); 18092e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return BAD_VALUE; 18102e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 18112e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 18122e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala for (Vector<Parameters::Area>::const_iterator a = areas.begin(); 18132e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala a != areas.end(); a++) { 18142e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (a->weight < 1 || a->weight > 1000) return BAD_VALUE; 18152e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (a->left < -1000 || a->left > 1000) return BAD_VALUE; 18162e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (a->top < -1000 || a->top > 1000) return BAD_VALUE; 18172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (a->right < -1000 || a->right > 1000) return BAD_VALUE; 18182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (a->bottom < -1000 || a->bottom > 1000) return BAD_VALUE; 18192e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (a->left >= a->right) return BAD_VALUE; 18202e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (a->top >= a->bottom) return BAD_VALUE; 18212e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 18222e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return OK; 18232e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 18242e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 18252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalabool Parameters::boolFromString(const char *boolStr) { 18262e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return !boolStr ? false : 18272e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala !strcmp(boolStr, CameraParameters::TRUE) ? true : 18282e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala false; 18292e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 18302e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 18312e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaint Parameters::degToTransform(int degrees, bool mirror) { 18322e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (!mirror) { 18332e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (degrees == 0) return 0; 18342e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala else if (degrees == 90) return HAL_TRANSFORM_ROT_90; 18352e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala else if (degrees == 180) return HAL_TRANSFORM_ROT_180; 18362e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala else if (degrees == 270) return HAL_TRANSFORM_ROT_270; 18372e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else { // Do mirror (horizontal flip) 18382e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala if (degrees == 0) { // FLIP_H and ROT_0 18392e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return HAL_TRANSFORM_FLIP_H; 18402e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else if (degrees == 90) { // FLIP_H and ROT_90 18412e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return HAL_TRANSFORM_FLIP_H | HAL_TRANSFORM_ROT_90; 18422e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else if (degrees == 180) { // FLIP_H and ROT_180 18432e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return HAL_TRANSFORM_FLIP_V; 18442e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } else if (degrees == 270) { // FLIP_H and ROT_270 18452e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return HAL_TRANSFORM_FLIP_V | HAL_TRANSFORM_ROT_90; 18462e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 18472e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala } 18482e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala ALOGE("%s: Bad input: %d", __FUNCTION__, degrees); 18492e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return -1; 18502e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 18512e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 18522e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaint Parameters::arrayXToNormalized(int width) const { 18532e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return width * 2000 / (fastInfo.arrayWidth - 1) - 1000; 18542e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 18552e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 18562e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaint Parameters::arrayYToNormalized(int height) const { 18572e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return height * 2000 / (fastInfo.arrayHeight - 1) - 1000; 18582e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 18592e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 18602e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaint Parameters::normalizedXToArray(int x) const { 18612e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return (x + 1000) * (fastInfo.arrayWidth - 1) / 2000; 18622e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 18632e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 18642e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalaint Parameters::normalizedYToArray(int y) const { 18652e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala return (y + 1000) * (fastInfo.arrayHeight - 1) / 2000; 18662e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala} 18672e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala 18682e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; // namespace camera2 18692e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; // namespace android 1870