Camera2Client.cpp revision f69c70ded4316ea3ee504ac779bd024433ed4ef7
161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala/* 261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * you may not use this file except in compliance with the License. 661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * You may obtain a copy of the License at 761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * 1061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 1161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 1261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * See the License for the specific language governing permissions and 1461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala * limitations under the License. 1561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala */ 1661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 1761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#define LOG_TAG "Camera2Client" 1861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala//#define LOG_NDEBUG 0 19f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala#include <utils/Log.h> 2061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 2161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include <cutils/properties.h> 2261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include <gui/SurfaceTextureClient.h> 2361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include <gui/Surface.h> 2461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 25f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala#include <math.h> 26f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include "Camera2Client.h" 2861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 2961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalanamespace android { 3061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#define ALOG1(...) ALOGD_IF(gLogLevel >= 1, __VA_ARGS__); 3261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#define ALOG2(...) ALOGD_IF(gLogLevel >= 2, __VA_ARGS__); 3361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 34f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala#define ALOG1_ENTRY \ 3561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int callingPid = getCallingPid(); \ 3661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala ALOG1("%s: E (pid %d, id %d) ", __FUNCTION__, \ 37f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala callingPid, mCameraId) 38f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 39f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala#define ALOG1_EXIT \ 40f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOG1("%s: X (pid %d, id %d) ", __FUNCTION__, \ 41f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala callingPid, mCameraId) 4261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 4361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatic int getCallingPid() { 4461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return IPCThreadState::self()->getCallingPid(); 4561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 4661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 4761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatic int getCallingUid() { 4861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return IPCThreadState::self()->getCallingUid(); 4961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 5061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 5161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala// Interface used by CameraService 5261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 5361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaCamera2Client::Camera2Client(const sp<CameraService>& cameraService, 5461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala const sp<ICameraClient>& cameraClient, 5561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int cameraId, 5661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int cameraFacing, 5761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int clientPid): 5861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala Client(cameraService, cameraClient, 59f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala cameraId, cameraFacing, clientPid), 60f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams(NULL) 61f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 6261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala ALOG1_ENTRY; 6361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 64f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDevice = new Camera2Device(cameraId); 65f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 66f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOG1_EXIT; 67f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 68f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 69f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::initialize(camera_module_t *module) 70f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 71f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOG1_ENTRY; 72f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 73f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 74f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = mDevice->initialize(module); 75f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) { 76f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: unable to initialize device: %s (%d)", 77f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 78f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 79f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 80f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 81f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = buildDefaultParameters(); 82f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) { 83f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: unable to build defaults: %s (%d)", 84f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 85f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 86f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 87f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (gLogLevel >= 1) { 88f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGD("%s: Default parameters converted from camera %d:", __FUNCTION__, 89f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mCameraId); 90f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->dump(); 91f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 92f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 93f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOG1_EXIT; 94f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 9561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 9661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 9761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaCamera2Client::~Camera2Client() { 98f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDestructionStarted = true; 99f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 100f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (mParams) delete mParams; 101f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 102f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala disconnect(); 10361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 10461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 10561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::dump(int fd, const Vector<String16>& args) { 10661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 10761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 10861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 10961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala// ICamera interface 11061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 11161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::disconnect() { 112f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 113f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (mDevice == 0) return; 114f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 115f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDevice->setStreamingRequest(NULL); 116f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 11761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala CameraService::Client::disconnect(); 11861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 11961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 12061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::connect(const sp<ICameraClient>& client) { 12161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 12261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 12361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 12461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::lock() { 12561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 12661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 12761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 12861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::unlock() { 12961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 13061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 13161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 13261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::setPreviewDisplay(const sp<Surface>& surface) { 13361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 13461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 13561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 13661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::setPreviewTexture(const sp<ISurfaceTexture>& surfaceTexture) { 13761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 13861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 13961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 14061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::setPreviewCallbackFlag(int flag) { 14161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 14261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 14361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 14461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startPreview() { 14561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 14661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 14761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 14861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopPreview() { 14961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 15061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 15161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 15261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::previewEnabled() { 15361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return false; 15461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 15561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 15661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::storeMetaDataInBuffers(bool enabled) { 15761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 15861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 15961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 16061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startRecording() { 16161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 16261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 16361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 16461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopRecording() { 16561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 16661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 16761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::recordingEnabled() { 16861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 16961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 17061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 17161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::releaseRecordingFrame(const sp<IMemory>& mem) { 17261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 17361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 17461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 17561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::autoFocus() { 17661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 17761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 17861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 17961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::cancelAutoFocus() { 18061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 18161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 18261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 18361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::takePicture(int msgType) { 18461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 18561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 18661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 18761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::setParameters(const String8& params) { 18861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 18961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 190f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaString8 Camera2Client::getParameters() const { 192f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return mParams->flatten(); 19361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 19461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 19561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) { 19661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 19761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 19861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 199f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala// private methods 200f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 201f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::buildDefaultParameters() { 202f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 203f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (mParams) { 204f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala delete mParams; 205f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 206f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams = new CameraParameters; 207f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 208f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableProcessedSizes; 209f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 210f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 211f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableProcessedSizes); 212f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 213f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableProcessedSizes.count < 2) { 214f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: " 215f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Malformed %s entry", 216f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 217f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala get_camera_metadata_tag_name( 218f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES)); 219f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 220f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 221f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 222f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick more intelligently 223f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int previewWidth = availableProcessedSizes.data.i32[0]; 224f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int previewHeight = availableProcessedSizes.data.i32[1]; 225f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 226f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setPreviewSize(previewWidth, previewHeight); 227f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setVideoSize(previewWidth, previewHeight); 228f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO, 229f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8::format("%dx%d",previewWidth,previewHeight)); 230f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 231f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewSizes; 232f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableProcessedSizes.count; i += 2) { 233f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewSizes += ","; 234f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes += String8::format("%dx%d", 235f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i], 236f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i+1]); 237f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 238f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, 239f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 240f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES, 241f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 242f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 243f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 244f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableFpsRanges; 245f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 246f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 247f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableFpsRanges); 248f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 249f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableFpsRanges.count < 2) { 250f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: " 251f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Malformed %s entry", 252f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 253f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala get_camera_metadata_tag_name( 254f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES)); 255f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 256f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 257f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 258f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int previewFpsRangeMin = availableFpsRanges.data.i32[0]; 259f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int previewFpsRangeMax = availableFpsRanges.data.i32[1]; 260f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 261f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_PREVIEW_FPS_RANGE, 262f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8::format("%d,%d", previewFpsRangeMin, previewFpsRangeMax)); 263f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 264f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 265f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFpsRange; 266f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 267f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFpsRange += ","; 268f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange += String8::format("(%d,%d)", 269f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i], 270f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i+1]); 271f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 272f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, 273f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange); 274f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 275f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 276f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_PREVIEW_FORMAT, 277f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "yuv420sp"); // NV21 278f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 279f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableFormats; 280f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 281f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_FORMATS, 282f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableFormats); 283f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 284f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFormats; 285f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 286f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFormats.count; i++) { 287f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedPreviewFormats += ","; 288f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 289f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableFormats.data.i32[i]) { 290f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: 291f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv422sp"; 292f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 293f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: 294f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv420sp"; 295f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 296f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: 297f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv422i-yuyv"; 298f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 299f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: 300f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv420p"; 301f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 302f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: 303f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "rgb565"; 304f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 305f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not advertizing JPEG, RAW_SENSOR, etc, for preview formats 306f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 307f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 308f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 309f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 310f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown preview format: %x", 311f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableFormats.data.i32[i]); 312f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 313f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 314f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 315f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 316f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS, 317f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats); 318f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 319f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 320f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // PREVIEW_FRAME_RATE / SUPPORTED_PREVIEW_FRAME_RATES are deprecated, but 321f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // still have to do something sane for them 322f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 323f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_PREVIEW_FRAME_RATE, 324f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala previewFpsRangeMin); 325f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 326f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 327f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFrameRates; 328f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 329f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFrameRates += ","; 330f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates += String8::format("%d", 331f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i]); 332f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 333f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES, 334f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates); 335f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 336f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 337f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableJpegSizes; 338f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 339f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 340f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableJpegSizes); 341f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 342f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableJpegSizes.count < 2) { 343f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: " 344f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Malformed %s entry", 345f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 346f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala get_camera_metadata_tag_name( 347f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_JPEG_SIZES)); 348f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 349f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 350f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 351f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick maximum 352f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int32_t pictureWidth = availableJpegSizes.data.i32[0]; 353f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int32_t pictureHeight = availableJpegSizes.data.i32[1]; 354f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 355f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setPictureSize(pictureWidth, pictureHeight); 356f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 357f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 358f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPictureSizes; 359f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegSizes.count; i += 2) { 360f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPictureSizes += ","; 361f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes += String8::format("%dx%d", 362f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i], 363f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i+1]); 364f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 365f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, 366f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes); 367f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 368f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 369f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setPictureFormat("jpeg"); 370f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 371f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS, 372f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "jpeg"); 373f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 374f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableJpegThumbnailSizes; 375f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 376f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, 377f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableJpegThumbnailSizes); 378f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 379f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableJpegThumbnailSizes.count < 2) { 380f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: " 381f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Malformed %s entry", 382f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 383f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala get_camera_metadata_tag_name( 384f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES)); 385f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 386f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 387f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 388f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick default thumbnail size sensibly 389f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int32_t jpegThumbWidth = availableJpegThumbnailSizes.data.i32[0]; 390f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int32_t jpegThumbHeight = availableJpegThumbnailSizes.data.i32[1]; 391f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 392f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, 393f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala jpegThumbWidth); 394f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, 395f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala jpegThumbHeight); 396f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 397f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 398f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedJpegThumbSizes; 399f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegThumbnailSizes.count; i += 2) { 400f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedJpegThumbSizes += ","; 401f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes += String8::format("%dx%d", 402f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i], 403f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i+1]); 404f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 405f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, 406f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes); 407f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 408f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 409f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, 410f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "90"); 411f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_JPEG_QUALITY, 412f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "90"); 413f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ROTATION, 414f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "0"); 415f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not settting GPS fields 416f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 417f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_WHITE_BALANCE, 418f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "auto"); 419f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 420f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableWhiteBalanceModes; 421f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 422f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AWB_AVAILABLE_MODES, 423f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableWhiteBalanceModes); 424f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 425f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedWhiteBalance; 426f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 427f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableWhiteBalanceModes.count; i++) { 428f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedWhiteBalance += ","; 429f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 430f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableWhiteBalanceModes.data.u8[i]) { 431f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_AUTO: 432f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "auto"; 433f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 434f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_INCANDESCENT: 435f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "incandescent"; 436f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 437f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_FLUORESCENT: 438f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "fluorescent"; 439f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 440f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_WARM_FLUORESCENT: 441f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "warm-fluorescent"; 442f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 443f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_DAYLIGHT: 444f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "daylight"; 445f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 446f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT: 447f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "cloudy-daylight"; 448f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 449f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_TWILIGHT: 450f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "twilight"; 451f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 452f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_SHADE: 453f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "shade"; 454f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 455f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Skipping values not mappable to v1 API 456f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_OFF: 457f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 458f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 459f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 460f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown white balance value: %d", 461f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 462f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableWhiteBalanceModes.data.u8[i]); 463f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 464f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 465f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 466f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 467f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE, 468f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance); 469f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 470f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 471f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_EFFECT, "none"); 472f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableEffects; 473f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 474f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AVAILABLE_EFFECTS, 475f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableEffects); 476f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 477f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 478f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedEffects; 479f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 480f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableEffects.count; i++) { 481f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedEffects += ","; 482f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 483f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableEffects.data.u8[i]) { 484f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_OFF: 485f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "none"; 486f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 487f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_MONO: 488f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "mono"; 489f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_NEGATIVE: 490f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "negative"; 491f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 492f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SOLARIZE: 493f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "solarize"; 494f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 495f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SEPIA: 496f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "sepia"; 497f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 498f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_POSTERIZE: 499f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "posterize"; 500f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 501f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_WHITEBOARD: 502f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "whiteboard"; 503f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 504f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_BLACKBOARD: 505f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "blackboard"; 506f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 507f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_AQUA: 508f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "aqua"; 509f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 510f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 511f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown effect value: %d", 512f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableEffects.data.u8[i]); 513f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 514f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 515f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 516f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 517f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_EFFECTS, supportedEffects); 518f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 519f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 520f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ANTIBANDING, "auto"); 521f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableAntibandingModes; 522f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 523f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, 524f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableAntibandingModes); 525f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 526f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 527f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedAntibanding; 528f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 529f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAntibandingModes.count; i++) { 530f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedAntibanding += ","; 531f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 532f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAntibandingModes.data.u8[i]) { 533f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_OFF: 534f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "off"; 535f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 536f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_50HZ: 537f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "50hz"; 538f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 539f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_60HZ: 540f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "60hz"; 541f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 542f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_AUTO: 543f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "auto"; 544f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 545f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 546f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown antibanding value: %d", 547f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 548f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableAntibandingModes.data.u8[i]); 549f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 550f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 551f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 552f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 553f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_ANTIBANDING, 554f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding); 555f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 556f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 557f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SCENE_MODE, "auto"); 558f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableSceneModes; 559f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 560f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AVAILABLE_SCENE_MODES, 561f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableSceneModes); 562f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 563f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 564f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedSceneModes("auto"); 565f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 566f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool noSceneModes = false; 567f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableSceneModes.count; i++) { 568f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedSceneModes += ","; 569f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 570f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableSceneModes.data.u8[i]) { 571f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED: 572f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala noSceneModes = true; 573f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 574f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY: 575f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not in old API 576f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 577f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 578f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_ACTION: 579f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "action"; 580f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 581f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PORTRAIT: 582f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "portrait"; 583f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 584f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_LANDSCAPE: 585f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "landscape"; 586f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 587f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT: 588f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "night"; 589f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 590f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT: 591f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "night-portrait"; 592f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 593f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_THEATRE: 594f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "theatre"; 595f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 596f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BEACH: 597f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "beach"; 598f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 599f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SNOW: 600f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "snow"; 601f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 602f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SUNSET: 603f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "sunset"; 604f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 605f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO: 606f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "steadyphoto"; 607f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 608f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FIREWORKS: 609f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "fireworks"; 610f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 611f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SPORTS: 612f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "sports"; 613f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 614f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PARTY: 615f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "party"; 616f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 617f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT: 618f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "candlelight"; 619f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 620f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BARCODE: 621f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "barcode"; 622f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 623f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 624f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown scene mode value: %d", 625f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableSceneModes.data.u8[i]); 626f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 627f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 628f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 629f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 630f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (!noSceneModes) { 631f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_SCENE_MODES, 632f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes); 633f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 634f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 635f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 636f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t flashAvailable; 637f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 638f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_FLASH_AVAILABLE, &flashAvailable); 639f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 640f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 641f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableAeModes; 642f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 643f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_AVAILABLE_MODES, 644f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableAeModes); 645f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 646f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 647f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (flashAvailable.data.u8[0]) { 648f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FLASH_MODE, "auto"); 649f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedFlashModes("off,auto,on,torch"); 650f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAeModes.count; i++) { 651f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableAeModes.data.u8[i] == 652f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_ON_AUTO_FLASH_REDEYE) { 653f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFlashModes += ",red-eye"; 654f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 655f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 656f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 657f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 658f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFlashModes); 659f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 660f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 661f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t minFocusDistance; 662f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 663f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_LENS_MINIMUM_FOCUS_DISTANCE, 664f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &minFocusDistance); 665f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 666f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableAfModes; 667f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 668f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AF_AVAILABLE_MODES, 669f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableAfModes); 670f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 671f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (minFocusDistance.data.f[0] == 0) { 672f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Fixed-focus lens 673f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FOCUS_MODE, "fixed"); 674f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, "fixed"); 675f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 676f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FOCUS_MODE, "auto"); 677f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedFocusModes("fixed,infinity"); 678f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 679f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAfModes.count; i++) { 680f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedFocusModes += ","; 681f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 682f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAfModes.data.u8[i]) { 683f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_AUTO: 684f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "auto"; 685f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 686f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_MACRO: 687f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "macro"; 688f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 689f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_VIDEO: 690f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "continuous-video"; 691f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 692f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_PICTURE: 693f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "continuous-picture"; 694f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 695f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_EDOF: 696f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "edof"; 697f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 698f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not supported in v1 API 699f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_OFF: 700f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 701f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 702f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 703f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown AF mode value: %d", 704f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableAfModes.data.u8[i]); 705f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 706f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 707f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 708f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 709f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 710f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes); 711f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 712f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 713f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t max3aRegions; 714f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 715f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_MAX_REGIONS, &max3aRegions); 716f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 717f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 718f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS, 719f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 720f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FOCUS_AREAS, 721f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 722f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 723f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableFocalLengths; 724f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 725f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_LENS_AVAILABLE_FOCAL_LENGTHS, 726f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableFocalLengths); 727f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 728f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float minFocalLength = availableFocalLengths.data.f[0]; 729f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setFloat(CameraParameters::KEY_FOCAL_LENGTH, minFocalLength); 730f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 731f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t sensorSize; 732f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 733f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SENSOR_PHYSICAL_SIZE, 734f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &sensorSize); 735f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 736f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 737f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // The fields of view here assume infinity focus, maximum wide angle 738f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float horizFov = 180 / M_PI * 739f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[0] / (2 * minFocalLength)); 740f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float vertFov = 180 / M_PI * 741f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[1] / (2 * minFocalLength)); 742f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setFloat(CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE, horizFov); 743f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setFloat(CameraParameters::KEY_VERTICAL_VIEW_ANGLE, vertFov); 744f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 745f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_EXPOSURE_COMPENSATION, 0); 746f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 747f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t exposureCompensationRange; 748f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 749f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE, 750f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &exposureCompensationRange); 751f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 752f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION, 753f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[1]); 754f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION, 755f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[0]); 756f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 757f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t exposureCompensationStep; 758f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 759f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_EXP_COMPENSATION_STEP, 760f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &exposureCompensationStep); 761f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 762f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setFloat(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP, 763f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].numerator / 764f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].denominator); 765f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 766f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, "false"); 767f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED, "true"); 768f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 769f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, "false"); 770f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED, "true"); 771f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 772f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_NUM_METERING_AREAS, 773f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 774f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_METERING_AREAS, 775f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 776f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 777f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ZOOM, 0); 778f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_ZOOM, kNumZoomSteps - 1); 779f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 780f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t maxDigitalZoom; 781f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 782f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_MAX_ZOOM, &maxDigitalZoom); 783f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 784f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 785f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 786f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 zoomRatios; 787f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoom = 1.f; 788f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoomIncrement = (maxDigitalZoom.data.f[0] - zoom) / 789f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala (kNumZoomSteps-1); 790f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 791f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < kNumZoomSteps; i++) { 792f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) zoomRatios += ","; 793f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 794f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoomRatios += String8::format("%d", static_cast<int>(zoom * 100)); 795f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoom += zoomIncrement; 796f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 797f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ZOOM_RATIOS, zoomRatios); 798f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 799f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 800f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ZOOM_SUPPORTED, "true"); 801f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED, "true"); 802f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 803f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FOCUS_DISTANCES, 804f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Infinity,Infinity,Infinity"); 805f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 806f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t maxFacesDetected; 807f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 808f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_STATS_MAX_FACE_COUNT, 809f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &maxFacesDetected); 810f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW, 811f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala maxFacesDetected.data.i32[0]); 812f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW, 813f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 0); 814f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 815f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_FRAME_FORMAT, 816f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "yuv420sp"); 817f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 818f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_RECORDING_HINT, 819f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "false"); 820f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 821f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED, 822f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "true"); 823f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 824f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_STABILIZATION, 825f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "false"); 826f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 827f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableVideoStabilizationModes; 828f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 829f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES, 830f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableVideoStabilizationModes); 831f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 832f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableVideoStabilizationModes.count > 1) { 833f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 834f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "true"); 835f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 836f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 837f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "false"); 838f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 839f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 840f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 841f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 84261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 84361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} // namespace android 844