| /* |
| * 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 <[email protected]> |
| */ |
| |
| #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 |