/*
|
* cl_bayer_basic_handler.h - CL bayer copy handler
|
*
|
* 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 <feng.yuan@intel.com>
|
*/
|
|
#ifndef XCAM_CL_BAYER_BASIC_HANLDER_H
|
#define XCAM_CL_BAYER_BASIC_HANLDER_H
|
|
#include <xcam_std.h>
|
#include <ocl/cl_image_handler.h>
|
#include <ocl/cl_memory.h>
|
#include <ocl/cl_3a_stats_context.h>
|
#include <stats_callback_interface.h>
|
|
namespace XCam {
|
|
class CLBayerBasicImageHandler;
|
class CLBayer3AStatsThread;
|
|
#define XCAM_CL_BLC_DEFAULT_LEVEL 0.06
|
|
/* Black level correction configuration */
|
typedef struct {
|
float level_gr; /* Black level for GR pixels */
|
float level_r; /* Black level for R pixels */
|
float level_b; /* Black level for B pixels */
|
float level_gb; /* Black level for GB pixels */
|
uint32_t color_bits;
|
} CLBLCConfig;
|
|
typedef struct {
|
float r_gain;
|
float gr_gain;
|
float gb_gain;
|
float b_gain;
|
} CLWBConfig;
|
|
class CLBayerBasicImageKernel
|
: public CLImageKernel
|
{
|
public:
|
explicit CLBayerBasicImageKernel (const SmartPtr<CLContext> &context);
|
};
|
|
class CLBayerBasicImageHandler
|
: public CLImageHandler
|
{
|
friend class CLBayer3AStatsThread;
|
public:
|
explicit CLBayerBasicImageHandler (const SmartPtr<CLContext> &context, const char *name);
|
~CLBayerBasicImageHandler ();
|
|
void set_stats_callback (SmartPtr<StatsCallback> &callback) {
|
_stats_callback = callback;
|
}
|
bool set_bayer_kernel (SmartPtr<CLBayerBasicImageKernel> &kernel);
|
|
bool set_blc_config (const XCam3aResultBlackLevel &blc);
|
bool set_wb_config (const XCam3aResultWhiteBalance &wb);
|
bool set_gamma_table (const XCam3aResultGammaTable &gamma);
|
void set_stats_bits (uint32_t stats_bits);
|
|
virtual void emit_stop ();
|
XCamReturn post_stats (const SmartPtr<X3aStats> &stats);
|
XCamReturn process_stats_buffer (SmartPtr<VideoBuffer> &buffer, SmartPtr<CLBuffer> &cl_stats);
|
|
protected:
|
virtual XCamReturn prepare_buffer_pool_video_info (
|
const VideoBufferInfo &input, VideoBufferInfo &output);
|
virtual XCamReturn prepare_parameters (
|
SmartPtr<VideoBuffer> &input, SmartPtr<VideoBuffer> &output);
|
virtual XCamReturn execute_done (SmartPtr<VideoBuffer> &output);
|
|
private:
|
SmartPtr<CLBayerBasicImageKernel> _bayer_kernel;
|
bool _is_first_buf;
|
CLBLCConfig _blc_config;
|
CLWBConfig _wb_config;
|
float _gamma_table[XCAM_GAMMA_TABLE_SIZE + 1];
|
|
SmartPtr<CL3AStatsCalculatorContext> _3a_stats_context;
|
SmartPtr<CLBayer3AStatsThread> _3a_stats_thread;
|
SmartPtr<CLBuffer> _stats_cl_buffer;
|
|
SmartPtr<StatsCallback> _stats_callback;
|
|
XCAM_OBJ_PROFILING_DEFINES;
|
};
|
|
SmartPtr<CLImageHandler>
|
create_cl_bayer_basic_image_handler (
|
const SmartPtr<CLContext> &context,
|
bool enable_gamma = true,
|
uint32_t stats_bits = 8);
|
|
};
|
|
#endif //XCAM_CL_BAYER_BASIC_HANLDER_H
|