1c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin/*
2c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin**
3c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** Copyright 2008, The Android Open Source Project
4c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** Copyright 2012, Samsung Electronics Co. LTD
5c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin**
6c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** Licensed under the Apache License, Version 2.0 (the "License");
7c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** you may not use this file except in compliance with the License.
8c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** You may obtain a copy of the License at
9c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin**
10c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin**     http://www.apache.org/licenses/LICENSE-2.0
11c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin**
12c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** Unless required by applicable law or agreed to in writing, software
13c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** distributed under the License is distributed on an "AS IS" BASIS,
14c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** See the License for the specific language governing permissions and
16c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** limitations under the License.
17c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin*/
18c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
19c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin/*!
20c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * \file      MetadataConverter.cpp
21c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * \brief     source file for Metadata converter ( for camera hal2 implementation )
22c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * \author    Sungjoong Kang(sj3.kang@samsung.com)
23c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * \date      2012/05/31
24c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin *
25c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * <b>Revision History: </b>
26c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * - 2012/05/31 : Sungjoong Kang(sj3.kang@samsung.com) \n
27c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin *   Initial Release
28c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin */
29c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
30ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang//#define LOG_NDEBUG 0
31c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define LOG_TAG "MetadataConverter"
32c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include <utils/Log.h>
33c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
34c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "MetadataConverter.h"
35e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang#include "exynos_format.h"
36c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
37c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinnamespace android {
38c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
39c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
40c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung ShinMetadataConverter::MetadataConverter()
41c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin{
42c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    return;
43c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}
44c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
45c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
46c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung ShinMetadataConverter::~MetadataConverter()
47c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin{
48ed4ad5fedd954a140d28263a131e066fcea66774Sungjoong Kang    ALOGV("DEBUG(%s)destroy!!:", __FUNCTION__);
49c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    return;
50c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}
51c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
52c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinstatus_t MetadataConverter::CheckEntryTypeMismatch(camera_metadata_entry_t * entry,
53c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    uint8_t type)
54c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin{
55c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    if (!(entry->type==type))
56c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    {
57c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        ALOGV("DEBUG(%s):Metadata Missmatch tag(%s) type (%d) count(%d)",
5813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            __FUNCTION__, get_camera_metadata_tag_name(entry->tag), entry->type, entry->count);
59c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        return BAD_VALUE;
60c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    }
61c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    return NO_ERROR;
62c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}
63c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
64c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinstatus_t MetadataConverter::CheckEntryTypeMismatch(camera_metadata_entry_t * entry,
65c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    uint8_t type, size_t count)
66c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin{
67c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    if (!((entry->type==type)&&(entry->count==count)))
68c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    {
69c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        ALOGV("DEBUG(%s):Metadata Missmatch tag(%s) type (%d) count(%d)",
7013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang            __FUNCTION__, get_camera_metadata_tag_name(entry->tag), entry->type, entry->count);
71c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        return BAD_VALUE;
72c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    }
73c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    return NO_ERROR;
74c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}
75c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
76be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kangstatus_t MetadataConverter::ToInternalShot(camera_metadata_t * request, struct camera2_shot_ext * dst_ext)
77c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin{
78c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    uint32_t    num_entry = 0;
79c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    uint32_t    index = 0;
80c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    uint32_t    i = 0;
8107ed03595bbba4e9ee5f8c10fa6637e2dc9d0569Sungjoong Kang    uint32_t    cnt = 0;
82c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    camera_metadata_entry_t curr_entry;
83be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang    struct camera2_shot * dst = NULL;
84c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
85be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang    if (request == NULL || dst_ext == NULL)
86c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        return BAD_VALUE;
87c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
88b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    memset((void*)dst_ext, 0, sizeof(struct camera2_shot_ext));
89b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    dst = &dst_ext->shot;
90be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang
91b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    dst->magicNumber = 0x23456789;
922bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    dst->ctl.aa.aeTargetFpsRange[0] = 15;
932bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    dst->ctl.aa.aeTargetFpsRange[1] = 30;
942bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    dst->ctl.aa.aeExpCompensation = 5;
952bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
9607ed03595bbba4e9ee5f8c10fa6637e2dc9d0569Sungjoong Kang    num_entry = (uint32_t)get_camera_metadata_entry_count(request);
97c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    for (index = 0 ; index < num_entry ; index++) {
98c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
99c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        if (get_camera_metadata_entry(request, index, &curr_entry)==0) {
100c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            switch (curr_entry.tag) {
101c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
102c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_LENS_FOCUS_DISTANCE:
103c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 1))
104c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
105c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.lens.focusDistance = curr_entry.data.f[0];
106c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
107c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
108c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_LENS_APERTURE:
109c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 1))
110c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
111c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.lens.aperture = curr_entry.data.f[0];
112c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
113c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
114c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_LENS_FOCAL_LENGTH:
115c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 1))
116c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
117c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.lens.focalLength = curr_entry.data.f[0];
118c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
119c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
120c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_LENS_FILTER_DENSITY:
121c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_FLOAT, 1))
122c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
123c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.lens.filterDensity = curr_entry.data.f[0];
124c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
125c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
126c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_LENS_OPTICAL_STABILIZATION_MODE:
127c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
128c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
129c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.lens.opticalStabilizationMode =
130be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang                    (enum optical_stabilization_mode)curr_entry.data.u8[0];
131c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
132c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
133c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
134a8be0011f1bdcee9d635f1ca9e9c9a01ea856c0eSungjoong Kang            case ANDROID_SENSOR_TIMESTAMP:
135a8be0011f1bdcee9d635f1ca9e9c9a01ea856c0eSungjoong Kang                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT64, 1))
136a8be0011f1bdcee9d635f1ca9e9c9a01ea856c0eSungjoong Kang                    break;
137a8be0011f1bdcee9d635f1ca9e9c9a01ea856c0eSungjoong Kang                dst->dm.sensor.timeStamp = curr_entry.data.i64[0];
138a8be0011f1bdcee9d635f1ca9e9c9a01ea856c0eSungjoong Kang                break;
139c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
140c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
14169d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang            case ANDROID_SENSOR_SENSITIVITY:
14269d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
14369d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang                    break;
14469d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang                dst->dm.aa.isoValue = curr_entry.data.i32[0];
14569d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang                break;
14669d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang
14769d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang            case ANDROID_SENSOR_EXPOSURE_TIME:
14869d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT64, 1))
14969d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang                    break;
15069d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang                dst->dm.sensor.exposureTime = curr_entry.data.i64[0];
15169d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang                break;
15269d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang
15369d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang
154c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_FLASH_MODE:
155c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
156c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
15734d2b94a1d314524aa47d1c9071d9b5027332d65Sungjoong Kang                dst->ctl.flash.flashMode = (enum flash_mode)(curr_entry.data.u8[0] + 1);
158c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
159c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
160c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_FLASH_FIRING_POWER:
161c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
162c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
163c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.flash.firingPower = curr_entry.data.u8[0];
164c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
165c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
166c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_FLASH_FIRING_TIME:
167c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT64, 1))
168c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
169c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.flash.firingTime = curr_entry.data.i64[0];
170c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
171c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
172c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
173c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
174e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang            case ANDROID_SCALER_CROP_REGION:
175a40ca07e12bb91f76cc5bb0ff6a723ea7b724eb8Igor Murashkin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 4))
176e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang                    break;
177a40ca07e12bb91f76cc5bb0ff6a723ea7b724eb8Igor Murashkin                for (i=0 ; i<3; i++)
178e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang                    dst->ctl.scaler.cropRegion[i] = ALIGN(curr_entry.data.i32[i], 2);
179e4657e32d8ce4a88f2c15de1de60e27f3d1778abSungjoong Kang                break;
180c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
181c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
182c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_JPEG_QUALITY:
183c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
184c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
185c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.jpeg.quality= curr_entry.data.i32[0];
186c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
187c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
188c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_JPEG_THUMBNAIL_SIZE:
189c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 2))
190c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
191c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                for (i=0 ; i<curr_entry.count ; i++)
192c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    dst->ctl.jpeg.thumbnailSize[i] = curr_entry.data.i32[i];
193c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
194c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
195c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_JPEG_THUMBNAIL_QUALITY:
196c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
197c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
198c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.jpeg.thumbnailQuality= curr_entry.data.i32[0];
199c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
200c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
201c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_JPEG_GPS_COORDINATES:
202b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_DOUBLE, 3))
203c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
204c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                for (i=0 ; i<curr_entry.count ; i++)
205c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    dst->ctl.jpeg.gpsCoordinates[i] = curr_entry.data.d[i];
206c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
207c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
208c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_JPEG_GPS_PROCESSING_METHOD:
20907ed03595bbba4e9ee5f8c10fa6637e2dc9d0569Sungjoong Kang                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE))
210c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
21107ed03595bbba4e9ee5f8c10fa6637e2dc9d0569Sungjoong Kang                if (curr_entry.count > 32)
21207ed03595bbba4e9ee5f8c10fa6637e2dc9d0569Sungjoong Kang                    cnt = 32;
21307ed03595bbba4e9ee5f8c10fa6637e2dc9d0569Sungjoong Kang                else
21407ed03595bbba4e9ee5f8c10fa6637e2dc9d0569Sungjoong Kang                    cnt = curr_entry.count;
21507ed03595bbba4e9ee5f8c10fa6637e2dc9d0569Sungjoong Kang                for (i = 0 ; i < cnt ; i++)
216b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang                    dst_ext->gpsProcessingMethod[i] = curr_entry.data.u8[i];
217c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
218c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
219c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_JPEG_GPS_TIMESTAMP:
220c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT64, 1))
221c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
222c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.jpeg.gpsTimestamp = curr_entry.data.i64[0];
223c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
224c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
225c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_JPEG_ORIENTATION:
226c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
227c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
228c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.jpeg.orientation = curr_entry.data.i32[0];
229c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
230c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
231c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
232c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
233fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin            case ANDROID_STATISTICS_FACE_DETECT_MODE:
234c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
235c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
23615fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang                dst->ctl.stats.faceDetectMode = (enum facedetect_mode)(curr_entry.data.u8[0] + 1);
237c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
238c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
239c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_CONTROL_CAPTURE_INTENT:
240c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
241c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
242be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang                dst->ctl.aa.captureIntent = (enum aa_capture_intent)curr_entry.data.u8[0];
24313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                break;
244c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
245c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_CONTROL_MODE:
246c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
247c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
24848728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang                dst->ctl.aa.mode = (enum aa_mode)(curr_entry.data.u8[0] + 1);
249c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
250c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
251c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
252c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_CONTROL_VIDEO_STABILIZATION_MODE:
253c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
254c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
255be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang                dst->ctl.aa.videoStabilizationMode = curr_entry.data.u8[0];
256c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
257c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
258c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_CONTROL_AE_MODE:
259c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
260c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
26153f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                dst->ctl.aa.aeMode = (enum aa_aemode)(curr_entry.data.u8[0] + 2);
26253f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                // skip locked mode
26353f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                if (dst->ctl.aa.aeMode == AA_AEMODE_LOCKED)
26453f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                    dst->ctl.aa.aeMode = AA_AEMODE_OFF;
2652bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang                ALOGV("DEBUG(%s): ANDROID_CONTROL_AE_MODE (%d)",  __FUNCTION__, dst->ctl.aa.aeMode);
266c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
267c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
26853f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo            case ANDROID_CONTROL_AE_LOCK:
26953f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
27053f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                    break;
27153f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                dst_ext->ae_lock = (enum ae_lockmode)(curr_entry.data.u8[0]);
27253f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                break;
273c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
274fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin            case ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION:
275c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
276c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
2772bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang                dst->ctl.aa.aeExpCompensation = curr_entry.data.i32[0] + 5;
278c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
279c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
280c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_CONTROL_AWB_MODE:
281c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
282c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
28353f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                dst->ctl.aa.awbMode = (enum aa_awbmode)(curr_entry.data.u8[0] + 2);
28453f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                // skip locked mode
28553f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                if (dst->ctl.aa.awbMode == AA_AWBMODE_LOCKED)
28653f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                    dst->ctl.aa.awbMode = AA_AWBMODE_OFF;
28748728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang                dst_ext->awb_mode_dm = (enum aa_awbmode)(curr_entry.data.u8[0] + 2);
28853f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                break;
28953f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo
29053f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo            case ANDROID_CONTROL_AWB_LOCK:
29153f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
29253f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                    break;
29353f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo                dst_ext->awb_lock = (enum awb_lockmode)(curr_entry.data.u8[0]);
294c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
295c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
296c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_CONTROL_AF_MODE:
297c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
298c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
2990f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang                dst->ctl.aa.afMode = (enum aa_afmode)(curr_entry.data.u8[0] + 1);
300fdbaf5d207ecca09ee1815dcb82b220d2b38ae53Younghwan Joo                if (dst->ctl.aa.afMode == AA_AFMODE_OFF)
301fdbaf5d207ecca09ee1815dcb82b220d2b38ae53Younghwan Joo                    dst->ctl.aa.afMode = AA_AFMODE_MANUAL;
302c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
303c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
304c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_CONTROL_AF_REGIONS:
305c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 5))
306c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
307c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                for (i=0 ; i<curr_entry.count ; i++)
308c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    dst->ctl.aa.afRegions[i] = curr_entry.data.i32[i];
309c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
310c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
311ca31bf2185d8b0550733c1b60278cda076a17a77Sungjoong Kang            case ANDROID_CONTROL_AE_REGIONS:
312ca31bf2185d8b0550733c1b60278cda076a17a77Sungjoong Kang                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 5))
313ca31bf2185d8b0550733c1b60278cda076a17a77Sungjoong Kang                    break;
314ca31bf2185d8b0550733c1b60278cda076a17a77Sungjoong Kang                for (i=0 ; i<curr_entry.count ; i++)
315ca31bf2185d8b0550733c1b60278cda076a17a77Sungjoong Kang                    dst->ctl.aa.aeRegions[i] = curr_entry.data.i32[i];
316ca31bf2185d8b0550733c1b60278cda076a17a77Sungjoong Kang                break;
317c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
318c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
319c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_REQUEST_ID:
320c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
321c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
322c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.request.id = curr_entry.data.i32[0];
32313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                ALOGV("DEBUG(%s): ANDROID_REQUEST_ID (%d)",  __FUNCTION__,  dst->ctl.request.id);
324c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
325c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
326c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_REQUEST_METADATA_MODE:
327c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
328c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
329be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang                dst->ctl.request.metadataMode = (enum metadata_mode)curr_entry.data.u8[0];
33013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                ALOGV("DEBUG(%s): ANDROID_REQUEST_METADATA_MODE (%d)",  __FUNCTION__, (int)( dst->ctl.request.metadataMode));
331c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
332c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
333c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_REQUEST_OUTPUT_STREAMS:
3340c5aeec9d23b62d45c62e736341ede29b53b95d4Zhijun He                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32))
335c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
336ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang
3375506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang                dst->ctl.request.outputStreams[0] = 0;
33813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                for (i=0 ; i<curr_entry.count ; i++) {
3390c5aeec9d23b62d45c62e736341ede29b53b95d4Zhijun He                    ALOGV("DEBUG(%s): OUTPUT_STREAM[%d] = %d ",  __FUNCTION__, i, curr_entry.data.i32[i]);
3400c5aeec9d23b62d45c62e736341ede29b53b95d4Zhijun He                    dst->ctl.request.outputStreams[0] |= (1 << curr_entry.data.i32[i]);
34113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                }
342c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
343c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
3445506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang            case ANDROID_REQUEST_INPUT_STREAMS:
3450c5aeec9d23b62d45c62e736341ede29b53b95d4Zhijun He                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32))
3465506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang                    break;
3475506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang
3485506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang                for (i=0 ; i<curr_entry.count ; i++) {
3490c5aeec9d23b62d45c62e736341ede29b53b95d4Zhijun He                    dst_ext->reprocessInput = curr_entry.data.i32[0];
3505506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang                    ALOGV("DEBUG(%s): ANDROID_REQUEST_INPUT_STREAMS[%d] = %d ",  __FUNCTION__, i, dst_ext->reprocessInput);
3515506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang                }
3525506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang                break;
3535506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang
3545506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang            case ANDROID_REQUEST_TYPE:
3555506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
3565506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang                    break;
3575506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang                dst_ext->isReprocessing = curr_entry.data.u8[0];
3585506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang                ALOGV("DEBUG(%s): ANDROID_REQUEST_TYPE (%d)",  __FUNCTION__, dst_ext->isReprocessing);
3595506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang                break;
3605506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang
361c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            case ANDROID_REQUEST_FRAME_COUNT:
362c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 1))
363c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                    break;
364c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                dst->ctl.request.frameCount = curr_entry.data.i32[0];
36513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang                ALOGV("DEBUG(%s): ANDROID_REQUEST_FRAME_COUNT (%d)",  __FUNCTION__, dst->ctl.request.frameCount);
366c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
367c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
3682bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang            case ANDROID_CONTROL_SCENE_MODE:
3692bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_BYTE, 1))
3702bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang                    break;
3712bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang                dst->ctl.aa.sceneMode = (enum aa_scene_mode)(curr_entry.data.u8[0] + 1);
37283bc29031b8fbc600f8907128e5ea626194ab045Sungjoong Kang                break;
37383bc29031b8fbc600f8907128e5ea626194ab045Sungjoong Kang
37483bc29031b8fbc600f8907128e5ea626194ab045Sungjoong Kang            case ANDROID_CONTROL_AE_TARGET_FPS_RANGE:
37583bc29031b8fbc600f8907128e5ea626194ab045Sungjoong Kang                if (NO_ERROR != CheckEntryTypeMismatch(&curr_entry, TYPE_INT32, 2))
37683bc29031b8fbc600f8907128e5ea626194ab045Sungjoong Kang                    break;
37783bc29031b8fbc600f8907128e5ea626194ab045Sungjoong Kang                for (i=0 ; i<curr_entry.count ; i++)
37883bc29031b8fbc600f8907128e5ea626194ab045Sungjoong Kang                    dst->ctl.aa.aeTargetFpsRange[i] = curr_entry.data.i32[i];
3792bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang                break;
3802bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
381c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            default:
382ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang                ALOGV("DEBUG(%s):Bad Metadata tag (%d)",  __FUNCTION__, curr_entry.tag);
383c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                break;
384c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin            }
385c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        }
386c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    }
38748728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang    if (dst->ctl.aa.mode != AA_CONTROL_USE_SCENE_MODE)
3882bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.sceneMode = AA_SCENE_MODE_UNSUPPORTED;
3892bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    ApplySceneModeParameters(request, dst_ext);
390c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    return NO_ERROR;
391c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}
392c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
3932bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kangstatus_t MetadataConverter::ApplySceneModeParameters(camera_metadata_t * request, struct camera2_shot_ext * dst_ext)
3942bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang{
3952bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    camera_metadata_entry_t curr_entry;
3962bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    struct camera2_shot * dst = NULL;
397c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
3982bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    ALOGV("DEBUG(%s):", __FUNCTION__);
3992bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4002bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    dst = &(dst_ext->shot);
4012bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4022bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    switch (dst->ctl.aa.sceneMode) {
4032bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4042bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    case AA_SCENE_MODE_ACTION:
4052bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.mode = AA_CONTROL_USE_SCENE_MODE;
4062bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        if (dst->ctl.aa.aeMode != AA_AEMODE_LOCKED)
4072bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang            dst->ctl.aa.aeMode = AA_AEMODE_ON;
4082bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.awbMode = AA_AWBMODE_WB_AUTO;
40948728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang        dst_ext->awb_mode_dm = AA_AWBMODE_WB_AUTO;
4102bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.isoMode = AA_ISOMODE_AUTO;
4112bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.isoValue = 0;
4122bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.aeTargetFpsRange[0] = 30;
4132bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.aeTargetFpsRange[1] = 30;
4142bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4152bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.noise.mode = PROCESSING_MODE_FAST;
4162bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.noise.strength = 0;
4172bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.edge.mode = PROCESSING_MODE_FAST;
4182bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.edge.strength = 0;
4192bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4202bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.color.saturation = 3; // means '0'
4212bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        break;
4222bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4232bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    case AA_SCENE_MODE_PARTY:
4242bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.mode = AA_CONTROL_USE_SCENE_MODE;
4252bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        if (dst->ctl.aa.aeMode != AA_AEMODE_LOCKED)
4262bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang            dst->ctl.aa.aeMode = AA_AEMODE_ON;
4272bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.awbMode = AA_AWBMODE_WB_AUTO;
42848728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang        dst_ext->awb_mode_dm = AA_AWBMODE_WB_AUTO;
4292bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.isoMode = AA_ISOMODE_MANUAL;
4302bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.isoValue = 200;
4312bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.aeTargetFpsRange[0] = 15;
4322bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.aeTargetFpsRange[1] = 30;
4332bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4342bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.noise.mode = PROCESSING_MODE_FAST;
4352bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.noise.strength = 0;
4362bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.edge.mode = PROCESSING_MODE_FAST;
4372bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.edge.strength = 0;
4382bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4392bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.color.saturation = 4; // means '+1'
4402bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        break;
4412bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4422bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    case AA_SCENE_MODE_SUNSET:
4432bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.mode = AA_CONTROL_USE_SCENE_MODE;
4442bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        if (dst->ctl.aa.aeMode != AA_AEMODE_LOCKED)
4452bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang            dst->ctl.aa.aeMode = AA_AEMODE_ON;
4462bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.awbMode = AA_AWBMODE_WB_DAYLIGHT;
44748728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang        dst_ext->awb_mode_dm = AA_AWBMODE_WB_DAYLIGHT;
4482bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.isoMode = AA_ISOMODE_AUTO;
4492bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.isoValue = 0;
4502bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.aeTargetFpsRange[0] = 15;
4512bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.aeTargetFpsRange[1] = 30;
4522bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4532bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.noise.mode = PROCESSING_MODE_FAST;
4542bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.noise.strength = 0;
4552bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.edge.mode = PROCESSING_MODE_FAST;
4562bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.edge.strength = 0;
4572bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4582bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.color.saturation = 3; // means '0'
4592bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        break;
4602bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4612bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    case AA_SCENE_MODE_NIGHT:
4622bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.mode = AA_CONTROL_USE_SCENE_MODE;
463a15b4e3ffb3e1822af22ccbfab876c3b0e2dbf08Sungjoong Kang        dst->ctl.aa.aeMode = AA_AEMODE_ON; // AE_LOCK is prohibited
4642bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.awbMode = AA_AWBMODE_WB_AUTO;
46548728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang        dst_ext->awb_mode_dm = AA_AWBMODE_WB_AUTO;
4662bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.isoMode = AA_ISOMODE_AUTO;
4672bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.isoValue = 0;
468a15b4e3ffb3e1822af22ccbfab876c3b0e2dbf08Sungjoong Kang        dst->ctl.aa.aeTargetFpsRange[0] = 8;
4692bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.aeTargetFpsRange[1] = 30;
4702bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4712bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.noise.mode = PROCESSING_MODE_FAST;
4722bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.noise.strength = 0;
4732bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.edge.mode = PROCESSING_MODE_FAST;
4742bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.edge.strength = 0;
4752bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
4762bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.color.saturation = 3; // means '0'
4772bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        break;
4782bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
479275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo    case AA_SCENE_MODE_FACE_PRIORITY:
480275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo        dst->ctl.aa.mode = AA_CONTROL_AUTO;
481275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo        if ((dst->ctl.aa.aeMode != AA_AEMODE_LOCKED) && (dst->ctl.aa.aeMode < AA_AEMODE_ON_AUTO_FLASH))
482275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo            dst->ctl.aa.aeMode = AA_AEMODE_ON;
483275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo        dst->ctl.aa.sceneMode = AA_SCENE_MODE_FACE_PRIORITY;
484275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo        dst->ctl.aa.isoMode = AA_ISOMODE_AUTO;
485275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo        dst->ctl.aa.isoValue = 0;
486275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo        dst->ctl.noise.mode = PROCESSING_MODE_OFF;
487275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo        dst->ctl.noise.strength = 0;
488275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo        dst->ctl.edge.mode = PROCESSING_MODE_OFF;
489275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo        dst->ctl.edge.strength = 0;
490275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo        dst->ctl.color.saturation = 3; // means '0'
491275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo        break;
492275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo
4932bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    default:
4942bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.mode = AA_CONTROL_AUTO;
4959a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo        if ((dst->ctl.aa.aeMode != AA_AEMODE_LOCKED) && (dst->ctl.aa.aeMode < AA_AEMODE_ON_AUTO_FLASH))
4962bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang            dst->ctl.aa.aeMode = AA_AEMODE_ON;
4972bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.sceneMode = AA_SCENE_MODE_UNSUPPORTED;
4982bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.isoMode = AA_ISOMODE_AUTO;
4992bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.aa.isoValue = 0;
5002bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.noise.mode = PROCESSING_MODE_OFF;
5012bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.noise.strength = 0;
5022bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.edge.mode = PROCESSING_MODE_OFF;
5032bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.edge.strength = 0;
5042bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        dst->ctl.color.saturation = 3; // means '0'
5052bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang        break;
5062bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    }
5072bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang
5082bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang    return NO_ERROR;
5092bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang}
510c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
511c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
512be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kangstatus_t MetadataConverter::ToDynamicMetadata(struct camera2_shot_ext * metadata_ext, camera_metadata_t * dst)
513c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin{
514c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    status_t    res;
515b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    struct camera2_shot * metadata = &metadata_ext->shot;
516be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang    uint8_t  byteData;
517be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang    uint32_t intData;
518c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
519c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_ID,
520c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                &(metadata->ctl.request.id), 1))
521c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        return NO_MEMORY;
522c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
523c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_METADATA_MODE,
524c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                &(metadata->ctl.request.metadataMode), 1))
525c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        return NO_MEMORY;
526c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
527c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    if (0 != add_camera_metadata_entry(dst, ANDROID_REQUEST_FRAME_COUNT,
528c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin                &(metadata->ctl.request.frameCount), 1))
529c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        return NO_MEMORY;
530c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
531b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_TIMESTAMP,
532b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang                &metadata->dm.sensor.timeStamp, 1))
533b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang        return NO_MEMORY;
534b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang
535b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_EXPOSURE_TIME,
536b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang                &metadata->dm.sensor.exposureTime, 1))
537b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang        return NO_MEMORY;
538b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang
539b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_LENS_APERTURE,
540b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang                &metadata->dm.lens.aperture, 1))
541b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang        return NO_MEMORY;
542b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang
543b8146879a137e53742fb20c2ac3cbb6bd8d3feb3Sungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_TARGET_FPS_RANGE,
544b8146879a137e53742fb20c2ac3cbb6bd8d3feb3Sungjoong Kang                &(metadata->ctl.aa.aeTargetFpsRange), 2))
545b8146879a137e53742fb20c2ac3cbb6bd8d3feb3Sungjoong Kang        return NO_MEMORY;
546b8146879a137e53742fb20c2ac3cbb6bd8d3feb3Sungjoong Kang
547b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    ALOGV("(%s): ID(%d) METAMODE(%d) FrameCnt(%d) Timestamp(%lld) exposure(%lld) aper(%f)", __FUNCTION__,
548b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang       metadata->ctl.request.id, metadata->ctl.request.metadataMode, metadata->ctl.request.frameCount,
549b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang       metadata->dm.sensor.timeStamp, metadata->dm.sensor.exposureTime, metadata->dm.lens.aperture);
550b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang
551b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang
55248728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang    byteData = metadata_ext->awb_mode_dm- 2;
553b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AWB_MODE,
554b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang                &byteData, 1))
555b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang        return NO_MEMORY;
556b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang
557b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    byteData = metadata->dm.aa.aeMode - 1;
558b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_MODE,
559b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang                &byteData, 1))
560b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang        return NO_MEMORY;
561b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang
56269d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang    byteData = metadata->ctl.aa.afMode - 1;
56348728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AF_MODE,
56448728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang                &byteData, 1))
56548728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang        return NO_MEMORY;
56648728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang
567b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    byteData = metadata->ctl.aa.sceneMode - 1;
568b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_SCENE_MODE,
569b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang                &byteData, 1))
570b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang        return NO_MEMORY;
571b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang
5728b5b8078c3a878793ef03979c6f7eceea894bf62Hyeonmyeong Choi    intData = metadata->ctl.aa.aeExpCompensation - 5;
573fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin    if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION,
574b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang                &intData, 1))
575b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang        return NO_MEMORY;
576b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang
577fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang    byteData = metadata->dm.stats.faceDetectMode - 1;
578fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin    if (0 != add_camera_metadata_entry(dst, ANDROID_STATISTICS_FACE_DETECT_MODE,
57915fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang                &byteData, 1))
58015fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang        return NO_MEMORY;
581b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang
582f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo    int maxFacecount = CAMERA2_MAX_FACES;
583fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin    if (0 != add_camera_metadata_entry(dst, ANDROID_STATISTICS_INFO_MAX_FACE_COUNT,
584fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang                &maxFacecount, 1))
585fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang        return NO_MEMORY;
586fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang
587f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo    int tempFaceCount = 0;
588f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo    for (int i = 0; i < CAMERA2_MAX_FACES; i++) {
5891aebf6df3e4ec3b3487da96797a742dc14bf355aYounghwan Joo        if (metadata->dm.stats.faceIds[i] > 0) {
590f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo            mataFaceIds[tempFaceCount] = metadata->dm.stats.faceIds[i];
5916a87e47a1b93226f778d859a37b0e4655785a4a8Younghwan Joo            // clipping fd score because the max face score of android is 100
5926a87e47a1b93226f778d859a37b0e4655785a4a8Younghwan Joo            if (metadata->dm.stats.faceScores[i] > 100)
5936a87e47a1b93226f778d859a37b0e4655785a4a8Younghwan Joo                metaFaceScores[tempFaceCount] = 100;
5946a87e47a1b93226f778d859a37b0e4655785a4a8Younghwan Joo            else
5956a87e47a1b93226f778d859a37b0e4655785a4a8Younghwan Joo                metaFaceScores[tempFaceCount] = metadata->dm.stats.faceScores[i];
596fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang
597f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo            memcpy(&mataFaceLandmarks[tempFaceCount][0], &metadata->dm.stats.faceLandmarks[i][0], 6*sizeof(uint32_t));
598f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo            memcpy(&metaFaceRectangles[tempFaceCount][0], &metadata->dm.stats.faceRectangles[i][0], 4*sizeof(uint32_t));
599f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo            tempFaceCount++;
600f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo        }
601f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo    }
602fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang
603f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo    if (tempFaceCount > 0) {
604fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin        if (0 != add_camera_metadata_entry(dst, ANDROID_STATISTICS_FACE_RECTANGLES,
605f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo                    &metaFaceRectangles, 4 * tempFaceCount))
606f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo            return NO_MEMORY;
607fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang
608fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin        if (0 != add_camera_metadata_entry(dst, ANDROID_STATISTICS_FACE_LANDMARKS,
609f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo                    &mataFaceLandmarks, 6 * tempFaceCount))
610f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo            return NO_MEMORY;
611f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo
612fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin        if (0 != add_camera_metadata_entry(dst, ANDROID_STATISTICS_FACE_IDS,
613f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo                    &mataFaceIds, tempFaceCount))
614f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo            return NO_MEMORY;
615f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo
616fd1276b259b81ba698ae7ae9f641e80dc099ecdbIgor Murashkin        if (0 != add_camera_metadata_entry(dst, ANDROID_STATISTICS_FACE_SCORES,
617f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo                    &metaFaceScores, tempFaceCount))
618f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo            return NO_MEMORY;
619f3312f8b250f3d2774564123ca0d7802f5016df5Younghwan Joo    }
62048728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_SENSOR_SENSITIVITY,
62148728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang                &metadata->dm.aa.isoValue, 1))
62248728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang        return NO_MEMORY;
62348728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang
62439ed516364d4f0b2648113cb3f94533e86c2da95Eino-Ville Talvala    // Need a four-entry crop region
62539ed516364d4f0b2648113cb3f94533e86c2da95Eino-Ville Talvala    uint32_t cropRegion[4] = {
62639ed516364d4f0b2648113cb3f94533e86c2da95Eino-Ville Talvala        metadata->ctl.scaler.cropRegion[0],
62739ed516364d4f0b2648113cb3f94533e86c2da95Eino-Ville Talvala        metadata->ctl.scaler.cropRegion[1],
62839ed516364d4f0b2648113cb3f94533e86c2da95Eino-Ville Talvala        metadata->ctl.scaler.cropRegion[2],
62939ed516364d4f0b2648113cb3f94533e86c2da95Eino-Ville Talvala        0
63039ed516364d4f0b2648113cb3f94533e86c2da95Eino-Ville Talvala    };
631b8d41ae295226cc4324d239dae17b219706b76dfSungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_SCALER_CROP_REGION,
63239ed516364d4f0b2648113cb3f94533e86c2da95Eino-Ville Talvala                cropRegion, 4))
633b8d41ae295226cc4324d239dae17b219706b76dfSungjoong Kang        return NO_MEMORY;
634b8d41ae295226cc4324d239dae17b219706b76dfSungjoong Kang
63514dce02c7c8fdc2a9f2a83ed285ea9a79c75089bSungjoong Kang    byteData = metadata->dm.aa.aeState - 1;
6366e33cc8b38f89781ee832b02025dc242a9ff86c7Younghwan Joo    if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AE_STATE,
63714dce02c7c8fdc2a9f2a83ed285ea9a79c75089bSungjoong Kang                &byteData, 1))
6386e33cc8b38f89781ee832b02025dc242a9ff86c7Younghwan Joo        return NO_MEMORY;
6396e33cc8b38f89781ee832b02025dc242a9ff86c7Younghwan Joo
6406e33cc8b38f89781ee832b02025dc242a9ff86c7Younghwan Joo    if (0 != add_camera_metadata_entry(dst, ANDROID_CONTROL_AWB_STATE,
6416e33cc8b38f89781ee832b02025dc242a9ff86c7Younghwan Joo                &(metadata->dm.aa.awbState), 1))
6426e33cc8b38f89781ee832b02025dc242a9ff86c7Younghwan Joo        return NO_MEMORY;
643fd2d78a2d270f85a71578423e1f2b4f99fd99216Sungjoong Kang
64469d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang
64569d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_ORIENTATION,
64669d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang                &metadata->ctl.jpeg.orientation, 1))
64769d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang        return NO_MEMORY;
64869d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang
64969d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_QUALITY,
65069d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang                &metadata->ctl.jpeg.quality, 1))
65169d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang        return NO_MEMORY;
65269d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang
65369d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_THUMBNAIL_SIZE,
65469d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang                &metadata->ctl.jpeg.thumbnailSize, 2))
65569d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang        return NO_MEMORY;
65669d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang
65769d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_THUMBNAIL_QUALITY,
65869d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang                &metadata->ctl.jpeg.thumbnailQuality, 1))
65969d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang        return NO_MEMORY;
66069d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang
66169d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang
66248728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_GPS_COORDINATES,
66348728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang                &(metadata->ctl.jpeg.gpsCoordinates), 3))
66448728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang        return NO_MEMORY;
66548728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang
66648728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_GPS_PROCESSING_METHOD,
66748728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang                &(metadata_ext->gpsProcessingMethod), 32))
66848728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang        return NO_MEMORY;
66948728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang
67048728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang    if (0 != add_camera_metadata_entry(dst, ANDROID_JPEG_GPS_TIMESTAMP,
67148728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang                &(metadata->ctl.jpeg.gpsTimestamp), 1))
67248728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang        return NO_MEMORY;
67348728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang    ALOGV("(%s): AWB(%d) AE(%d) SCENE(%d)  AEComp(%d) AF(%d)", __FUNCTION__,
67448728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang       metadata_ext->awb_mode_dm- 2, metadata->dm.aa.aeMode - 1, metadata->ctl.aa.sceneMode - 1,
67569d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang       metadata->ctl.aa.aeExpCompensation, metadata->ctl.aa.afMode - 1);
676b56dcc00a5e081efd036c714e0693f5e27ebc820Sungjoong Kang
677c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
678be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang    if (metadata->ctl.request.metadataMode == METADATA_MODE_NONE) {
67913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang        ALOGV("DEBUG(%s): METADATA_MODE_NONE", __FUNCTION__);
680c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin        return NO_ERROR;
681c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    }
682c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin    return NO_ERROR;
683c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
684c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
685c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}
686c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin
687c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; // namespace android
688