• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * cl_bayer_basic_handler.h - CL bayer copy handler
3  *
4  *  Copyright (c) 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_CL_BAYER_BASIC_HANLDER_H
22 #define XCAM_CL_BAYER_BASIC_HANLDER_H
23 
24 #include <xcam_std.h>
25 #include <ocl/cl_image_handler.h>
26 #include <ocl/cl_memory.h>
27 #include <ocl/cl_3a_stats_context.h>
28 #include <stats_callback_interface.h>
29 
30 namespace XCam {
31 
32 class CLBayerBasicImageHandler;
33 class CLBayer3AStatsThread;
34 
35 #define XCAM_CL_BLC_DEFAULT_LEVEL 0.06
36 
37 /*  Black level correction configuration  */
38 typedef struct  {
39     float     level_gr;  /* Black level for GR pixels */
40     float     level_r;   /* Black level for R pixels */
41     float     level_b;   /* Black level for B pixels */
42     float     level_gb;  /* Black level for GB pixels */
43     uint32_t  color_bits;
44 } CLBLCConfig;
45 
46 typedef struct {
47     float           r_gain;
48     float           gr_gain;
49     float           gb_gain;
50     float           b_gain;
51 } CLWBConfig;
52 
53 class CLBayerBasicImageKernel
54     : public CLImageKernel
55 {
56 public:
57     explicit CLBayerBasicImageKernel (const SmartPtr<CLContext> &context);
58 };
59 
60 class CLBayerBasicImageHandler
61     : public CLImageHandler
62 {
63     friend class CLBayer3AStatsThread;
64 public:
65     explicit CLBayerBasicImageHandler (const SmartPtr<CLContext> &context, const char *name);
66     ~CLBayerBasicImageHandler ();
67 
set_stats_callback(SmartPtr<StatsCallback> & callback)68     void set_stats_callback (SmartPtr<StatsCallback> &callback) {
69         _stats_callback = callback;
70     }
71     bool set_bayer_kernel (SmartPtr<CLBayerBasicImageKernel> &kernel);
72 
73     bool set_blc_config (const XCam3aResultBlackLevel &blc);
74     bool set_wb_config (const XCam3aResultWhiteBalance &wb);
75     bool set_gamma_table (const XCam3aResultGammaTable &gamma);
76     void set_stats_bits (uint32_t stats_bits);
77 
78     virtual void emit_stop ();
79     XCamReturn post_stats (const SmartPtr<X3aStats> &stats);
80     XCamReturn process_stats_buffer (SmartPtr<VideoBuffer> &buffer, SmartPtr<CLBuffer> &cl_stats);
81 
82 protected:
83     virtual XCamReturn prepare_buffer_pool_video_info (
84         const VideoBufferInfo &input, VideoBufferInfo &output);
85     virtual XCamReturn prepare_parameters (
86         SmartPtr<VideoBuffer> &input, SmartPtr<VideoBuffer> &output);
87     virtual XCamReturn execute_done (SmartPtr<VideoBuffer> &output);
88 
89 private:
90     SmartPtr<CLBayerBasicImageKernel>     _bayer_kernel;
91     bool                                  _is_first_buf;
92     CLBLCConfig                           _blc_config;
93     CLWBConfig                            _wb_config;
94     float                                 _gamma_table[XCAM_GAMMA_TABLE_SIZE + 1];
95 
96     SmartPtr<CL3AStatsCalculatorContext>  _3a_stats_context;
97     SmartPtr<CLBayer3AStatsThread>        _3a_stats_thread;
98     SmartPtr<CLBuffer>                    _stats_cl_buffer;
99 
100     SmartPtr<StatsCallback>               _stats_callback;
101 
102     XCAM_OBJ_PROFILING_DEFINES;
103 };
104 
105 SmartPtr<CLImageHandler>
106 create_cl_bayer_basic_image_handler (
107     const SmartPtr<CLContext> &context,
108     bool enable_gamma = true,
109     uint32_t stats_bits = 8);
110 
111 };
112 
113 #endif //XCAM_CL_BAYER_BASIC_HANLDER_H
114