/* * cl_post_image_processor.h - CL post image processor * * Copyright (c) 2015 Intel Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Author: Wind Yuan * Author: Yinhang Liu */ #ifndef XCAM_CL_POST_IMAGE_PROCESSOR_H #define XCAM_CL_POST_IMAGE_PROCESSOR_H #include #include #include #include #include #include namespace XCam { class CLTnrImageHandler; class CLRetinexImageHandler; class CLCscImageHandler; class CLDefogDcpImageHandler; class CLWaveletDenoiseImageHandler; class CLNewWaveletDenoiseImageHandler; class CL3DDenoiseImageHandler; class CLImageScaler; class CLWireFrameImageHandler; class CLImageWarpHandler; class CLImage360Stitch; class CLVideoStabilizer; class CLPostImageProcessor : public CLImageProcessor { public: enum OutSampleType { OutSampleYuv, OutSampleRGB, OutSampleBayer, }; enum CLTnrMode { TnrDisable = 0, TnrYuv, }; enum CLDefogMode { DefogDisabled = 0, DefogRetinex, DefogDarkChannelPrior, }; enum CL3DDenoiseMode { Denoise3DDisabled = 0, Denoise3DYuv, Denoise3DUV, }; public: explicit CLPostImageProcessor (); virtual ~CLPostImageProcessor (); bool set_output_format (uint32_t fourcc); void set_stats_callback (const SmartPtr &callback); bool set_scaler_factor (const double factor); double get_scaler_factor () const { return _scaler_factor; } bool is_scaled () { return _enable_scaler; } virtual bool set_tnr (CLTnrMode mode); virtual bool set_defog_mode (CLDefogMode mode); virtual bool set_wavelet (CLWaveletBasis basis, uint32_t channel, bool bayes_shrink); virtual bool set_3ddenoise_mode (CL3DDenoiseMode mode, uint8_t ref_frame_count); virtual bool set_scaler (bool enable); virtual bool set_wireframe (bool enable); virtual bool set_image_warp (bool enable); virtual bool set_image_stitch ( bool enable_stitch, bool enable_seam, CLBlenderScaleMode scale_mode, bool enable_fisheye_map, bool lsc, bool fm_ocl, uint32_t stitch_width, uint32_t stitch_height, uint32_t res_mode); protected: virtual bool can_process_result (SmartPtr &result); virtual XCamReturn apply_3a_results (X3aResultList &results); virtual XCamReturn apply_3a_result (SmartPtr &result); private: virtual XCamReturn create_handlers (); XCAM_DEAD_COPY (CLPostImageProcessor); private: uint32_t _output_fourcc; OutSampleType _out_sample_type; SmartPtr _stats_callback; SmartPtr _tnr; SmartPtr _retinex; SmartPtr _defog_dcp; SmartPtr _wavelet; SmartPtr _newwavelet; SmartPtr _3d_denoise; SmartPtr _scaler; SmartPtr _wireframe; SmartPtr _csc; SmartPtr _image_warp; SmartPtr _stitch; SmartPtr _video_stab; double _scaler_factor; CLTnrMode _tnr_mode; CLDefogMode _defog_mode; CLWaveletBasis _wavelet_basis; uint32_t _wavelet_channel; bool _wavelet_bayes_shrink; CL3DDenoiseMode _3d_denoise_mode; uint8_t _3d_denoise_ref_count; bool _enable_scaler; bool _enable_wireframe; bool _enable_image_warp; bool _enable_stitch; bool _stitch_enable_seam; bool _stitch_fisheye_map; bool _stitch_lsc; bool _stitch_fm_ocl; CLBlenderScaleMode _stitch_scale_mode; uint32_t _stitch_width; uint32_t _stitch_height; uint32_t _stitch_res_mode; uint32_t _surround_mode; }; }; #endif // XCAM_CL_POST_IMAGE_PROCESSOR_H