• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * x3a_isp_config.h - 3A ISP config
3  *
4  *  Copyright (c) 2014-2015 Intel Corporation
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * Author: Wind Yuan <feng.yuan@intel.com>
19  */
20 
21 #ifndef XCAM_3A_ISP_CONFIG_H
22 #define XCAM_3A_ISP_CONFIG_H
23 
24 #include <xcam_std.h>
25 #include <x3a_result.h>
26 #include <linux/atomisp.h>
27 #include <base/xcam_3a_result.h>
28 
29 namespace XCam {
30 
31 #define XCAM_3A_ISP_RESULT_TYPE_START (XCAM_3A_RESULT_USER_DEFINED_TYPE + 0x1000)
32 
33 struct AtomIspConfigContent {
34     struct atomisp_parameters   isp_config;
35     //content
36     struct atomisp_wb_config     wb;
37     struct atomisp_ob_config     ob; //black level
38     struct atomisp_cc_config     cc;
39     struct atomisp_cc_config     yuv2rgb_cc;
40     struct atomisp_cc_config     rgb2yuv_cc;
41     struct atomisp_nr_config     nr;
42     struct atomisp_tnr_config    tnr;
43     struct atomisp_ynr_config    ynr;
44     struct atomisp_cnr_config    cnr;
45     struct atomisp_anr_config    anr;
46     struct atomisp_xnr_config    xnr;
47     struct atomisp_xnr_table     xnr_table;
48     struct atomisp_ee_config     ee;
49     struct atomisp_dp_config     dp;
50     struct atomisp_de_config     de;
51     struct atomisp_ecd_config    ecd_config;
52     struct atomisp_fc_config     fc_config;
53     struct atomisp_ctc_config    ctc_config;
54     struct atomisp_ctc_table     ctc_table;
55     struct atomisp_macc_config   macc_config;
56     struct atomisp_macc_table    macc_table;
57     struct atomisp_gamma_table   gamma_table;
58     struct atomisp_rgb_gamma_table r_gamma_table;
59     struct atomisp_rgb_gamma_table g_gamma_table;
60     struct atomisp_rgb_gamma_table b_gamma_table;
61     struct atomisp_gc_config     gc_config;
62     struct atomisp_shading_table shading_table;
63     struct atomisp_3a_config     a3a;
64 
65     struct atomisp_dvs_6axis_config dvs_6axis;
66 
67 
68     struct atomisp_formats_config formats;
69     struct atomisp_aa_config     aa;
70     struct atomisp_aa_config     baa;
71     struct atomisp_ce_config     ce;
72     struct atomisp_morph_table   morph_table;
73     struct atomisp_anr_thres     anr_thres;
74 
75     struct atomisp_dz_config     dz_config;
76     struct atomisp_vector        motion_vector;
77 
78     void clear ();
79     void copy (const struct atomisp_parameters &config);
80 
AtomIspConfigContentAtomIspConfigContent81     AtomIspConfigContent () {
82         clear ();
83     }
84 };
85 
86 class IspConfigTranslator;
87 
88 class X3aIspConfig
89 {
90 public:
91     enum X3aIspConfigType {
92         IspAllParameters = XCAM_3A_ISP_RESULT_TYPE_START,
93         IspExposureParameters,
94     };
95 
96     struct X3aIspResultDummy {
97         XCam3aResultHead head;
98     };
99 public:
100     explicit X3aIspConfig ();
101     virtual ~X3aIspConfig();
102 
103 public:
get_isp_configs()104     const struct atomisp_parameters &get_isp_configs () const {
105         return _isp_content.isp_config;
106     }
get_isp_configs()107     struct atomisp_parameters &get_isp_configs () {
108         return _isp_content.isp_config;
109     }
110     bool clear ();
111     bool attach (SmartPtr<X3aResult> &result, IspConfigTranslator *translator);
112 
113 private:
114     XCAM_DEAD_COPY (X3aIspConfig);
115 
116 protected:
117     AtomIspConfigContent             _isp_content;
118     std::list< SmartPtr<X3aResult> > _3a_results;
119 };
120 
121 template <typename IspConfig, typename StandardResult, uint32_t type>
122 class X3aIspResultT
123     : public X3aStandardResultT<StandardResult>
124 {
125 public:
126     X3aIspResultT (
127         XCamImageProcessType process_type = XCAM_IMAGE_PROCESS_ALWAYS
128     )
129         : X3aStandardResultT<StandardResult> (type, process_type)
130     {
131         X3aResult::set_ptr((void*)&_isp_config);
132     }
133 
~X3aIspResultT()134     ~X3aIspResultT () {}
135 
136     // set config
set_isp_config(IspConfig & config)137     void set_isp_config (IspConfig &config) {
138         _isp_config = config;
139     }
get_isp_config()140     const IspConfig &get_isp_config () const {
141         return _isp_config;
142     }
143 
144 private:
145     IspConfig _isp_config;
146 };
147 
148 
149 /* special X3aAtomIspParametersResult type */
150 template <>
151 class X3aIspResultT<struct atomisp_parameters, X3aIspConfig::X3aIspResultDummy, X3aIspConfig::IspAllParameters>
152         : public X3aStandardResultT<X3aIspConfig::X3aIspResultDummy>
153     {
154 public:
155         X3aIspResultT (
156             XCamImageProcessType process_type = XCAM_IMAGE_PROCESS_ALWAYS)
157             : X3aStandardResultT<X3aIspConfig::X3aIspResultDummy> ((uint32_t)X3aIspConfig::IspAllParameters, process_type)
158         {
159             X3aResult::set_ptr((void*)&_content.isp_config);
160         }
161 
~X3aIspResultT()162         ~X3aIspResultT () {}
163 
164         // get config
get_isp_config()165         struct atomisp_parameters &get_isp_config () {
166             return _content.isp_config;
167         }
get_isp_config()168         const struct atomisp_parameters &get_isp_config () const {
169             return _content.isp_config;
170         }
171 
172         // set config
set_isp_config(struct atomisp_parameters & config)173         void set_isp_config (struct atomisp_parameters &config) {
174             _content.copy (config);
175         }
176 
177 private:
178         AtomIspConfigContent      _content;
179     };
180 
181 typedef
182 X3aIspResultT<struct atomisp_parameters, X3aIspConfig::X3aIspResultDummy, X3aIspConfig::IspAllParameters> X3aAtomIspParametersResult;
183 typedef
184 X3aIspResultT<struct atomisp_exposure, XCam3aResultExposure, X3aIspConfig::IspExposureParameters> X3aIspExposureResult;
185 
186 };
187 
188 #endif //XCAM_3A_ISP_CONFIG_H
189 
190