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 &params)
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 &params)
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 &params)
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 &params)
418586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan{
419eaa72e099921614b9f3eb94e68604889d5372229zongwave    XCAM_ASSERT (_af_handler.ptr());
420586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan    return _af_handler->update_parameters (params);
421586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan}
422586134d914f4ab75562a1d124c5ed9ac142b85c2Wind Yuan
42375564b1f2bd9b01b6b715d24963f6a723127bd03Wind Yuan};
424