/*
|
* handler_interface.h - handler interface
|
*
|
* Copyright (c) 2014-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_HANDLER_INTERFACE_H
|
#define XCAM_HANDLER_INTERFACE_H
|
|
#include <base/xcam_common.h>
|
#include <base/xcam_3a_types.h>
|
#include <base/xcam_params.h>
|
|
#include <xcam_std.h>
|
#include <xcam_mutex.h>
|
#include <x3a_result.h>
|
|
namespace XCam {
|
|
class AnalyzerHandler {
|
friend class HandlerLock;
|
public:
|
explicit AnalyzerHandler() {}
|
virtual ~AnalyzerHandler () {}
|
|
virtual XCamReturn analyze (X3aResultList &output) = 0;
|
|
protected:
|
class HandlerLock
|
: public SmartLock
|
{
|
public:
|
HandlerLock(AnalyzerHandler *handler)
|
: SmartLock (handler->_mutex)
|
{}
|
~HandlerLock() {}
|
};
|
|
// members
|
Mutex _mutex;
|
};
|
|
class AeHandler
|
: public AnalyzerHandler
|
{
|
public:
|
explicit AeHandler();
|
virtual ~AeHandler() {}
|
|
bool set_mode (XCamAeMode mode);
|
bool set_metering_mode (XCamAeMeteringMode mode);
|
bool set_window (XCam3AWindow *window);
|
bool set_window (XCam3AWindow *window, uint8_t count);
|
bool set_ev_shift (double ev_shift);
|
bool set_speed (double speed);
|
bool set_flicker_mode (XCamFlickerMode flicker);
|
bool set_manual_exposure_time (int64_t time_in_us);
|
bool set_manual_analog_gain (double gain);
|
bool set_aperture (double fn);
|
bool set_max_analog_gain (double max_gain);
|
bool set_exposure_time_range (int64_t min_time_in_us, int64_t max_time_in_us);
|
|
bool update_parameters (const XCamAeParam ¶ms);
|
|
bool get_exposure_time_range (int64_t *min_time_in_us, int64_t *max_time_in_us);
|
|
XCamAeMeteringMode get_metering_mode() const {
|
return _params.metering_mode;
|
}
|
|
//virtual functions
|
virtual XCamFlickerMode get_flicker_mode ();
|
virtual int64_t get_current_exposure_time ();
|
virtual double get_current_analog_gain ();
|
virtual double get_max_analog_gain ();
|
|
protected:
|
const XCamAeParam &get_params_unlock () const {
|
return _params;
|
}
|
|
XCamAeMode get_mode_unlock() const {
|
return _params.mode;
|
}
|
XCamAeMeteringMode get_metering_mode_unlock() const {
|
return _params.metering_mode;
|
}
|
const XCam3AWindow &get_window_unlock() const {
|
return _params.window;
|
}
|
XCamFlickerMode get_flicker_mode_unlock() const {
|
return _params.flicker_mode;
|
}
|
double get_speed_unlock() const {
|
return _params.speed;
|
}
|
double get_ev_shift_unlock() const {
|
return _params.ev_shift;
|
}
|
|
uint64_t get_manual_exposure_time_unlock () const {
|
return _params.manual_exposure_time;
|
}
|
double get_manual_analog_gain_unlock () const {
|
return _params.manual_analog_gain;
|
}
|
|
double get_aperture_fn_unlock () const {
|
return _params.aperture_fn;
|
}
|
|
void get_exposure_time_range_unlock (uint64_t &min, uint64_t &max) const {
|
min = _params.exposure_time_min;
|
max = _params.exposure_time_max;
|
}
|
|
double get_max_analog_gain_unlock () const {
|
return _params.max_analog_gain;
|
}
|
|
private:
|
void reset_parameters ();
|
XCAM_DEAD_COPY (AeHandler);
|
|
protected:
|
XCamAeParam _params;
|
};
|
|
class AwbHandler
|
: public AnalyzerHandler
|
{
|
public:
|
explicit AwbHandler();
|
virtual ~AwbHandler() {}
|
|
bool set_mode (XCamAwbMode mode);
|
bool set_speed (double speed);
|
bool set_color_temperature_range (uint32_t cct_min, uint32_t cct_max);
|
bool set_manual_gain (double gr, double r, double b, double gb);
|
|
bool update_parameters (const XCamAwbParam ¶ms);
|
|
//virtual functions
|
virtual uint32_t get_current_estimate_cct ();
|
|
protected:
|
const XCamAwbParam &get_params_unlock () const {
|
return _params;
|
}
|
|
XCamAwbMode get_mode_unlock() const {
|
return _params.mode;
|
}
|
double get_speed_unlock () const {
|
return _params.speed;
|
}
|
|
const XCam3AWindow &get_window_unlock () const {
|
return _params.window;
|
}
|
|
void get_cct_range_unlock (uint32_t &cct_min, uint32_t &cct_max) const {
|
cct_min = _params.cct_min;
|
cct_max = _params.cct_max;
|
}
|
|
private:
|
void reset_parameters ();
|
XCAM_DEAD_COPY (AwbHandler);
|
|
protected:
|
XCamAwbParam _params;
|
};
|
|
class AfHandler
|
: public AnalyzerHandler
|
{
|
public:
|
explicit AfHandler() {}
|
virtual ~AfHandler() {}
|
|
bool update_parameters (const XCamAfParam ¶ms);
|
|
private:
|
XCAM_DEAD_COPY (AfHandler);
|
|
protected:
|
const XCamAfParam &get_params_unlock () const {
|
return _params;
|
}
|
|
protected:
|
XCamAfParam _params;
|
};
|
|
class CommonHandler
|
: public AnalyzerHandler
|
{
|
public:
|
explicit CommonHandler();
|
virtual ~CommonHandler() {}
|
|
bool set_dvs (bool enable);
|
bool set_gbce (bool enable);
|
bool set_night_mode (bool enable);
|
|
/* Picture quality */
|
bool set_noise_reduction_level (double level);
|
bool set_temporal_noise_reduction_level (double level);
|
bool set_manual_brightness (double level);
|
bool set_manual_contrast (double level);
|
bool set_manual_hue (double level);
|
bool set_manual_saturation (double level);
|
bool set_manual_sharpness (double level);
|
bool set_gamma_table (double *r_table, double *g_table, double *b_table);
|
bool set_color_effect(XCamColorEffect effect);
|
|
bool update_parameters (const XCamCommonParam ¶ms);
|
|
protected:
|
const XCamCommonParam &get_params_unlock () const {
|
return _params;
|
}
|
bool has_gbce_unlock () const {
|
return _params.enable_gbce;
|
}
|
bool has_dvs_unlock () const {
|
return _params.enable_dvs;
|
}
|
bool has_night_mode_unlock () const {
|
return _params.enable_night_mode;
|
}
|
|
double get_nr_level_unlock () const {
|
return _params.nr_level;
|
}
|
double get_tnr_level_unlock () const {
|
return _params.tnr_level;
|
}
|
double get_brightness_unlock () const {
|
return _params.brightness;
|
}
|
double get_contrast_unlock () const {
|
return _params.contrast;
|
}
|
double get_hue_unlock () const {
|
return _params.hue;
|
}
|
double get_saturation_unlock () const {
|
return _params.saturation;
|
}
|
double get_sharpness_unlock () const {
|
return _params.sharpness;
|
}
|
|
private:
|
void reset_parameters ();
|
XCAM_DEAD_COPY (CommonHandler);
|
|
protected:
|
XCamCommonParam _params;
|
};
|
|
};
|
|
#endif // XCAM_HANDLER_INTERFACE_H
|