Camera2Client.cpp revision 6db981c45a964f0d9df4c3451f064dff7954d78e
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), 606db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState(NOT_INITIALIZED), 616db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mParams(NULL), 626db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mPreviewStreamId(NO_PREVIEW_STREAM), 636db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mPreviewRequest(NULL) 64f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 6561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala ALOG1_ENTRY; 6661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 67f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDevice = new Camera2Device(cameraId); 68f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 69f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOG1_EXIT; 70f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 71f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 72f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::initialize(camera_module_t *module) 73f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 74f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOG1_ENTRY; 75f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 76f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 77f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = mDevice->initialize(module); 78f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) { 79f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: unable to initialize device: %s (%d)", 80f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 81f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 82f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 83f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 84f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = buildDefaultParameters(); 85f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) { 86f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: unable to build defaults: %s (%d)", 87f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 88f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 89f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 90f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (gLogLevel >= 1) { 91f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGD("%s: Default parameters converted from camera %d:", __FUNCTION__, 92f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mCameraId); 93f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->dump(); 94f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 95f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 966db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 976db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 98f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOG1_EXIT; 99f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 10061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 10161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 10261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaCamera2Client::~Camera2Client() { 103f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDestructionStarted = true; 104f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 105f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (mParams) delete mParams; 106f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 107f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala disconnect(); 10861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 10961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 11061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::dump(int fd, const Vector<String16>& args) { 111611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala String8 result; 112611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala result.appendFormat("Client2[%d] (%p) PID: %d:\n", 113611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala mCameraId, 114611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala getCameraClient()->asBinder().get(), 115611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala mClientPid); 116611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala write(fd, result.string(), result.size()); 117611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala return NO_ERROR; 11861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 11961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 12061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala// ICamera interface 12161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 12261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::disconnect() { 123f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 124f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (mDevice == 0) return; 125f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1266db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala stopPreview(); 1276db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1286db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewStreamId != NO_PREVIEW_STREAM) { 1296db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mDevice->deleteStream(mPreviewStreamId); 1306db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mPreviewStreamId = NO_PREVIEW_STREAM; 1316db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 132f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 13361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala CameraService::Client::disconnect(); 13461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 13561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 13661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::connect(const sp<ICameraClient>& client) { 13761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 13861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 13961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 14061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::lock() { 14161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 14261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 14361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 14461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::unlock() { 14561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 14661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 14761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 1486db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewDisplay( 1496db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<Surface>& surface) { 1506db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOG1_ENTRY; 1516db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState == PREVIEW) return INVALID_OPERATION; 1526db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1536db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<IBinder> binder; 1546db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<ANativeWindow> window; 1556db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (surface != 0) { 1566db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala binder = surface->asBinder(); 1576db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala window = surface; 1586db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 1596db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1606db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return setPreviewWindow(binder,window); 16161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 16261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 1636db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewTexture( 1646db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<ISurfaceTexture>& surfaceTexture) { 1656db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOG1_ENTRY; 1666db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState == PREVIEW) return INVALID_OPERATION; 1676db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1686db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<IBinder> binder; 1696db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<ANativeWindow> window; 1706db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (surfaceTexture != 0) { 1716db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala binder = surfaceTexture->asBinder(); 1726db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala window = new SurfaceTextureClient(surfaceTexture); 1736db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 1746db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return setPreviewWindow(binder, window); 1756db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala} 1766db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1776db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewWindow(const sp<IBinder>& binder, 1786db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<ANativeWindow>& window) { 1796db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOG1_ENTRY; 1806db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 1816db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1826db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (binder == mPreviewSurface) { 1836db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return NO_ERROR; 1846db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 1856db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1866db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewStreamId != NO_PREVIEW_STREAM) { 1876db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->deleteStream(mPreviewStreamId); 1886db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 1896db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 1906db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 1916db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 1926db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1936db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala int previewWidth, previewHeight; 1946db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mParams->getPreviewSize(&previewWidth, &previewHeight); 1956db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1966db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->createStream(window, 1976db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala previewWidth, previewHeight, CAMERA2_HAL_PIXEL_FORMAT_OPAQUE, 1986db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &mPreviewStreamId); 1996db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 2006db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 2016db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2026db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2036db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState == WAITING_FOR_PREVIEW_WINDOW) { 2046db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return startPreview(); 2056db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2066db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2076db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOG1_EXIT; 2086db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 20961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 21061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 21161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::setPreviewCallbackFlag(int flag) { 21261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 21361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 21461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 21561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startPreview() { 2166db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOG1_ENTRY; 2176db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 2186db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState == PREVIEW) return INVALID_OPERATION; 2196db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2206db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewStreamId == NO_PREVIEW_STREAM) { 2216db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = WAITING_FOR_PREVIEW_WINDOW; 2226db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 2236db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2246db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2256db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewRequest == NULL) { 2266db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala updatePreviewRequest(); 2276db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2286db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2296db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala uint8_t outputStream = mPreviewStreamId; 2306db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2316db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala camera_metadata_entry_t outputStreams; 2326db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = find_camera_metadata_entry(mPreviewRequest, 2336db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ANDROID_REQUEST_OUTPUT_STREAMS, 2346db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &outputStreams); 2356db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res == NAME_NOT_FOUND) { 2366db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = add_camera_metadata_entry(mPreviewRequest, 2376db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ANDROID_REQUEST_OUTPUT_STREAMS, 2386db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &outputStream, 1); 2396db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } else if (res == OK) { 2406db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = update_camera_metadata_entry(mPreviewRequest, 2416db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala outputStreams.index, &outputStream, 1, NULL); 2426db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2436db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2446db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 2456db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOGE("%s: Camera %d: Unable to set up preview request: %s (%d)", 2466db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 2476db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 2486db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 2496db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2506db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2516db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->setStreamingRequest(mPreviewRequest); 2526db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 2536db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOGE("%s: Camera %d: Unable to set preview request to start preview: %s (%d)", 2546db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 2556db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 2566db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 2576db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2586db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = PREVIEW; 2596db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2606db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 26161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 26261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 26361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopPreview() { 2646db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOG1_ENTRY; 2656db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState != PREVIEW) return; 26661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 2676db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mDevice->setStreamingRequest(NULL); 2686db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 26961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 27061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 27161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::previewEnabled() { 2726db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return mState == PREVIEW; 27361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 27461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 27561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::storeMetaDataInBuffers(bool enabled) { 27661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 27761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 27861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 27961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startRecording() { 28061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 28161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 28261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 28361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopRecording() { 28461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 28561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 28661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::recordingEnabled() { 28761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 28861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 28961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 29061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::releaseRecordingFrame(const sp<IMemory>& mem) { 29161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 29261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 29361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 29461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::autoFocus() { 2956db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 29661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 29761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 29861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::cancelAutoFocus() { 2996db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 30061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 30161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 30261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::takePicture(int msgType) { 30361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 30461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 30561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 30661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::setParameters(const String8& params) { 3076db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 30861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 309f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 31061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaString8 Camera2Client::getParameters() const { 311f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return mParams->flatten(); 31261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 31361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 31461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) { 3156db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 31661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 31761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 318f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala// private methods 319f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 320f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::buildDefaultParameters() { 321f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 322f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (mParams) { 323f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala delete mParams; 324f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 325f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams = new CameraParameters; 326f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 327f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableProcessedSizes; 328f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 329f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 330f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableProcessedSizes); 331f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 332f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableProcessedSizes.count < 2) { 333f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: " 334f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Malformed %s entry", 335f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 336f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala get_camera_metadata_tag_name( 337f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES)); 338f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 339f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 340f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 341f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick more intelligently 342f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int previewWidth = availableProcessedSizes.data.i32[0]; 343f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int previewHeight = availableProcessedSizes.data.i32[1]; 344f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 345f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setPreviewSize(previewWidth, previewHeight); 346f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setVideoSize(previewWidth, previewHeight); 347f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO, 348f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8::format("%dx%d",previewWidth,previewHeight)); 349f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 350f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewSizes; 351f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableProcessedSizes.count; i += 2) { 352f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewSizes += ","; 353f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes += String8::format("%dx%d", 354f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i], 355f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i+1]); 356f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 357f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, 358f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 359f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES, 360f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 361f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 362f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 363f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableFpsRanges; 364f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 365f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 366f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableFpsRanges); 367f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 368f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableFpsRanges.count < 2) { 369f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: " 370f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Malformed %s entry", 371f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 372f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala get_camera_metadata_tag_name( 373f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES)); 374f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 375f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 376f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 377f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int previewFpsRangeMin = availableFpsRanges.data.i32[0]; 378f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int previewFpsRangeMax = availableFpsRanges.data.i32[1]; 379f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 380f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_PREVIEW_FPS_RANGE, 381f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8::format("%d,%d", previewFpsRangeMin, previewFpsRangeMax)); 382f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 383f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 384f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFpsRange; 385f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 386f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFpsRange += ","; 387f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange += String8::format("(%d,%d)", 388f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i], 389f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i+1]); 390f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 391f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, 392f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange); 393f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 394f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 395f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_PREVIEW_FORMAT, 396f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "yuv420sp"); // NV21 397f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 398f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableFormats; 399f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 400f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_FORMATS, 401f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableFormats); 402f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 403f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFormats; 404f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 405f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFormats.count; i++) { 406f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedPreviewFormats += ","; 407f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 408f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableFormats.data.i32[i]) { 409f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: 410f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv422sp"; 411f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 412f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: 413f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv420sp"; 414f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 415f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: 416f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv422i-yuyv"; 417f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 418f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: 419f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv420p"; 420f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 421f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: 422f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "rgb565"; 423f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 424f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not advertizing JPEG, RAW_SENSOR, etc, for preview formats 425f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 426f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 427f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 428f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 429f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown preview format: %x", 430f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableFormats.data.i32[i]); 431f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 432f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 433f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 434f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 435f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS, 436f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats); 437f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 438f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 439f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // PREVIEW_FRAME_RATE / SUPPORTED_PREVIEW_FRAME_RATES are deprecated, but 440f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // still have to do something sane for them 441f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 442f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_PREVIEW_FRAME_RATE, 443f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala previewFpsRangeMin); 444f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 445f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 446f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFrameRates; 447f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 448f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFrameRates += ","; 449f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates += String8::format("%d", 450f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i]); 451f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 452f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES, 453f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates); 454f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 455f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 456f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableJpegSizes; 457f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 458f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 459f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableJpegSizes); 460f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 461f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableJpegSizes.count < 2) { 462f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: " 463f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Malformed %s entry", 464f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 465f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala get_camera_metadata_tag_name( 466f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_JPEG_SIZES)); 467f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 468f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 469f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 470f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick maximum 471f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int32_t pictureWidth = availableJpegSizes.data.i32[0]; 472f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int32_t pictureHeight = availableJpegSizes.data.i32[1]; 473f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 474f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setPictureSize(pictureWidth, pictureHeight); 475f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 476f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 477f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPictureSizes; 478f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegSizes.count; i += 2) { 479f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPictureSizes += ","; 480f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes += String8::format("%dx%d", 481f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i], 482f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i+1]); 483f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 484f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, 485f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes); 486f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 487f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 488f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setPictureFormat("jpeg"); 489f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 490f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS, 491f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "jpeg"); 492f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 493f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableJpegThumbnailSizes; 494f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 495f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, 496f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableJpegThumbnailSizes); 497f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 498f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableJpegThumbnailSizes.count < 2) { 499f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: " 500f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Malformed %s entry", 501f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 502f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala get_camera_metadata_tag_name( 503f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES)); 504f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 505f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 506f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 507f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick default thumbnail size sensibly 508f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int32_t jpegThumbWidth = availableJpegThumbnailSizes.data.i32[0]; 509f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala int32_t jpegThumbHeight = availableJpegThumbnailSizes.data.i32[1]; 510f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 511f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, 512f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala jpegThumbWidth); 513f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, 514f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala jpegThumbHeight); 515f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 516f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 517f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedJpegThumbSizes; 518f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegThumbnailSizes.count; i += 2) { 519f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedJpegThumbSizes += ","; 520f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes += String8::format("%dx%d", 521f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i], 522f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i+1]); 523f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 524f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, 525f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes); 526f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 527f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 528f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, 529f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "90"); 530f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_JPEG_QUALITY, 531f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "90"); 532f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ROTATION, 533f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "0"); 534f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not settting GPS fields 535f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 536f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_WHITE_BALANCE, 537f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "auto"); 538f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 539f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableWhiteBalanceModes; 540f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 541f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AWB_AVAILABLE_MODES, 542f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableWhiteBalanceModes); 543f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 544f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedWhiteBalance; 545f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 546f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableWhiteBalanceModes.count; i++) { 547f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedWhiteBalance += ","; 548f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 549f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableWhiteBalanceModes.data.u8[i]) { 550f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_AUTO: 551f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "auto"; 552f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 553f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_INCANDESCENT: 554f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "incandescent"; 555f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 556f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_FLUORESCENT: 557f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "fluorescent"; 558f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 559f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_WARM_FLUORESCENT: 560f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "warm-fluorescent"; 561f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 562f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_DAYLIGHT: 563f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "daylight"; 564f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 565f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT: 566f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "cloudy-daylight"; 567f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 568f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_TWILIGHT: 569f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "twilight"; 570f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 571f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_SHADE: 572f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "shade"; 573f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 574f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Skipping values not mappable to v1 API 575f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_OFF: 576f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 577f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 578f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 579f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown white balance value: %d", 580f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 581f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableWhiteBalanceModes.data.u8[i]); 582f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 583f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 584f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 585f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 586f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE, 587f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance); 588f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 589f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 590f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_EFFECT, "none"); 591f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableEffects; 592f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 593f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AVAILABLE_EFFECTS, 594f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableEffects); 595f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 596f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 597f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedEffects; 598f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 599f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableEffects.count; i++) { 600f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedEffects += ","; 601f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 602f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableEffects.data.u8[i]) { 603f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_OFF: 604f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "none"; 605f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 606f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_MONO: 607f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "mono"; 608f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_NEGATIVE: 609f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "negative"; 610f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 611f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SOLARIZE: 612f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "solarize"; 613f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 614f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SEPIA: 615f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "sepia"; 616f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 617f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_POSTERIZE: 618f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "posterize"; 619f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 620f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_WHITEBOARD: 621f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "whiteboard"; 622f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 623f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_BLACKBOARD: 624f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "blackboard"; 625f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 626f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_AQUA: 627f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "aqua"; 628f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 629f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 630f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown effect value: %d", 631f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableEffects.data.u8[i]); 632f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 633f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 634f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 635f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 636f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_EFFECTS, supportedEffects); 637f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 638f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 639f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ANTIBANDING, "auto"); 640f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableAntibandingModes; 641f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 642f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, 643f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableAntibandingModes); 644f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 645f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 646f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedAntibanding; 647f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 648f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAntibandingModes.count; i++) { 649f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedAntibanding += ","; 650f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 651f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAntibandingModes.data.u8[i]) { 652f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_OFF: 653f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "off"; 654f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 655f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_50HZ: 656f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "50hz"; 657f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 658f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_60HZ: 659f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "60hz"; 660f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 661f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_AUTO: 662f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "auto"; 663f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 664f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 665f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown antibanding value: %d", 666f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 667f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableAntibandingModes.data.u8[i]); 668f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 669f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 670f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 671f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 672f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_ANTIBANDING, 673f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding); 674f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 675f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 676f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SCENE_MODE, "auto"); 677f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableSceneModes; 678f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 679f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AVAILABLE_SCENE_MODES, 680f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableSceneModes); 681f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 682f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 683f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedSceneModes("auto"); 684f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 685f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool noSceneModes = false; 686f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableSceneModes.count; i++) { 687f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedSceneModes += ","; 688f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 689f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableSceneModes.data.u8[i]) { 690f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED: 691f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala noSceneModes = true; 692f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 693f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY: 694f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not in old API 695f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 696f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 697f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_ACTION: 698f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "action"; 699f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 700f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PORTRAIT: 701f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "portrait"; 702f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 703f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_LANDSCAPE: 704f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "landscape"; 705f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 706f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT: 707f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "night"; 708f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 709f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT: 710f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "night-portrait"; 711f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 712f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_THEATRE: 713f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "theatre"; 714f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 715f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BEACH: 716f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "beach"; 717f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 718f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SNOW: 719f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "snow"; 720f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 721f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SUNSET: 722f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "sunset"; 723f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 724f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO: 725f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "steadyphoto"; 726f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 727f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FIREWORKS: 728f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "fireworks"; 729f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 730f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SPORTS: 731f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "sports"; 732f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 733f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PARTY: 734f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "party"; 735f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 736f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT: 737f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "candlelight"; 738f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 739f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BARCODE: 740f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "barcode"; 741f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 742f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 743f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown scene mode value: %d", 744f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableSceneModes.data.u8[i]); 745f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 746f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 747f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 748f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 749f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (!noSceneModes) { 750f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_SCENE_MODES, 751f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes); 752f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 753f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 754f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 755f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t flashAvailable; 756f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 757f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_FLASH_AVAILABLE, &flashAvailable); 758f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 759f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 760f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableAeModes; 761f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 762f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_AVAILABLE_MODES, 763f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableAeModes); 764f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 765f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 766f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (flashAvailable.data.u8[0]) { 767f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FLASH_MODE, "auto"); 768f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedFlashModes("off,auto,on,torch"); 769f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAeModes.count; i++) { 770f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableAeModes.data.u8[i] == 771f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_ON_AUTO_FLASH_REDEYE) { 772f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFlashModes += ",red-eye"; 773f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 774f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 775f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 776f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 777f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFlashModes); 778f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 779f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 780f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t minFocusDistance; 781f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 782f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_LENS_MINIMUM_FOCUS_DISTANCE, 783f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &minFocusDistance); 784f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 785f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableAfModes; 786f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 787f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AF_AVAILABLE_MODES, 788f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableAfModes); 789f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 790f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (minFocusDistance.data.f[0] == 0) { 791f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Fixed-focus lens 792f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FOCUS_MODE, "fixed"); 793f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, "fixed"); 794f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 795f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FOCUS_MODE, "auto"); 796f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedFocusModes("fixed,infinity"); 797f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 798f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAfModes.count; i++) { 799f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedFocusModes += ","; 800f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 801f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAfModes.data.u8[i]) { 802f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_AUTO: 803f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "auto"; 804f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 805f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_MACRO: 806f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "macro"; 807f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 808f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_VIDEO: 809f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "continuous-video"; 810f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 811f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_PICTURE: 812f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "continuous-picture"; 813f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 814f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_EDOF: 815f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "edof"; 816f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 817f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not supported in v1 API 818f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_OFF: 819f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 820f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 821f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 822f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown AF mode value: %d", 823f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableAfModes.data.u8[i]); 824f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 825f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 826f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 827f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 828f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 829f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes); 830f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 831f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 832f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t max3aRegions; 833f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 834f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_MAX_REGIONS, &max3aRegions); 835f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 836f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 837f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS, 838f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 839f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FOCUS_AREAS, 840f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 841f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 842f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableFocalLengths; 843f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 844f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_LENS_AVAILABLE_FOCAL_LENGTHS, 845f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableFocalLengths); 846f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 847f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float minFocalLength = availableFocalLengths.data.f[0]; 848f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setFloat(CameraParameters::KEY_FOCAL_LENGTH, minFocalLength); 849f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 850f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t sensorSize; 851f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 852f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SENSOR_PHYSICAL_SIZE, 853f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &sensorSize); 854f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 855f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 856f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // The fields of view here assume infinity focus, maximum wide angle 857f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float horizFov = 180 / M_PI * 858f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[0] / (2 * minFocalLength)); 859f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float vertFov = 180 / M_PI * 860f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[1] / (2 * minFocalLength)); 861f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setFloat(CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE, horizFov); 862f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setFloat(CameraParameters::KEY_VERTICAL_VIEW_ANGLE, vertFov); 863f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 864f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_EXPOSURE_COMPENSATION, 0); 865f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 866f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t exposureCompensationRange; 867f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 868f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE, 869f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &exposureCompensationRange); 870f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 871f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION, 872f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[1]); 873f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION, 874f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[0]); 875f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 876f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t exposureCompensationStep; 877f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 878f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_EXP_COMPENSATION_STEP, 879f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &exposureCompensationStep); 880f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 881f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->setFloat(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP, 882f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].numerator / 883f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].denominator); 884f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 885f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, "false"); 886f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED, "true"); 887f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 888f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, "false"); 889f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED, "true"); 890f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 891f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_NUM_METERING_AREAS, 892f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 893f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_METERING_AREAS, 894f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 895f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 896f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ZOOM, 0); 8976db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_ZOOM, NUM_ZOOM_STEPS - 1); 898f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 899f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t maxDigitalZoom; 900f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 901f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_SCALER_AVAILABLE_MAX_ZOOM, &maxDigitalZoom); 902f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 903f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 904f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 905f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 zoomRatios; 906f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoom = 1.f; 907f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoomIncrement = (maxDigitalZoom.data.f[0] - zoom) / 9086db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala (NUM_ZOOM_STEPS-1); 909f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 9106db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala for (size_t i=0; i < NUM_ZOOM_STEPS; i++) { 911f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) zoomRatios += ","; 912f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 913f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoomRatios += String8::format("%d", static_cast<int>(zoom * 100)); 914f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoom += zoomIncrement; 915f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 916f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ZOOM_RATIOS, zoomRatios); 917f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 918f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 919f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_ZOOM_SUPPORTED, "true"); 920f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED, "true"); 921f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 922f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_FOCUS_DISTANCES, 923f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Infinity,Infinity,Infinity"); 924f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 925f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t maxFacesDetected; 926f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 927f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_STATS_MAX_FACE_COUNT, 928f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &maxFacesDetected); 929f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW, 930f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala maxFacesDetected.data.i32[0]); 931f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW, 932f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 0); 933f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 934f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_FRAME_FORMAT, 935f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "yuv420sp"); 936f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 937f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_RECORDING_HINT, 938f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "false"); 939f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 940f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED, 941f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "true"); 942f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 943f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_STABILIZATION, 944f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "false"); 945f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 946f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala camera_metadata_entry_t availableVideoStabilizationModes; 947f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 948f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES, 949f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala &availableVideoStabilizationModes); 950f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) return res; 951f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableVideoStabilizationModes.count > 1) { 952f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 953f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "true"); 954f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 955f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mParams->set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 956f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "false"); 957f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 958f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 959f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 960f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 96161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 9626db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::updatePreviewRequest() { 9636db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOG1_ENTRY 9646db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 9656db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewRequest == NULL) { 9666db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->createDefaultRequest(CAMERA2_TEMPLATE_PREVIEW, 9676db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &mPreviewRequest); 9686db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 9696db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOGE("%s: Camera %d: Unable to create default preview request: " 9706db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala "%s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 9716db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 9726db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 9736db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 9746db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala // TODO: Adjust for mParams changes 9756db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOG1_EXIT 9766db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 9776db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala} 9786db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 97961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} // namespace android 980