Camera2Client.cpp revision 3cca136b73b0f4d058019230eb2070cc23e2bbb0
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" 18a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala#define ATRACE_TAG ATRACE_TAG_CAMERA 1961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala//#define LOG_NDEBUG 0 20a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala 21f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala#include <utils/Log.h> 22a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala#include <utils/Trace.h> 2361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 2461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include <cutils/properties.h> 2561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include <gui/SurfaceTextureClient.h> 2661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include <gui/Surface.h> 2761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 28f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala#include <math.h> 29f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 3061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#include "Camera2Client.h" 3161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalanamespace android { 3361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#define ALOG1(...) ALOGD_IF(gLogLevel >= 1, __VA_ARGS__); 3561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala#define ALOG2(...) ALOGD_IF(gLogLevel >= 2, __VA_ARGS__); 3661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatic int getCallingPid() { 3861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return IPCThreadState::self()->getCallingPid(); 3961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 4061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 4161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatic int getCallingUid() { 4261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return IPCThreadState::self()->getCallingUid(); 4361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 4461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 4561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala// Interface used by CameraService 4661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 4761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaCamera2Client::Camera2Client(const sp<CameraService>& cameraService, 4861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala const sp<ICameraClient>& cameraClient, 4961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int cameraId, 5061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int cameraFacing, 5161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala int clientPid): 5261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala Client(cameraService, cameraClient, 53f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala cameraId, cameraFacing, clientPid), 546db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState(NOT_INITIALIZED), 556db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mPreviewStreamId(NO_PREVIEW_STREAM), 566db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mPreviewRequest(NULL) 57f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 58a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 5961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 60f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDevice = new Camera2Device(cameraId); 61f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 62f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 63f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::initialize(camera_module_t *module) 64f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala{ 65a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 66f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 67f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 68f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = mDevice->initialize(module); 69f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) { 70f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: unable to initialize device: %s (%d)", 71f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 72f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 73f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 74f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 75f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala res = buildDefaultParameters(); 76f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (res != OK) { 77f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGE("%s: Camera %d: unable to build defaults: %s (%d)", 78f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 79f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return NO_INIT; 80f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 82f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (gLogLevel >= 1) { 83f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGD("%s: Default parameters converted from camera %d:", __FUNCTION__, 84f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mCameraId); 853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGD("%s", mParamsFlattened.string()); 86f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 87f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 886db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 896db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 90f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 9161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 9261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 9361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaCamera2Client::~Camera2Client() { 94a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 95f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala mDestructionStarted = true; 96f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 97f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala disconnect(); 983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 9961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 10061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 10161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::dump(int fd, const Vector<String16>& args) { 102611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala String8 result; 103611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala result.appendFormat("Client2[%d] (%p) PID: %d:\n", 104611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala mCameraId, 105611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala getCameraClient()->asBinder().get(), 106611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala mClientPid); 107611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala write(fd, result.string(), result.size()); 108611f61998863d3a3ffae4e5f2b723b7319c59ddfEino-Ville Talvala return NO_ERROR; 10961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 11061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 11161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala// ICamera interface 11261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 11361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::disconnect() { 114a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 115f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (mDevice == 0) return; 116f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 1176db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala stopPreview(); 1186db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1196db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewStreamId != NO_PREVIEW_STREAM) { 1206db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mDevice->deleteStream(mPreviewStreamId); 1216db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mPreviewStreamId = NO_PREVIEW_STREAM; 1226db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 123f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 12461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala CameraService::Client::disconnect(); 12561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 12661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 12761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::connect(const sp<ICameraClient>& client) { 128a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 12961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 13061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 13161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 13261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::lock() { 133a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 13461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 13561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 13661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 13761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::unlock() { 138a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 13961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 14061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 14161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 1426db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewDisplay( 1436db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<Surface>& surface) { 144a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 1456db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState == PREVIEW) return INVALID_OPERATION; 1466db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1476db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<IBinder> binder; 1486db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<ANativeWindow> window; 1496db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (surface != 0) { 1506db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala binder = surface->asBinder(); 1516db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala window = surface; 1526db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 1536db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1546db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return setPreviewWindow(binder,window); 15561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 15661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 1576db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewTexture( 1586db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<ISurfaceTexture>& surfaceTexture) { 159a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 1606db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState == PREVIEW) return INVALID_OPERATION; 1616db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1626db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<IBinder> binder; 1636db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala sp<ANativeWindow> window; 1646db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (surfaceTexture != 0) { 1656db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala binder = surfaceTexture->asBinder(); 1666db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala window = new SurfaceTextureClient(surfaceTexture); 1676db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 1686db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return setPreviewWindow(binder, window); 1696db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala} 1706db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1716db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::setPreviewWindow(const sp<IBinder>& binder, 1726db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala const sp<ANativeWindow>& window) { 173a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 1746db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 1756db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1766db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (binder == mPreviewSurface) { 1776db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return NO_ERROR; 1786db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 1796db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1806db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewStreamId != NO_PREVIEW_STREAM) { 1816db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->deleteStream(mPreviewStreamId); 1826db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 1836db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 1846db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 1856db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 1866db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->createStream(window, 1873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewWidth, mParameters.previewHeight, 1883cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CAMERA2_HAL_PIXEL_FORMAT_OPAQUE, 1896db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &mPreviewStreamId); 1906db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 1916db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 1926db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 1936db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1946db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState == WAITING_FOR_PREVIEW_WINDOW) { 1956db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return startPreview(); 1966db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 1976db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 1986db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 19961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 20061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 20161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::setPreviewCallbackFlag(int flag) { 202a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 20361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 20461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 20561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startPreview() { 206a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 2076db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 2086db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState == PREVIEW) return INVALID_OPERATION; 2096db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2106db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewStreamId == NO_PREVIEW_STREAM) { 2116db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = WAITING_FOR_PREVIEW_WINDOW; 2126db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 2136db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2146db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2156db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewRequest == NULL) { 2166db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala updatePreviewRequest(); 2176db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2186db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2196db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala uint8_t outputStream = mPreviewStreamId; 2206db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2216db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala camera_metadata_entry_t outputStreams; 2226db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = find_camera_metadata_entry(mPreviewRequest, 2236db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ANDROID_REQUEST_OUTPUT_STREAMS, 2246db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &outputStreams); 2256db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res == NAME_NOT_FOUND) { 2266db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = add_camera_metadata_entry(mPreviewRequest, 2276db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ANDROID_REQUEST_OUTPUT_STREAMS, 2286db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &outputStream, 1); 2296db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } else if (res == OK) { 2306db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = update_camera_metadata_entry(mPreviewRequest, 2316db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala outputStreams.index, &outputStream, 1, NULL); 2326db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2336db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2346db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 2356db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOGE("%s: Camera %d: Unable to set up preview request: %s (%d)", 2366db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 2376db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 2386db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 2396db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2406db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2416db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->setStreamingRequest(mPreviewRequest); 2426db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 2436db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOGE("%s: Camera %d: Unable to set preview request to start preview: %s (%d)", 2446db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala __FUNCTION__, mCameraId, strerror(-res), res); 2456db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 2466db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 2476db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 2486db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = PREVIEW; 2496db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 2506db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 25161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 25261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 25361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopPreview() { 254a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 2556db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mState != PREVIEW) return; 25661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 2576db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mDevice->setStreamingRequest(NULL); 2586db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala mState = STOPPED; 25961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 26061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 26161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::previewEnabled() { 262a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 2636db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return mState == PREVIEW; 26461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 26561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 26661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::storeMetaDataInBuffers(bool enabled) { 267a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 26861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 26961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 27061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 27161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::startRecording() { 272a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 27361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 27461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 27561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 27661ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::stopRecording() { 277a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 27861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 27961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 28061ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalabool Camera2Client::recordingEnabled() { 281a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 28261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 28361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 28461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 28561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalavoid Camera2Client::releaseRecordingFrame(const sp<IMemory>& mem) { 286a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 28761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 28861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 28961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::autoFocus() { 290a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 2916db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 29261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 29361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 29461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::cancelAutoFocus() { 295a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 2966db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 29761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 29861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 29961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::takePicture(int msgType) { 300a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 30161ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala return BAD_VALUE; 30261ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 30361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 30461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::setParameters(const String8& params) { 305a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 3066db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 30761ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 308f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 30961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville TalvalaString8 Camera2Client::getParameters() const { 310a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 3113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala // TODO: Deal with focus distances 3123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala return mParamsFlattened; 31361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 31461ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 31561ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvalastatus_t Camera2Client::sendCommand(int32_t cmd, int32_t arg1, int32_t arg2) { 316a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 3176db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 31861ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} 31961ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 3203cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala/** Device-related methods */ 3213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 3223cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvalacamera_metadata_entry_t Camera2Client::staticInfo(uint32_t tag, 3233cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala size_t minCount, size_t maxCount) { 3243cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala status_t res; 3253cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t entry; 3263cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala res = find_camera_metadata_entry(mDevice->info(), 3273cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala tag, 3283cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala &entry); 3293cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (CC_UNLIKELY( res != OK )) { 3303cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagSection = get_camera_metadata_section_name(tag); 3313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagSection == NULL) tagSection = "<unknown>"; 3323cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagName = get_camera_metadata_tag_name(tag); 3333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagName == NULL) tagName = "<unknown>"; 3343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 3353cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGE("Error finding static metadata entry '%s.%s' (%x): %s (%d)", 3363cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala tagSection, tagName, tag, strerror(-res), res); 3373cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.count = 0; 3383cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.data.u8 = NULL; 3393cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } else if (CC_UNLIKELY( 3403cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala (minCount != 0 && entry.count < minCount) || 3413cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala (maxCount != 0 && entry.count > maxCount) ) ) { 3423cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagSection = get_camera_metadata_section_name(tag); 3433cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagSection == NULL) tagSection = "<unknown>"; 3443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char* tagName = get_camera_metadata_tag_name(tag); 3453cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (tagName == NULL) tagName = "<unknown>"; 3463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGE("Malformed static metadata entry '%s.%s' (%x):" 3473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "Expected between %d and %d values, but got %d values", 3483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala tagSection, tagName, tag, minCount, maxCount, entry.count); 3493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.count = 0; 3503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala entry.data.u8 = NULL; 3513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } 3523cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 3533cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala return entry; 3543cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala} 3553cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 3563cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala/** Utility methods */ 3573cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 358f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 359f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvalastatus_t Camera2Client::buildDefaultParameters() { 360a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 361f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala status_t res; 3623cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters params; 363f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 3643cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableProcessedSizes = 3653cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES, 2); 3663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableProcessedSizes.count) return NO_INIT; 367f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 368f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick more intelligently 3693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewWidth = availableProcessedSizes.data.i32[0]; 3703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewHeight = availableProcessedSizes.data.i32[1]; 3713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.videoWidth = mParameters.previewWidth; 3723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.videoHeight = mParameters.previewHeight; 3733cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 3743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setPreviewSize(mParameters.previewWidth, mParameters.previewHeight); 3753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setVideoSize(mParameters.videoWidth, mParameters.videoHeight); 3763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREFERRED_PREVIEW_SIZE_FOR_VIDEO, 3773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8::format("%dx%d", 3783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewWidth, mParameters.previewHeight)); 379f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 380f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewSizes; 381f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableProcessedSizes.count; i += 2) { 382f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewSizes += ","; 383f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes += String8::format("%dx%d", 384f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i], 385f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableProcessedSizes.data.i32[i+1]); 386f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 3873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, 388f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 3893cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_VIDEO_SIZES, 390f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewSizes); 391f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 392f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 3933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableFpsRanges = 3943cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, 2); 3953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableFpsRanges.count) return NO_INIT; 396f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 3973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMin = availableFpsRanges.data.i32[0]; 3983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMax = availableFpsRanges.data.i32[1]; 399f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 4003cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FPS_RANGE, 4013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8::format("%d,%d", 4023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMin, 4033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMax)); 404f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 405f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 406f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFpsRange; 407f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 408f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFpsRange += ","; 409f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange += String8::format("(%d,%d)", 410f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i], 411f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i+1]); 412f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 4133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, 414f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFpsRange); 415f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 416f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 4173cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; 4183cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FORMAT, 4193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala formatEnumToString(mParameters.previewFormat)); // NV21 4203cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 4213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableFormats = 4223cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_FORMATS); 423f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 424f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 425f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFormats; 426f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 427f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFormats.count; i++) { 428f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedPreviewFormats += ","; 429f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 430f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableFormats.data.i32[i]) { 431f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: 432f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv422sp"; 433f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 434f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: 435f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv420sp"; 436f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 437f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: 438f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv422i-yuyv"; 439f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 440f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: 441f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "yuv420p"; 442f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 443f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: 444f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats += "rgb565"; 445f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 446f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not advertizing JPEG, RAW_SENSOR, etc, for preview formats 447f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 448f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 449f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 450f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 451f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown preview format: %x", 452f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableFormats.data.i32[i]); 453f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 454f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 455f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 456f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 4573cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS, 458f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFormats); 459f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 460f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 461f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // PREVIEW_FRAME_RATE / SUPPORTED_PREVIEW_FRAME_RATES are deprecated, but 462f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // still have to do something sane for them 463f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 4643cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_PREVIEW_FRAME_RATE, 4653cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.previewFpsRangeMin); 466f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 467f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 468f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPreviewFrameRates; 469f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableFpsRanges.count; i += 2) { 470f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPreviewFrameRates += ","; 471f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates += String8::format("%d", 472f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableFpsRanges.data.i32[i]); 473f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 4743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FRAME_RATES, 475f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPreviewFrameRates); 476f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 477f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 4783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableJpegSizes = 4793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_JPEG_SIZES, 2); 4803cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableJpegSizes.count) return NO_INIT; 481f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 482f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick maximum 4833cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.pictureWidth = availableJpegSizes.data.i32[0]; 4843cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.pictureHeight = availableJpegSizes.data.i32[1]; 485f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 4863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setPictureSize(mParameters.pictureWidth, 4873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.pictureHeight); 488f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 489f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 490f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedPictureSizes; 491f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegSizes.count; i += 2) { 492f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedPictureSizes += ","; 493f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes += String8::format("%dx%d", 494f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i], 495f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegSizes.data.i32[i+1]); 496f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 4973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PICTURE_SIZES, 498f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedPictureSizes); 499f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 500f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 5013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setPictureFormat(CameraParameters::PIXEL_FORMAT_JPEG); 5023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_PICTURE_FORMATS, 5033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::PIXEL_FORMAT_JPEG); 504f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 5053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableJpegThumbnailSizes = 5063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_JPEG_AVAILABLE_THUMBNAIL_SIZES, 2); 5073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableJpegThumbnailSizes.count) return NO_INIT; 508f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 509f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // TODO: Pick default thumbnail size sensibly 5103cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbWidth = availableJpegThumbnailSizes.data.i32[0]; 5113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbHeight = availableJpegThumbnailSizes.data.i32[1]; 512f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 5133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, 5143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbWidth); 5153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, 5163cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbHeight); 517f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 518f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 519f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedJpegThumbSizes; 520f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableJpegThumbnailSizes.count; i += 2) { 521f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (i != 0) supportedJpegThumbSizes += ","; 522f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes += String8::format("%dx%d", 523f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i], 524f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableJpegThumbnailSizes.data.i32[i+1]); 525f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 5263cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, 527f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedJpegThumbSizes); 528f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 529f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 5303cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbQuality = 90; 5313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, 5323cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegThumbQuality); 5333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegQuality = 90; 5343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_JPEG_QUALITY, 5353cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegQuality); 5363cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegRotation = 0; 5373cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ROTATION, 5383cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.jpegRotation); 5393cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 5403cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.gpsEnabled = false; 5413cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.gpsProcessingMethod = "unknown"; 5423cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala // GPS fields in CameraParameters are not set by implementation 5433cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 5443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.wbMode = ANDROID_CONTROL_AWB_AUTO; 5453cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_WHITE_BALANCE, 5463cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::WHITE_BALANCE_AUTO); 5473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 5483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableWhiteBalanceModes = 5493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AWB_AVAILABLE_MODES); 550f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 551f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedWhiteBalance; 552f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 553f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableWhiteBalanceModes.count; i++) { 554f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedWhiteBalance += ","; 555f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 556f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableWhiteBalanceModes.data.u8[i]) { 557f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_AUTO: 558f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "auto"; 559f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 560f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_INCANDESCENT: 561f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "incandescent"; 562f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 563f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_FLUORESCENT: 564f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "fluorescent"; 565f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 566f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_WARM_FLUORESCENT: 567f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "warm-fluorescent"; 568f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 569f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_DAYLIGHT: 570f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "daylight"; 571f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 572f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_CLOUDY_DAYLIGHT: 573f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "cloudy-daylight"; 574f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 575f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_TWILIGHT: 576f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "twilight"; 577f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 578f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_SHADE: 579f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance += "shade"; 580f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 581f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Skipping values not mappable to v1 API 582f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AWB_OFF: 583f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 584f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 585f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 586f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown white balance value: %d", 587f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 588f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableWhiteBalanceModes.data.u8[i]); 589f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 590f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 591f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 592f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 5933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_WHITE_BALANCE, 594f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedWhiteBalance); 595f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 596f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 5973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.effectMode = ANDROID_CONTROL_EFFECT_OFF; 5983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_EFFECT, 5993cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::EFFECT_NONE); 6003cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 6013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableEffects = 6023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_EFFECTS); 6033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableEffects.count) return NO_INIT; 604f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 605f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedEffects; 606f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 607f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableEffects.count; i++) { 608f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedEffects += ","; 609f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 610f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableEffects.data.u8[i]) { 611f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_OFF: 612f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "none"; 613f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 614f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_MONO: 615f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "mono"; 616f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_NEGATIVE: 617f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "negative"; 618f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 619f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SOLARIZE: 620f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "solarize"; 621f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 622f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_SEPIA: 623f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "sepia"; 624f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 625f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_POSTERIZE: 626f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "posterize"; 627f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 628f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_WHITEBOARD: 629f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "whiteboard"; 630f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 631f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_BLACKBOARD: 632f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "blackboard"; 633f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 634f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_EFFECT_AQUA: 635f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedEffects += "aqua"; 636f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 637f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 638f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown effect value: %d", 639f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableEffects.data.u8[i]); 640f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 641f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 642f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 643f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 6443cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_EFFECTS, supportedEffects); 645f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 646f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 6473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.antibandingMode = ANDROID_CONTROL_AE_ANTIBANDING_AUTO; 6483cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ANTIBANDING, 6493cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::ANTIBANDING_AUTO); 6503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 6513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableAntibandingModes = 6523cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES); 6533cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableAntibandingModes.count) return NO_INIT; 654f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 655f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedAntibanding; 656f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 657f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAntibandingModes.count; i++) { 658f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedAntibanding += ","; 659f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 660f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAntibandingModes.data.u8[i]) { 661f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_OFF: 662f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "off"; 663f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 664f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_50HZ: 665f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "50hz"; 666f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 667f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_60HZ: 668f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "60hz"; 669f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 670f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AE_ANTIBANDING_AUTO: 671f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding += "auto"; 672f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 673f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 674f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown antibanding value: %d", 675f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, 676f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala availableAntibandingModes.data.u8[i]); 677f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 678f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 679f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 680f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 6813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_ANTIBANDING, 682f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedAntibanding); 683f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 684f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 6853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.sceneMode = ANDROID_CONTROL_OFF; 6863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SCENE_MODE, 6873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::SCENE_MODE_AUTO); 6883cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 6893cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableSceneModes = 6903cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_SCENE_MODES); 6913cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableSceneModes.count) return NO_INIT; 692f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 693f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 supportedSceneModes("auto"); 694f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 695f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool noSceneModes = false; 696f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableSceneModes.count; i++) { 697f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedSceneModes += ","; 698f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 699f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableSceneModes.data.u8[i]) { 700f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_UNSUPPORTED: 701f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala noSceneModes = true; 702f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 703f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FACE_PRIORITY: 704f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not in old API 705f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 706f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 707f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_ACTION: 708f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "action"; 709f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 710f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PORTRAIT: 711f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "portrait"; 712f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 713f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_LANDSCAPE: 714f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "landscape"; 715f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 716f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT: 717f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "night"; 718f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 719f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_NIGHT_PORTRAIT: 720f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "night-portrait"; 721f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 722f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_THEATRE: 723f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "theatre"; 724f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 725f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BEACH: 726f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "beach"; 727f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 728f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SNOW: 729f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "snow"; 730f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 731f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SUNSET: 732f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "sunset"; 733f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 734f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_STEADYPHOTO: 735f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "steadyphoto"; 736f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 737f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_FIREWORKS: 738f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "fireworks"; 739f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 740f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_SPORTS: 741f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "sports"; 742f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 743f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_PARTY: 744f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "party"; 745f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 746f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT: 747f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "candlelight"; 748f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 749f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_SCENE_MODE_BARCODE: 750f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes += "barcode"; 751f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 752f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 753f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown scene mode value: %d", 754f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableSceneModes.data.u8[i]); 755f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 756f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 757f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 758f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 759f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (!noSceneModes) { 7603cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_SCENE_MODES, 761f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedSceneModes); 762f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 763f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 764f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 7653cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t flashAvailable = 7663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_FLASH_AVAILABLE, 1, 1); 7673cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!flashAvailable.count) return NO_INIT; 768f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 7693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableAeModes = 7703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_AVAILABLE_MODES); 7713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableAeModes.count) return NO_INIT; 772f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 773f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (flashAvailable.data.u8[0]) { 7743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.flashMode = Parameters::FLASH_MODE_AUTO; 7753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FLASH_MODE, 7763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_AUTO); 7773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 7783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8 supportedFlashModes(CameraParameters::FLASH_MODE_OFF); 7793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala supportedFlashModes = supportedFlashModes + 7803cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_AUTO + 7813cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_ON + 7823cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala "," + CameraParameters::FLASH_MODE_TORCH; 783f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAeModes.count; i++) { 784f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableAeModes.data.u8[i] == 785f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ANDROID_CONTROL_AE_ON_AUTO_FLASH_REDEYE) { 7863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala supportedFlashModes = supportedFlashModes + "," + 7873cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_RED_EYE; 788f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 789f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 790f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 7913cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 792f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFlashModes); 7933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } else { 7943cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.flashMode = Parameters::FLASH_MODE_OFF; 7953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FLASH_MODE, 7963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_OFF); 7973cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FLASH_MODES, 7983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FLASH_MODE_OFF); 799f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 800f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 8013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t minFocusDistance = 8023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_LENS_MINIMUM_FOCUS_DISTANCE, 1, 1); 8033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!minFocusDistance.count) return NO_INIT; 8043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 8053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableAfModes = 8063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AF_AVAILABLE_MODES); 8073cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableAfModes.count) return NO_INIT; 8083cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 809f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (minFocusDistance.data.f[0] == 0) { 810f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Fixed-focus lens 8113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusMode = Parameters::FOCUS_MODE_FIXED; 8123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_MODE, 8133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_FIXED); 8143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 8153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_FIXED); 816f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 8173cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusMode = Parameters::FOCUS_MODE_AUTO; 8183cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_MODE, 8193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_AUTO); 8203cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala String8 supportedFocusModes(CameraParameters::FOCUS_MODE_FIXED); 8213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala supportedFocusModes = supportedFocusModes + "," + 8223cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FOCUS_MODE_INFINITY; 823f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = true; 824f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala for (size_t i=0; i < availableAfModes.count; i++) { 825f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) supportedFocusModes += ","; 826f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 827f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala switch (availableAfModes.data.u8[i]) { 828f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_AUTO: 829f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "auto"; 830f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 831f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_MACRO: 832f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "macro"; 833f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 834f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_VIDEO: 835f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "continuous-video"; 836f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 837f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_CONTINUOUS_PICTURE: 838f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "continuous-picture"; 839f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 840f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_EDOF: 841f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes += "edof"; 842f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 843f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // Not supported in v1 API 844f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala case ANDROID_CONTROL_AF_OFF: 845f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 846f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 847f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala default: 848f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala ALOGW("%s: Camera %d: Unknown AF mode value: %d", 849f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala __FUNCTION__, mCameraId, availableAfModes.data.u8[i]); 850f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = false; 851f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala break; 852f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 853f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 8543cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SUPPORTED_FOCUS_MODES, 855f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala supportedFocusModes); 856f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 857f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 8583cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t max3aRegions = 8593cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_MAX_REGIONS, 1, 1); 8603cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!max3aRegions.count) return NO_INIT; 861f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 8623cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_FOCUS_AREAS, 863f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 8643cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_AREAS, 865f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 8663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusingAreas.clear(); 8673cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.focusingAreas.add(Parameters::Area(0,0,0,0,0)); 8683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 8693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableFocalLengths = 8703cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_LENS_AVAILABLE_FOCAL_LENGTHS); 8713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableFocalLengths.count) return NO_INIT; 872f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 873f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float minFocalLength = availableFocalLengths.data.f[0]; 8743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_FOCAL_LENGTH, minFocalLength); 875f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 8763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t sensorSize = 8773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SENSOR_PHYSICAL_SIZE, 2, 2); 8783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!sensorSize.count) return NO_INIT; 879f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 880f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala // The fields of view here assume infinity focus, maximum wide angle 881f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float horizFov = 180 / M_PI * 882f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[0] / (2 * minFocalLength)); 883f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float vertFov = 180 / M_PI * 884f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 2 * atanf(sensorSize.data.f[1] / (2 * minFocalLength)); 8853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_HORIZONTAL_VIEW_ANGLE, horizFov); 8863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_VERTICAL_VIEW_ANGLE, vertFov); 887f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 8883cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.exposureCompensation = 0; 8893cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_EXPOSURE_COMPENSATION, 8903cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.exposureCompensation); 891f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 8923cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t exposureCompensationRange = 8933cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_RANGE, 2, 2); 8943cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!exposureCompensationRange.count) return NO_INIT; 8953cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 8963cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_EXPOSURE_COMPENSATION, 897f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[1]); 8983cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MIN_EXPOSURE_COMPENSATION, 899f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationRange.data.i32[0]); 900f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9013cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t exposureCompensationStep = 9023cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AE_EXP_COMPENSATION_STEP, 1, 1); 9033cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!exposureCompensationStep.count) return NO_INIT; 9043cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 9053cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.setFloat(CameraParameters::KEY_EXPOSURE_COMPENSATION_STEP, 906f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].numerator / 907f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala exposureCompensationStep.data.r[0].denominator); 908f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9093cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.autoExposureLock = false; 9103cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK, 9113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 9123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_EXPOSURE_LOCK_SUPPORTED, 9133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 914f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.autoWhiteBalanceLock = false; 9163cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK, 9173cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 9183cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_AUTO_WHITEBALANCE_LOCK_SUPPORTED, 9193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 920f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.meteringAreas.add(Parameters::Area(0, 0, 0, 0, 0)); 9223cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_METERING_AREAS, 923f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala max3aRegions.data.i32[0]); 9243cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_METERING_AREAS, 925f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "(0,0,0,0,0)"); 926f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9273cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParameters.zoom = 0; 9283cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM, mParameters.zoom); 9293cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_ZOOM, NUM_ZOOM_STEPS - 1); 930f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t maxDigitalZoom = 9323cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_SCALER_AVAILABLE_MAX_ZOOM, 1, 1); 9333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!maxDigitalZoom.count) return NO_INIT; 934f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 935f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala { 936f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala String8 zoomRatios; 937f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoom = 1.f; 938f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala float zoomIncrement = (maxDigitalZoom.data.f[0] - zoom) / 9396db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala (NUM_ZOOM_STEPS-1); 940f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala bool addComma = false; 9416db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala for (size_t i=0; i < NUM_ZOOM_STEPS; i++) { 942f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (addComma) zoomRatios += ","; 943f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala addComma = true; 944f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoomRatios += String8::format("%d", static_cast<int>(zoom * 100)); 945f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala zoom += zoomIncrement; 946f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 9473cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM_RATIOS, zoomRatios); 948f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 949f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9503cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_ZOOM_SUPPORTED, 9513cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 9523cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_SMOOTH_ZOOM_SUPPORTED, 9533cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 954f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9553cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_FOCUS_DISTANCES, 956f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala "Infinity,Infinity,Infinity"); 957f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9583cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t maxFacesDetected = 9593cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_STATS_MAX_FACE_COUNT, 1, 1); 9603cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_HW, 961f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala maxFacesDetected.data.i32[0]); 9623cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_MAX_NUM_DETECTED_FACES_SW, 963f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 0); 964f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9653cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_FRAME_FORMAT, 9663cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala formatEnumToString(HAL_PIXEL_FORMAT_YCrCb_420_SP)); 967f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9683cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_RECORDING_HINT, 9693cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 970f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9713cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_SNAPSHOT_SUPPORTED, 9723cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 973f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9743cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION, 9753cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 9763cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 9773cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala camera_metadata_entry_t availableVideoStabilizationModes = 9783cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala staticInfo(ANDROID_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES); 9793cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala if (!availableVideoStabilizationModes.count) return NO_INIT; 980f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 981f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala if (availableVideoStabilizationModes.count > 1) { 9823cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 9833cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::TRUE); 984f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } else { 9853cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala params.set(CameraParameters::KEY_VIDEO_STABILIZATION_SUPPORTED, 9863cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala CameraParameters::FALSE); 987f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala } 988f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala 9893cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala mParamsFlattened = params.flatten(); 9903cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala 991f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala return OK; 992f69c70ded4316ea3ee504ac779bd024433ed4ef7Eino-Ville Talvala} 99361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala 9946db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvalastatus_t Camera2Client::updatePreviewRequest() { 995a189097d0c96fac9afa86e644312ffbb0027b124Eino-Ville Talvala ATRACE_CALL(); 9966db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala status_t res; 9976db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (mPreviewRequest == NULL) { 9986db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala res = mDevice->createDefaultRequest(CAMERA2_TEMPLATE_PREVIEW, 9996db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala &mPreviewRequest); 10006db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala if (res != OK) { 10016db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala ALOGE("%s: Camera %d: Unable to create default preview request: " 10026db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala "%s (%d)", __FUNCTION__, mCameraId, strerror(-res), res); 10036db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return res; 10046db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 10056db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala } 10063cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala // TODO: Adjust for params changes 10076db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala return OK; 10086db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala} 10096db981c45a964f0d9df4c3451f064dff7954d78eEino-Ville Talvala 10103cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvalaconst char* Camera2Client::formatEnumToString(int format) { 10113cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala const char *fmt; 10123cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala switch(format) { 10133cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_SP: // NV16 10143cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV422SP; 10153cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 10163cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCrCb_420_SP: // NV21 10173cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV420SP; 10183cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 10193cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YCbCr_422_I: // YUY2 10203cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV422I; 10213cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 10223cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_YV12: // YV12 10233cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_YUV420P; 10243cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 10253cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGB_565: // RGB565 10263cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_RGB565; 10273cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 10283cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_RGBA_8888: // RGBA8888 10293cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_RGBA8888; 10303cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 10313cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala case HAL_PIXEL_FORMAT_RAW_SENSOR: 10323cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGW("Raw sensor preview format requested."); 10333cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = CameraParameters::PIXEL_FORMAT_BAYER_RGGB; 10343cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 10353cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala default: 10363cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala ALOGE("%s: Unknown preview format: %x", 10373cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala __FUNCTION__, format); 10383cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala fmt = NULL; 10393cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala break; 10403cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala } 10413cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala return fmt; 10423cca136b73b0f4d058019230eb2070cc23e2bbb0Eino-Ville Talvala} 104361ab9f93315ea817cd1ac110e2a95da4dab6b4d1Eino-Ville Talvala} // namespace android 1044