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 &param);
489724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng    virtual XCamReturn analyze_awb (XCamAwbParam &param);
499724cfe26b1b05e3ad394e5d621303f5b28cdbacJia Meng    virtual XCamReturn analyze_af (XCamAfParam &param);
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