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