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