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