175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan/* 275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * x3a_analyzer.cpp - 3a analyzer 375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * 475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * Copyright (c) 2014-2015 Intel Corporation 575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * 675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * Licensed under the Apache License, Version 2.0 (the "License"); 775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * you may not use this file except in compliance with the License. 875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * You may obtain a copy of the License at 975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * 1075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * http://www.apache.org/licenses/LICENSE-2.0 1175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * 1275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * Unless required by applicable law or agreed to in writing, software 1375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * distributed under the License is distributed on an "AS IS" BASIS, 1475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * See the License for the specific language governing permissions and 1675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * limitations under the License. 1775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * 1875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan * Author: Wind Yuan <feng.yuan@intel.com> 1975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan */ 2075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 2103954a3e89b2679ec78040a260cf56aa40f33faezongwave#include "xcam_analyzer.h" 2275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan#include "x3a_analyzer.h" 231d5f5ce14907c072413706b566503241e7c10f5eWind Yuan#include "x3a_stats_pool.h" 2475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 2575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuannamespace XCam { 2675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 2775564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::X3aAnalyzer (const char *name) 2803954a3e89b2679ec78040a260cf56aa40f33faezongwave : XAnalyzer (name) 2932413c82708e0fc67f08220d47d15f772766b364Wind Yuan , _brightness_level_param (0.0) 3075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan , _ae_handler (NULL) 3175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan , _awb_handler (NULL) 3275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan , _af_handler (NULL) 3375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan , _common_handler (NULL) 3475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 3575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 3675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 3775564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::~X3aAnalyzer() 3875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 3975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 4075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 4175564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanXCamReturn 4203954a3e89b2679ec78040a260cf56aa40f33faezongwaveX3aAnalyzer::create_handlers () 4375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 4475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan SmartPtr<AeHandler> ae_handler; 4575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan SmartPtr<AwbHandler> awb_handler; 4675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan SmartPtr<AfHandler> af_handler; 4775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan SmartPtr<CommonHandler> common_handler; 4875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 49813e02db8f44fd0556f735a1605ba96947f5f168Jia Meng if (_ae_handler.ptr() && _awb_handler.ptr() && 50813e02db8f44fd0556f735a1605ba96947f5f168Jia Meng _af_handler.ptr() && _common_handler.ptr()) 51813e02db8f44fd0556f735a1605ba96947f5f168Jia Meng return XCAM_RETURN_NO_ERROR; 5275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 5375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan ae_handler = create_ae_handler (); 5475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan awb_handler = create_awb_handler (); 5575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan af_handler = create_af_handler (); 5675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan common_handler = create_common_handler (); 5775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 5875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan if (!ae_handler.ptr() || !awb_handler.ptr() || !af_handler.ptr() || !common_handler.ptr()) { 5975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_LOG_WARNING ("create handlers failed"); 6075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return XCAM_RETURN_ERROR_MEM; 6175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan } 62813e02db8f44fd0556f735a1605ba96947f5f168Jia Meng 6375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan _ae_handler = ae_handler; 6475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan _awb_handler = awb_handler; 6575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan _af_handler = af_handler; 6675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan _common_handler = common_handler; 6775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 68813e02db8f44fd0556f735a1605ba96947f5f168Jia Meng return XCAM_RETURN_NO_ERROR; 69813e02db8f44fd0556f735a1605ba96947f5f168Jia Meng} 70813e02db8f44fd0556f735a1605ba96947f5f168Jia Meng 71813e02db8f44fd0556f735a1605ba96947f5f168Jia MengXCamReturn 7203954a3e89b2679ec78040a260cf56aa40f33faezongwaveX3aAnalyzer::release_handlers () 7375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 7475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan _ae_handler.release (); 7575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan _awb_handler.release (); 7675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan _af_handler.release (); 7775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan _common_handler.release (); 7875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 7975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return XCAM_RETURN_NO_ERROR; 8075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 8175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 8275564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanXCamReturn 8303954a3e89b2679ec78040a260cf56aa40f33faezongwaveX3aAnalyzer::configure () 848f94a10ebd5802b7deccf743eddf6c0f8357f1c0Jia Meng{ 8503954a3e89b2679ec78040a260cf56aa40f33faezongwave return configure_3a (); 8675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 8775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 8875564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanXCamReturn 896d144ce2e4095c39b7776f308e9dd5bb4792b1b3Wind YuanX3aAnalyzer::analyze (const SmartPtr<VideoBuffer> &buffer) 9075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 9103954a3e89b2679ec78040a260cf56aa40f33faezongwave SmartPtr<X3aStats> stats = buffer.dynamic_cast_ptr<X3aStats> (); 9275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 9303954a3e89b2679ec78040a260cf56aa40f33faezongwave return analyze_3a_statistics (stats); 9475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 9575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 9675564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanXCamReturn 97ebc2a401c89546d20699edc6b6c36b2af76c5d78Wind YuanX3aAnalyzer::push_3a_stats (const SmartPtr<X3aStats> &stats) 9875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 9903954a3e89b2679ec78040a260cf56aa40f33faezongwave return XAnalyzer::push_buffer (stats); 10075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 10175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 10203954a3e89b2679ec78040a260cf56aa40f33faezongwave 10375564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanXCamReturn 1041d5f5ce14907c072413706b566503241e7c10f5eWind YuanX3aAnalyzer::analyze_3a_statistics (SmartPtr<X3aStats> &stats) 10575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 10675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCamReturn ret = XCAM_RETURN_NO_ERROR; 10775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan X3aResultList results; 10875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 10975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan ret = pre_3a_analyze (stats); 11075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan if (ret != XCAM_RETURN_NO_ERROR) { 11175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan notify_calculation_failed( 112eaa72e099921614b9f3eb94e68604889d5372229zongwave NULL, stats->get_timestamp (), "pre 3a analyze failed"); 11375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return ret; 11475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan } 11575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 11675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan ret = _ae_handler->analyze (results); 11775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan if (ret != XCAM_RETURN_NO_ERROR) { 11875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan notify_calculation_failed( 11975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan _ae_handler.ptr(), stats->get_timestamp (), "ae calculation failed"); 12075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return ret; 12175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan } 12275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 12375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan ret = _awb_handler->analyze (results); 12475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan if (ret != XCAM_RETURN_NO_ERROR) { 12575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan notify_calculation_failed( 12675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan _awb_handler.ptr(), stats->get_timestamp (), "awb calculation failed"); 12775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return ret; 12875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan } 12975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 13075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan ret = _af_handler->analyze (results); 13175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan if (ret != XCAM_RETURN_NO_ERROR) { 13275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan notify_calculation_failed( 13375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan _af_handler.ptr(), stats->get_timestamp (), "af calculation failed"); 13475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return ret; 13575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan } 13675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 13775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan ret = _common_handler->analyze (results); 13875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan if (ret != XCAM_RETURN_NO_ERROR) { 13975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan notify_calculation_failed( 14075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan _common_handler.ptr(), stats->get_timestamp (), "3a other calculation failed"); 14175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return ret; 14275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan } 14375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 14475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan ret = post_3a_analyze (results); 14575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan if (ret != XCAM_RETURN_NO_ERROR) { 14675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan notify_calculation_failed( 14775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan NULL, stats->get_timestamp (), "3a collect results failed"); 14875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return ret; 14975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan } 15075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 15175272689618dc2872460a0b90676093b6a72b456zongwave if (!results.empty ()) { 15275272689618dc2872460a0b90676093b6a72b456zongwave set_results_timestamp(results, stats->get_timestamp ()); 15375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan notify_calculation_done (results); 15475272689618dc2872460a0b90676093b6a72b456zongwave } 15575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 15675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return ret; 15775272689618dc2872460a0b90676093b6a72b456zongwave} 15875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 15975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan/* AWB */ 16075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 16175564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_awb_mode (XCamAwbMode mode) 16275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 16375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_awb_handler.ptr()); 16475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _awb_handler->set_mode (mode); 16575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 16675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 16775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 16875564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_awb_speed (double speed) 16975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 17075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_awb_handler.ptr()); 17175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _awb_handler->set_speed (speed); 17275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 17375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 17475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 17575564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_awb_color_temperature_range (uint32_t cct_min, uint32_t cct_max) 17675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 17775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_awb_handler.ptr()); 17875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _awb_handler->set_color_temperature_range (cct_min, cct_max); 17975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 18075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 18175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 18275564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_awb_manual_gain (double gr, double r, double b, double gb) 18375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 18475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_awb_handler.ptr()); 18575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _awb_handler->set_manual_gain (gr, r, b, gb); 18675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 18775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 18875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan/* AE */ 18975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 19075564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_ae_mode (XCamAeMode mode) 19175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 19275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 19375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->set_mode (mode); 19475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 19575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 19675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 19775564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_ae_metering_mode (XCamAeMeteringMode mode) 19875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 19975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 20075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->set_metering_mode (mode); 20175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 20275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 20375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 204fa44236ccc37455d2f0c02e757e2f36eb3c801f8zongwaveX3aAnalyzer::set_ae_window (XCam3AWindow *window, uint8_t count) 20575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 20675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 207fa44236ccc37455d2f0c02e757e2f36eb3c801f8zongwave return _ae_handler->set_window (window, count); 20875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 20975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 21075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 21175564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_ae_ev_shift (double ev_shift) 21275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 21375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 21475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->set_ev_shift (ev_shift); 21575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 21675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 21775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 21875564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_ae_speed (double speed) 21975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 22075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 22175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->set_speed (speed); 22275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 22375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 22475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 22575564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_ae_flicker_mode (XCamFlickerMode flicker) 22675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 22775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 22875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->set_flicker_mode (flicker); 22975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 23075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 23175564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanXCamFlickerMode 23275564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::get_ae_flicker_mode () 23375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 23475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 23575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->get_flicker_mode (); 23675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 23775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 23875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanuint64_t 23975564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::get_ae_current_exposure_time () 24075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 24175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 24275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->get_current_exposure_time(); 24375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 24475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 24575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuandouble 24675564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::get_ae_current_analog_gain () 24775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 24875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 24975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->get_current_analog_gain (); 25075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 25175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 25275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 25375564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_ae_manual_exposure_time (int64_t time_in_us) 25475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 25575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 25675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->set_manual_exposure_time (time_in_us); 25775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 25875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 25975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 26075564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_ae_manual_analog_gain (double gain) 26175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 26275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 26375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->set_manual_analog_gain (gain); 26475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 26575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 26675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 26775564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_ae_aperture (double fn) 26875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 26975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 27075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->set_aperture (fn); 27175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 27275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 27375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 27475564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_ae_max_analog_gain (double max_gain) 27575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 27675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 27775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->set_max_analog_gain (max_gain); 27875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 27975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 28075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuandouble 28175564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::get_ae_max_analog_gain () 28275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 28375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 28475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->get_max_analog_gain(); 28575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 28675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 28775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 28875564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_ae_exposure_time_range (int64_t min_time_in_us, int64_t max_time_in_us) 28975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 29075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 29175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->set_exposure_time_range (min_time_in_us, max_time_in_us); 29275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 29375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 29475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 29575564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::get_ae_exposure_time_range (int64_t *min_time_in_us, int64_t *max_time_in_us) 29675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 29775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_ae_handler.ptr()); 29875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _ae_handler->get_exposure_time_range (min_time_in_us, max_time_in_us); 29975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 30075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 30175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan/* DVS */ 30275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 30375564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_dvs (bool enable) 30475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 30575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_common_handler.ptr()); 30675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _common_handler->set_dvs (enable); 30775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 30875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 30975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 31075564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_gbce (bool enable) 31175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 31275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_common_handler.ptr()); 31375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _common_handler->set_gbce (enable); 31475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 31575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 31675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 31775564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_night_mode (bool enable) 31875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 31975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_common_handler.ptr()); 32075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _common_handler->set_night_mode (enable); 32175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 32275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 3230cccafab34077af3976a24302ff56984926086ddJohn Yebool 3240cccafab34077af3976a24302ff56984926086ddJohn YeX3aAnalyzer::set_color_effect (XCamColorEffect type) 3250cccafab34077af3976a24302ff56984926086ddJohn Ye{ 3260cccafab34077af3976a24302ff56984926086ddJohn Ye 3270cccafab34077af3976a24302ff56984926086ddJohn Ye XCAM_ASSERT (_common_handler.ptr()); 3280cccafab34077af3976a24302ff56984926086ddJohn Ye return _common_handler->set_color_effect (type); 3290cccafab34077af3976a24302ff56984926086ddJohn Ye} 3300cccafab34077af3976a24302ff56984926086ddJohn Ye 33175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan/* Picture quality */ 33275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 33375564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_noise_reduction_level (double level) 33475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 33575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_common_handler.ptr()); 33675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _common_handler->set_noise_reduction_level (level); 33775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 33875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 33975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 34075564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_temporal_noise_reduction_level (double level) 34175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 34275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_common_handler.ptr()); 34375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _common_handler->set_temporal_noise_reduction_level (level); 34475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 34575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 34675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 34775564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_manual_brightness (double level) 34875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 34975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_common_handler.ptr()); 35075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _common_handler->set_manual_brightness (level); 35175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 35275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 35375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 35475564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_manual_contrast (double level) 35575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 35675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_common_handler.ptr()); 35775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _common_handler->set_manual_contrast (level); 35875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 35975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 36075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 36175564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_manual_hue (double level) 36275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 36375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_common_handler.ptr()); 36475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _common_handler->set_manual_hue (level); 36575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 36675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 36775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 36875564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_manual_saturation (double level) 36975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 37075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_common_handler.ptr()); 37175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _common_handler->set_manual_saturation (level); 37275564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 37375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 37475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 37575564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_manual_sharpness (double level) 37675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 37775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_common_handler.ptr()); 37875564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _common_handler->set_manual_sharpness (level); 37975564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 38075564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 38175564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuanbool 38275564b1f2bd9b01b6b715d24963f6a723127bd03Wind YuanX3aAnalyzer::set_gamma_table (double *r_table, double *g_table, double *b_table) 38375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan{ 38475564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan XCAM_ASSERT (_common_handler.ptr()); 38575564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan return _common_handler->set_gamma_table (r_table, g_table, b_table); 38675564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan} 38775564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan 388586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuanbool 389a5f121260aa863eaed25534e64771df92bde87eayaowangX3aAnalyzer::set_parameter_brightness(double level) 390a5f121260aa863eaed25534e64771df92bde87eayaowang{ 391a5f121260aa863eaed25534e64771df92bde87eayaowang _brightness_level_param = level; 39275272689618dc2872460a0b90676093b6a72b456zongwave return true; 393a5f121260aa863eaed25534e64771df92bde87eayaowang} 394a5f121260aa863eaed25534e64771df92bde87eayaowang 395a5f121260aa863eaed25534e64771df92bde87eayaowangbool 396586134d914f4ab75562a1d124c5ed9ac142b85c2Wind YuanX3aAnalyzer::update_awb_parameters (const XCamAwbParam ¶ms) 397586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan{ 398586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan XCAM_ASSERT (_awb_handler.ptr()); 399586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan return _awb_handler->update_parameters (params); 400586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan} 401586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan 402586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuanbool 403586134d914f4ab75562a1d124c5ed9ac142b85c2Wind YuanX3aAnalyzer::update_common_parameters (const XCamCommonParam ¶ms) 404586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan{ 405eaa72e099921614b9f3eb94e68604889d5372229zongwave XCAM_ASSERT (_common_handler.ptr()); 406586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan return _common_handler->update_parameters (params); 407586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan} 408586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan 409586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuanbool 410586134d914f4ab75562a1d124c5ed9ac142b85c2Wind YuanX3aAnalyzer::update_ae_parameters (const XCamAeParam ¶ms) 411586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan{ 412eaa72e099921614b9f3eb94e68604889d5372229zongwave XCAM_ASSERT (_ae_handler.ptr()); 413586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan return _ae_handler->update_parameters (params); 414586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan} 415586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan 416586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuanbool 417586134d914f4ab75562a1d124c5ed9ac142b85c2Wind YuanX3aAnalyzer::update_af_parameters (const XCamAfParam ¶ms) 418586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan{ 419eaa72e099921614b9f3eb94e68604889d5372229zongwave XCAM_ASSERT (_af_handler.ptr()); 420586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan return _af_handler->update_parameters (params); 421586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan} 422586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan 42375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan}; 424