Camera2Client.cpp revision 611f61998863d3a3ffae4e5f2b723b7319c59ddf
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) { 106611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala String8 result; 107611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala result.appendFormat("Client2[%d] (%p) PID: %d:\n", 108611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala mCameraId, 109611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala getCameraClient()->asBinder().get(), 110611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala mClientPid); 111611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala write(fd, result.string(), result.size()); 112611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala return NO_ERROR; 11361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 11461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 11561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala// ICamera interface 11661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 11761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::disconnect() { 118f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 119f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (mDevice == 0) return; 120f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 121f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDevice->setStreamingRequest(NULL); 122f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 12361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala CameraService::Client::disconnect(); 12461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 12561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 12661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::connect(const sp<ICameraClient>& client) { 12761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 12861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 12961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 13061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::lock() { 13161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 13261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 13361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 13461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::unlock() { 13561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 13661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 13761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 13861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::setPreviewDisplay(const sp<Surface>& surface) { 13961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 14061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 14161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 14261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::setPreviewTexture(const sp<ISurfaceTexture>& surfaceTexture) { 14361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 14461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 14561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 14661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::setPreviewCallbackFlag(int flag) { 14761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 14861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 14961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 15061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startPreview() { 15161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 15261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 15361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 15461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopPreview() { 15561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 15661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 15761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 15861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::previewEnabled() { 15961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return false; 16061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 16161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 16261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::storeMetaDataInBuffers(bool enabled) { 16361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 16461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 16561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 16661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startRecording() { 16761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 16861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 16961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 17061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopRecording() { 17161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 17261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 17361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::recordingEnabled() { 17461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 17561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 17661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 17761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::releaseRecordingFrame(const sp<IMemory>& mem) { 17861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 17961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 18061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 18161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::autoFocus() { 18261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 18361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 18461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 18561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::cancelAutoFocus() { 18661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 18761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 18861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 18961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::takePicture(int msgType) { 19061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 19161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 19261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 19361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::setParameters(const String8& params) { 19461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 19561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 196f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 19761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaString8 Camera2Client::getParameters() const { 198f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return mParams->flatten(); 19961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 20061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 20161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) { 20261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 20361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 20461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 205f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala// private methods 206f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 207f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::buildDefaultParameters() { 208f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 209f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (mParams) { 210f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala delete mParams; 211f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 212f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams = new CameraParameters; 213f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 214f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableProcessedSizes; 215f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 216f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 217f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableProcessedSizes); 218f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 219f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableProcessedSizes.count < 2) { 220f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: " 221f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Malformed %s entry", 222f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 223f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala get_camera_metadata_tag_name( 224f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES)); 225f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 226f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 227f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 228f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick more intelligently 229f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int previewWidth = availableProcessedSizes.data.i32[0]; 230f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int previewHeight = availableProcessedSizes.data.i32[1]; 231f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 232f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setPreviewSize(previewWidth, previewHeight); 233f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setVideoSize(previewWidth, previewHeight); 234f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO, 235f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8::format("%dx%d",previewWidth,previewHeight)); 236f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 237f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewSizes; 238f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableProcessedSizes.count; i += 2) { 239f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewSizes += ","; 240f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes += String8::format("%dx%d", 241f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i], 242f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i+1]); 243f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 244f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, 245f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 246f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES, 247f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 248f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 249f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 250f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableFpsRanges; 251f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 252f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 253f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableFpsRanges); 254f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 255f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableFpsRanges.count < 2) { 256f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: " 257f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Malformed %s entry", 258f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 259f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala get_camera_metadata_tag_name( 260f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES)); 261f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 262f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 263f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 264f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int previewFpsRangeMin = availableFpsRanges.data.i32[0]; 265f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int previewFpsRangeMax = availableFpsRanges.data.i32[1]; 266f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 267f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_PREVIEW_FPS_RANGE, 268f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8::format("%d,%d", previewFpsRangeMin, previewFpsRangeMax)); 269f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 270f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 271f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFpsRange; 272f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 273f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFpsRange += ","; 274f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange += String8::format("(%d,%d)", 275f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i], 276f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i+1]); 277f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 278f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, 279f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange); 280f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 281f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 282f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_PREVIEW_FORMAT, 283f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "yuv420sp"); // NV21 284f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 285f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableFormats; 286f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 287f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_FORMATS, 288f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableFormats); 289f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 290f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFormats; 291f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 292f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFormats.count; i++) { 293f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedPreviewFormats += ","; 294f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 295f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableFormats.data.i32[i]) { 296f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: 297f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv422sp"; 298f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 299f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: 300f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv420sp"; 301f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 302f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: 303f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv422i-yuyv"; 304f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 305f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: 306f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv420p"; 307f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 308f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: 309f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "rgb565"; 310f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 311f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not advertizing JPEG, RAW_SENSOR, etc, for preview formats 312f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 313f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 314f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 315f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 316f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown preview format: %x", 317f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableFormats.data.i32[i]); 318f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 319f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 320f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 321f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 322f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS, 323f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats); 324f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 325f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 326f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // PREVIEW_FRAME_RATE / SUPPORTED_PREVIEW_FRAME_RATES are deprecated, but 327f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // still have to do something sane for them 328f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 329f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_PREVIEW_FRAME_RATE, 330f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala previewFpsRangeMin); 331f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 332f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 333f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFrameRates; 334f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 335f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFrameRates += ","; 336f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates += String8::format("%d", 337f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i]); 338f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 339f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES, 340f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates); 341f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 342f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 343f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableJpegSizes; 344f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 345f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 346f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableJpegSizes); 347f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 348f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableJpegSizes.count < 2) { 349f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: " 350f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Malformed %s entry", 351f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 352f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala get_camera_metadata_tag_name( 353f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_JPEG_SIZES)); 354f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 355f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 356f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 357f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick maximum 358f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int32_t pictureWidth = availableJpegSizes.data.i32[0]; 359f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int32_t pictureHeight = availableJpegSizes.data.i32[1]; 360f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 361f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setPictureSize(pictureWidth, pictureHeight); 362f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 363f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 364f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPictureSizes; 365f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegSizes.count; i += 2) { 366f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPictureSizes += ","; 367f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes += String8::format("%dx%d", 368f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i], 369f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i+1]); 370f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 371f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, 372f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes); 373f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 374f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 375f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setPictureFormat("jpeg"); 376f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 377f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS, 378f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "jpeg"); 379f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 380f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableJpegThumbnailSizes; 381f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 382f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, 383f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableJpegThumbnailSizes); 384f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 385f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableJpegThumbnailSizes.count < 2) { 386f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: " 387f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Malformed %s entry", 388f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 389f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala get_camera_metadata_tag_name( 390f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES)); 391f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 392f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 393f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 394f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick default thumbnail size sensibly 395f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int32_t jpegThumbWidth = availableJpegThumbnailSizes.data.i32[0]; 396f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int32_t jpegThumbHeight = availableJpegThumbnailSizes.data.i32[1]; 397f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 398f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, 399f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala jpegThumbWidth); 400f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, 401f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala jpegThumbHeight); 402f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 403f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 404f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedJpegThumbSizes; 405f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegThumbnailSizes.count; i += 2) { 406f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedJpegThumbSizes += ","; 407f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes += String8::format("%dx%d", 408f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i], 409f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i+1]); 410f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 411f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, 412f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes); 413f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 414f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 415f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, 416f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "90"); 417f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_JPEG_QUALITY, 418f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "90"); 419f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ROTATION, 420f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "0"); 421f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not settting GPS fields 422f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 423f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_WHITE_BALANCE, 424f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "auto"); 425f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 426f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableWhiteBalanceModes; 427f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 428f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AWB_AVAILABLE_MODES, 429f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableWhiteBalanceModes); 430f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 431f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedWhiteBalance; 432f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 433f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableWhiteBalanceModes.count; i++) { 434f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedWhiteBalance += ","; 435f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 436f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableWhiteBalanceModes.data.u8[i]) { 437f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_AUTO: 438f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "auto"; 439f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 440f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_INCANDESCENT: 441f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "incandescent"; 442f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 443f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_FLUORESCENT: 444f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "fluorescent"; 445f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 446f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_WARM_FLUORESCENT: 447f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "warm-fluorescent"; 448f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 449f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_DAYLIGHT: 450f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "daylight"; 451f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 452f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT: 453f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "cloudy-daylight"; 454f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 455f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_TWILIGHT: 456f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "twilight"; 457f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 458f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_SHADE: 459f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "shade"; 460f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 461f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Skipping values not mappable to v1 API 462f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_OFF: 463f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 464f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 465f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 466f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown white balance value: %d", 467f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 468f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableWhiteBalanceModes.data.u8[i]); 469f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 470f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 471f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 472f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 473f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE, 474f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance); 475f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 476f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 477f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_EFFECT, "none"); 478f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableEffects; 479f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 480f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AVAILABLE_EFFECTS, 481f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableEffects); 482f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 483f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 484f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedEffects; 485f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 486f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableEffects.count; i++) { 487f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedEffects += ","; 488f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 489f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableEffects.data.u8[i]) { 490f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_OFF: 491f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "none"; 492f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 493f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_MONO: 494f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "mono"; 495f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_NEGATIVE: 496f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "negative"; 497f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 498f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SOLARIZE: 499f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "solarize"; 500f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 501f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SEPIA: 502f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "sepia"; 503f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 504f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_POSTERIZE: 505f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "posterize"; 506f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 507f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_WHITEBOARD: 508f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "whiteboard"; 509f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 510f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_BLACKBOARD: 511f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "blackboard"; 512f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 513f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_AQUA: 514f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "aqua"; 515f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 516f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 517f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown effect value: %d", 518f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableEffects.data.u8[i]); 519f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 520f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 521f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 522f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 523f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_EFFECTS, supportedEffects); 524f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 525f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 526f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ANTIBANDING, "auto"); 527f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableAntibandingModes; 528f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 529f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, 530f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableAntibandingModes); 531f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 532f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 533f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedAntibanding; 534f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 535f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAntibandingModes.count; i++) { 536f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedAntibanding += ","; 537f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 538f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAntibandingModes.data.u8[i]) { 539f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_OFF: 540f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "off"; 541f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 542f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_50HZ: 543f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "50hz"; 544f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 545f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_60HZ: 546f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "60hz"; 547f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 548f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_AUTO: 549f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "auto"; 550f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 551f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 552f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown antibanding value: %d", 553f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 554f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableAntibandingModes.data.u8[i]); 555f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 556f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 557f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 558f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 559f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_ANTIBANDING, 560f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding); 561f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 562f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 563f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SCENE_MODE, "auto"); 564f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableSceneModes; 565f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 566f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AVAILABLE_SCENE_MODES, 567f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableSceneModes); 568f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 569f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 570f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedSceneModes("auto"); 571f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 572f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool noSceneModes = false; 573f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableSceneModes.count; i++) { 574f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedSceneModes += ","; 575f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 576f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableSceneModes.data.u8[i]) { 577f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED: 578f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala noSceneModes = true; 579f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 580f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY: 581f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not in old API 582f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 583f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 584f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_ACTION: 585f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "action"; 586f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 587f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PORTRAIT: 588f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "portrait"; 589f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 590f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_LANDSCAPE: 591f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "landscape"; 592f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 593f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT: 594f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "night"; 595f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 596f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT: 597f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "night-portrait"; 598f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 599f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_THEATRE: 600f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "theatre"; 601f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 602f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BEACH: 603f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "beach"; 604f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 605f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SNOW: 606f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "snow"; 607f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 608f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SUNSET: 609f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "sunset"; 610f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 611f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO: 612f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "steadyphoto"; 613f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 614f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FIREWORKS: 615f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "fireworks"; 616f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 617f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SPORTS: 618f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "sports"; 619f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 620f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PARTY: 621f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "party"; 622f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 623f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT: 624f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "candlelight"; 625f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 626f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BARCODE: 627f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "barcode"; 628f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 629f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 630f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown scene mode value: %d", 631f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableSceneModes.data.u8[i]); 632f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 633f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 634f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 635f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 636f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (!noSceneModes) { 637f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_SCENE_MODES, 638f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes); 639f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 640f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 641f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 642f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t flashAvailable; 643f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 644f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_FLASH_AVAILABLE, &flashAvailable); 645f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 646f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 647f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableAeModes; 648f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 649f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_AVAILABLE_MODES, 650f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableAeModes); 651f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 652f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 653f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (flashAvailable.data.u8[0]) { 654f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FLASH_MODE, "auto"); 655f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedFlashModes("off,auto,on,torch"); 656f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAeModes.count; i++) { 657f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableAeModes.data.u8[i] == 658f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_ON_AUTO_FLASH_REDEYE) { 659f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFlashModes += ",red-eye"; 660f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 661f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 662f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 663f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 664f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFlashModes); 665f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 666f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 667f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t minFocusDistance; 668f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 669f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_LENS_MINIMUM_FOCUS_DISTANCE, 670f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &minFocusDistance); 671f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 672f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableAfModes; 673f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 674f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AF_AVAILABLE_MODES, 675f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableAfModes); 676f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 677f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (minFocusDistance.data.f[0] == 0) { 678f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Fixed-focus lens 679f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FOCUS_MODE, "fixed"); 680f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, "fixed"); 681f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 682f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FOCUS_MODE, "auto"); 683f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedFocusModes("fixed,infinity"); 684f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 685f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAfModes.count; i++) { 686f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedFocusModes += ","; 687f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 688f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAfModes.data.u8[i]) { 689f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_AUTO: 690f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "auto"; 691f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 692f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_MACRO: 693f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "macro"; 694f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 695f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_VIDEO: 696f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "continuous-video"; 697f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 698f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_PICTURE: 699f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "continuous-picture"; 700f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 701f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_EDOF: 702f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "edof"; 703f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 704f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not supported in v1 API 705f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_OFF: 706f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 707f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 708f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 709f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown AF mode value: %d", 710f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableAfModes.data.u8[i]); 711f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 712f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 713f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 714f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 715f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 716f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes); 717f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 718f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 719f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t max3aRegions; 720f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 721f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_MAX_REGIONS, &max3aRegions); 722f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 723f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 724f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS, 725f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 726f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FOCUS_AREAS, 727f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 728f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 729f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableFocalLengths; 730f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 731f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_LENS_AVAILABLE_FOCAL_LENGTHS, 732f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableFocalLengths); 733f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 734f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float minFocalLength = availableFocalLengths.data.f[0]; 735f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setFloat(CameraParameters::KEY_FOCAL_LENGTH, minFocalLength); 736f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 737f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t sensorSize; 738f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 739f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SENSOR_PHYSICAL_SIZE, 740f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &sensorSize); 741f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 742f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 743f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // The fields of view here assume infinity focus, maximum wide angle 744f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float horizFov = 180 / M_PI * 745f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[0] / (2 * minFocalLength)); 746f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float vertFov = 180 / M_PI * 747f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[1] / (2 * minFocalLength)); 748f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setFloat(CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE, horizFov); 749f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setFloat(CameraParameters::KEY_VERTICAL_VIEW_ANGLE, vertFov); 750f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 751f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_EXPOSURE_COMPENSATION, 0); 752f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 753f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t exposureCompensationRange; 754f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 755f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE, 756f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &exposureCompensationRange); 757f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 758f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION, 759f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[1]); 760f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION, 761f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[0]); 762f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 763f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t exposureCompensationStep; 764f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 765f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_EXP_COMPENSATION_STEP, 766f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &exposureCompensationStep); 767f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 768f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setFloat(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP, 769f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].numerator / 770f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].denominator); 771f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 772f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, "false"); 773f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED, "true"); 774f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 775f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, "false"); 776f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED, "true"); 777f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 778f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_NUM_METERING_AREAS, 779f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 780f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_METERING_AREAS, 781f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 782f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 783f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ZOOM, 0); 784f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_ZOOM, kNumZoomSteps - 1); 785f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 786f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t maxDigitalZoom; 787f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 788f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_MAX_ZOOM, &maxDigitalZoom); 789f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 790f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 791f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 792f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 zoomRatios; 793f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoom = 1.f; 794f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoomIncrement = (maxDigitalZoom.data.f[0] - zoom) / 795f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala (kNumZoomSteps-1); 796f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 797f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < kNumZoomSteps; i++) { 798f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) zoomRatios += ","; 799f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 800f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoomRatios += String8::format("%d", static_cast<int>(zoom * 100)); 801f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoom += zoomIncrement; 802f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 803f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ZOOM_RATIOS, zoomRatios); 804f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 805f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 806f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ZOOM_SUPPORTED, "true"); 807f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED, "true"); 808f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 809f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FOCUS_DISTANCES, 810f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Infinity,Infinity,Infinity"); 811f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 812f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t maxFacesDetected; 813f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 814f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_STATS_MAX_FACE_COUNT, 815f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &maxFacesDetected); 816f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW, 817f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala maxFacesDetected.data.i32[0]); 818f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW, 819f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 0); 820f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 821f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_FRAME_FORMAT, 822f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "yuv420sp"); 823f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 824f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_RECORDING_HINT, 825f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "false"); 826f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 827f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED, 828f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "true"); 829f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 830f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_STABILIZATION, 831f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "false"); 832f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 833f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableVideoStabilizationModes; 834f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 835f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES, 836f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableVideoStabilizationModes); 837f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 838f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableVideoStabilizationModes.count > 1) { 839f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 840f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "true"); 841f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 842f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 843f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "false"); 844f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 845f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 846f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 847f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 84861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 84961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} // namespace android 850