19724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng/* 29724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * dynamic_analyzer.h - dynamic analyzer 39724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * 49724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * Copyright (c) 2015 Intel Corporation 59724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * 69724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * Licensed under the Apache License, Version 2.0 (the "License"); 79724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * you may not use this file except in compliance with the License. 89724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * You may obtain a copy of the License at 99724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * 109724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * http://www.apache.org/licenses/LICENSE-2.0 119724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * 129724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * Unless required by applicable law or agreed to in writing, software 139724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * distributed under the License is distributed on an "AS IS" BASIS, 149724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 159724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * See the License for the specific language governing permissions and 169724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * limitations under the License. 179724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * 189724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng * Author: Wind Yuan <feng.yuan@intel.com> 197f8d9e01842a7f87f1a816592849ba765ac065c8Wind Yuan * Jia Meng <jia.meng@intel.com> 209724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng */ 219724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng#ifndef XCAM_DYNAMIC_ANALYZER_H 229724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng#define XCAM_DYNAMIC_ANALYZER_H 239724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 249fbfce6bd98f1d790f75215932de854892a58154Wind Yuan#include <xcam_std.h> 259724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng#include <base/xcam_3a_description.h> 269fbfce6bd98f1d790f75215932de854892a58154Wind Yuan#include <x3a_analyzer.h> 279fbfce6bd98f1d790f75215932de854892a58154Wind Yuan#include <x3a_stats_pool.h> 289fbfce6bd98f1d790f75215932de854892a58154Wind Yuan#include <handler_interface.h> 299fbfce6bd98f1d790f75215932de854892a58154Wind Yuan#include <x3a_result_factory.h> 309fbfce6bd98f1d790f75215932de854892a58154Wind Yuan#include <analyzer_loader.h> 319724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 329724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengnamespace XCam { 339724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 349724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengclass DynamicAeHandler; 359724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengclass DynamicAwbHandler; 369724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengclass DynamicAfHandler; 379724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengclass DynamicCommonHandler; 389724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 399724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengclass DynamicAnalyzer 409724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng : public X3aAnalyzer 419724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng{ 429724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengpublic: 43e37a8723ccdfd02fcddceab4bbd938cb29b69f48Yinhang Liu DynamicAnalyzer (XCam3ADescription *desc, SmartPtr<AnalyzerLoader> &loader, const char *name = "DynamicAnalyzer"); 449724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng ~DynamicAnalyzer (); 459724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 469724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual XCamReturn configure_3a (); 479724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual XCamReturn analyze_ae (XCamAeParam ¶m); 489724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual XCamReturn analyze_awb (XCamAwbParam ¶m); 499724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual XCamReturn analyze_af (XCamAfParam ¶m); 509724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 519724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengprotected: 529724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual SmartPtr<AeHandler> create_ae_handler (); 539724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual SmartPtr<AwbHandler> create_awb_handler (); 549724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual SmartPtr<AfHandler> create_af_handler (); 559724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual SmartPtr<CommonHandler> create_common_handler (); 569724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual XCamReturn internal_init (uint32_t width, uint32_t height, double framerate); 579724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual XCamReturn internal_deinit (); 589724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 599724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual XCamReturn pre_3a_analyze (SmartPtr<X3aStats> &stats); 609724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual XCamReturn post_3a_analyze (X3aResultList &results); 619724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 629724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng XCamReturn create_context (); 639724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng void destroy_context (); 649724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 659724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng const XCamCommonParam get_common_params (); 669724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng SmartPtr<X3aStats> get_cur_stats () const { 679724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng return _cur_stats; 689724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng } 6938366972c4c20316c1942e2bfd0ce6fa75d7057aJia Meng XCamReturn convert_results (XCam3aResultHead *from[], uint32_t from_count, X3aResultList &to); 709724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 719724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengprivate: 729724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng XCAM_DEAD_COPY (DynamicAnalyzer); 739724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 749724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengprivate: 75e37a8723ccdfd02fcddceab4bbd938cb29b69f48Yinhang Liu XCam3ADescription *_desc; 76e37a8723ccdfd02fcddceab4bbd938cb29b69f48Yinhang Liu XCam3AContext *_context; 77e37a8723ccdfd02fcddceab4bbd938cb29b69f48Yinhang Liu SmartPtr<X3aStats> _cur_stats; 78e37a8723ccdfd02fcddceab4bbd938cb29b69f48Yinhang Liu SmartPtr<DynamicCommonHandler> _common_handler; 79e37a8723ccdfd02fcddceab4bbd938cb29b69f48Yinhang Liu SmartPtr<AnalyzerLoader> _loader; 809724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng}; 819724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 829724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengclass DynamicAeHandler 839724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng : public AeHandler 849724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng{ 859724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengpublic: 869724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng explicit DynamicAeHandler (DynamicAnalyzer *analyzer) 879724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng : _analyzer (analyzer) 889724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng {} 899724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual XCamReturn analyze (X3aResultList &output) { 909724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng XCAM_UNUSED (output); 919724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng AnalyzerHandler::HandlerLock lock(this); 929724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng XCamAeParam param = this->get_params_unlock (); 939724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng return _analyzer->analyze_ae (param); 949724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng } 959724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 969724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengprivate: 979724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng DynamicAnalyzer *_analyzer; 989724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng}; 999724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 1009724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengclass DynamicAwbHandler 1019724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng : public AwbHandler 1029724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng{ 1039724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengpublic: 1049724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng explicit DynamicAwbHandler (DynamicAnalyzer *analyzer) 1059724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng : _analyzer (analyzer) 1069724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng {} 1079724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual XCamReturn analyze (X3aResultList &output) { 1089724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng XCAM_UNUSED (output); 1099724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng AnalyzerHandler::HandlerLock lock(this); 1109724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng XCamAwbParam param = this->get_params_unlock (); 1119724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng return _analyzer->analyze_awb (param); 1129724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng } 1139724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 1149724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengprivate: 1159724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng DynamicAnalyzer *_analyzer; 1169724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng}; 1179724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 1189724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengclass DynamicAfHandler 1199724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng : public AfHandler 1209724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng{ 1219724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengpublic: 1229724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng explicit DynamicAfHandler (DynamicAnalyzer *analyzer) 1239724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng : _analyzer (analyzer) 1249724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng {} 1259724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual XCamReturn analyze (X3aResultList &output) { 1269724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng XCAM_UNUSED (output); 1279724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng AnalyzerHandler::HandlerLock lock(this); 1289724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng XCamAfParam param = this->get_params_unlock (); 1299724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng return _analyzer->analyze_af (param); 1309724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng } 1319724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 1329724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengprivate: 1339724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng DynamicAnalyzer *_analyzer; 1349724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng}; 1359724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 1369724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengclass DynamicCommonHandler 1379724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng : public CommonHandler 1389724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng{ 1399724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng friend class DynamicAnalyzer; 1409724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengpublic: 1419724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng explicit DynamicCommonHandler (DynamicAnalyzer *analyzer) 1429724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng : _analyzer (analyzer) 1439724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng {} 1449724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng virtual XCamReturn analyze (X3aResultList &output) { 1459724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng XCAM_UNUSED (output); 1469724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng AnalyzerHandler::HandlerLock lock(this); 1479724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng return XCAM_RETURN_NO_ERROR; 1489724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng } 1499724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 1509724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Mengprivate: 1519724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng DynamicAnalyzer *_analyzer; 1529724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng}; 1539724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng} 1549724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng 1559724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng#endif //XCAM_DYNAMIC_ANALYZER_H 156