/* * 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 */ #ifndef XCAM_HANDLER_INTERFACE_H #define XCAM_HANDLER_INTERFACE_H #include #include #include #include #include #include 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