1 /* 2 * cl_post_image_processor.h - CL post image processor 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 * Author: Yinhang Liu <yinhangx.liu@intel.com> 20 */ 21 22 #ifndef XCAM_CL_POST_IMAGE_PROCESSOR_H 23 #define XCAM_CL_POST_IMAGE_PROCESSOR_H 24 25 #include <xcam_std.h> 26 #include <base/xcam_3a_types.h> 27 #include <ocl/cl_image_processor.h> 28 #include <stats_callback_interface.h> 29 #include <ocl/cl_blender.h> 30 #include <ocl/cl_utils.h> 31 32 namespace XCam { 33 34 class CLTnrImageHandler; 35 class CLRetinexImageHandler; 36 class CLCscImageHandler; 37 class CLDefogDcpImageHandler; 38 class CLWaveletDenoiseImageHandler; 39 class CLNewWaveletDenoiseImageHandler; 40 class CL3DDenoiseImageHandler; 41 class CLImageScaler; 42 class CLWireFrameImageHandler; 43 class CLImageWarpHandler; 44 class CLImage360Stitch; 45 class CLVideoStabilizer; 46 47 class CLPostImageProcessor 48 : public CLImageProcessor 49 { 50 public: 51 enum OutSampleType { 52 OutSampleYuv, 53 OutSampleRGB, 54 OutSampleBayer, 55 }; 56 57 enum CLTnrMode { 58 TnrDisable = 0, 59 TnrYuv, 60 }; 61 62 enum CLDefogMode { 63 DefogDisabled = 0, 64 DefogRetinex, 65 DefogDarkChannelPrior, 66 }; 67 68 enum CL3DDenoiseMode { 69 Denoise3DDisabled = 0, 70 Denoise3DYuv, 71 Denoise3DUV, 72 }; 73 74 public: 75 explicit CLPostImageProcessor (); 76 virtual ~CLPostImageProcessor (); 77 78 bool set_output_format (uint32_t fourcc); 79 void set_stats_callback (const SmartPtr<StatsCallback> &callback); 80 81 bool set_scaler_factor (const double factor); get_scaler_factor()82 double get_scaler_factor () const { 83 return _scaler_factor; 84 } is_scaled()85 bool is_scaled () { 86 return _enable_scaler; 87 } 88 89 virtual bool set_tnr (CLTnrMode mode); 90 virtual bool set_defog_mode (CLDefogMode mode); 91 virtual bool set_wavelet (CLWaveletBasis basis, uint32_t channel, bool bayes_shrink); 92 virtual bool set_3ddenoise_mode (CL3DDenoiseMode mode, uint8_t ref_frame_count); 93 virtual bool set_scaler (bool enable); 94 virtual bool set_wireframe (bool enable); 95 virtual bool set_image_warp (bool enable); 96 virtual bool set_image_stitch ( 97 bool enable_stitch, bool enable_seam, CLBlenderScaleMode scale_mode, bool enable_fisheye_map, 98 bool lsc, bool fm_ocl, uint32_t stitch_width, uint32_t stitch_height, uint32_t res_mode); 99 100 protected: 101 virtual bool can_process_result (SmartPtr<X3aResult> &result); 102 virtual XCamReturn apply_3a_results (X3aResultList &results); 103 virtual XCamReturn apply_3a_result (SmartPtr<X3aResult> &result); 104 105 private: 106 virtual XCamReturn create_handlers (); 107 108 XCAM_DEAD_COPY (CLPostImageProcessor); 109 110 private: 111 uint32_t _output_fourcc; 112 OutSampleType _out_sample_type; 113 SmartPtr<StatsCallback> _stats_callback; 114 115 SmartPtr<CLTnrImageHandler> _tnr; 116 SmartPtr<CLRetinexImageHandler> _retinex; 117 SmartPtr<CLDefogDcpImageHandler> _defog_dcp; 118 SmartPtr<CLWaveletDenoiseImageHandler> _wavelet; 119 SmartPtr<CLNewWaveletDenoiseImageHandler> _newwavelet; 120 SmartPtr<CL3DDenoiseImageHandler> _3d_denoise; 121 SmartPtr<CLImageScaler> _scaler; 122 SmartPtr<CLWireFrameImageHandler> _wireframe; 123 SmartPtr<CLCscImageHandler> _csc; 124 SmartPtr<CLImageWarpHandler> _image_warp; 125 SmartPtr<CLImage360Stitch> _stitch; 126 SmartPtr<CLVideoStabilizer> _video_stab; 127 128 double _scaler_factor; 129 130 CLTnrMode _tnr_mode; 131 CLDefogMode _defog_mode; 132 CLWaveletBasis _wavelet_basis; 133 uint32_t _wavelet_channel; 134 bool _wavelet_bayes_shrink; 135 CL3DDenoiseMode _3d_denoise_mode; 136 uint8_t _3d_denoise_ref_count; 137 bool _enable_scaler; 138 bool _enable_wireframe; 139 bool _enable_image_warp; 140 bool _enable_stitch; 141 bool _stitch_enable_seam; 142 bool _stitch_fisheye_map; 143 bool _stitch_lsc; 144 bool _stitch_fm_ocl; 145 CLBlenderScaleMode _stitch_scale_mode; 146 uint32_t _stitch_width; 147 uint32_t _stitch_height; 148 uint32_t _stitch_res_mode; 149 uint32_t _surround_mode; 150 }; 151 152 }; 153 #endif // XCAM_CL_POST_IMAGE_PROCESSOR_H 154