| /* |
| * gstxcaminterface.h - gst xcam 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]> |
| */ |
| |
| /*! \file gstxcaminterface.h |
| * \brief Gstreamer XCam 3A interface |
| * |
| */ |
| |
| #ifndef GST_XCAM_INTERFACE_H |
| #define GST_XCAM_INTERFACE_H |
| |
| #include <gst/gst.h> |
| #include <linux/videodev2.h> |
| #include <base/xcam_3a_types.h> |
| |
| |
| G_BEGIN_DECLS |
| |
| /*! \brief Get GST interface type of XCam 3A interface |
| * |
| * \return GType returned by g_type_register_static() |
| */ |
| #define GST_TYPE_XCAM_3A_IF (gst_xcam_3a_interface_get_type ()) |
| |
| /*! \brief Get GST XCam 3A handle. |
| * See usage of struct _GstXCam3AInterface. |
| * |
| * \return XCam 3A handle of _GstXCam3A * type |
| */ |
| #define GST_XCAM_3A(obj) \ |
| (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_XCAM_3A_IF, GstXCam3A)) |
| |
| /*! \brief Get GST XCam 3A interface |
| * |
| * See usage of struct _GstXCam3AInterface. |
| * |
| * \param[in] Xcam 3A handle |
| * \return GstXCam3AInterface* |
| */ |
| #define GST_XCAM_3A_GET_INTERFACE(inst) \ |
| (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_XCAM_3A_IF, GstXCam3AInterface)) |
| |
| typedef struct _GstXCam3A GstXCam3A; |
| typedef struct _GstXCam3AInterface GstXCam3AInterface; |
| |
| /*! \brief XCam 3A Interface |
| * |
| * Usage: |
| * - GstXCam3A *xcam = GST_XCAM_3A (xcamsrc); |
| * - GstXCam3AInterface *xcam_interface = GST_XCAM_3A_GET_INTERFACE (xcam); |
| * - ret = xcam_interface->set_exposure_mode(xcam, XCAM_AE_MODE_AUTO); |
| */ |
| struct _GstXCam3AInterface { |
| GTypeInterface base; /*!< inherent from GTypeInterface */ |
| |
| /*! \brief Set white balance mode. |
| * See xcam_3a_set_whitebalance_mode(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \param[in] mode white balance mode |
| * return 0 on success; -1 on error (parameter error) |
| */ |
| gboolean (* set_white_balance_mode) (GstXCam3A *xcam, XCamAwbMode mode); |
| |
| /*! \brief set AWB speed. |
| * see xcam_3a_set_awb_speed(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \param[in,out] speed AWB speed; speed meaturement will consider later |
| * return 0 on success; -1 on error |
| */ |
| gboolean (* set_awb_speed) (GstXCam3A *xcam, double speed); |
| |
| /*! \brief Set white balance temperature range. |
| * see xcam_3a_set_awb_color_temperature_range(). |
| * |
| * \param[in] cct_min 0 < cct_min <= cct_max <= 10000; if 0, disable cct range |
| * \param[in] cct_max 0 < cct_min <= cct_max <= 10000; if 0, disable cct range |
| * \return 0 on success; -1 on error |
| * |
| * Usage: |
| * |
| * - Enable: |
| * 1. set_white_balance_mode(%XCAM_AWB_MODE_MANUAL) |
| * 2. set_wb_color_temperature_range |
| * - Disable: |
| * set_white_balance_mode(%XCAM_AWB_MODE_AUTO) |
| * |
| */ |
| gboolean (* set_wb_color_temperature_range) (GstXCam3A *xcam, guint cct_min, guint cct_max); |
| |
| /*! \brief Set manual white balance gain. |
| * see xcam_3a_set_wb_manual_gain(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \param[in] gr GR channel |
| * \param[in] r R channel |
| * \param[in] b B channel |
| * \param[in] gb GB channel |
| * |
| * Usage: |
| * |
| * - Enable: |
| * 1. need gr, r, b, gb => gain value [0.1~4.0]; |
| * 2. set_white_balance_mode(xcam, XCAM_AWB_MODE_NOT_SET) |
| * - Disable: |
| * 1. need set gr=0, r=0, b=0, gb=0; |
| * 2. set_white_balance_mode(xcam, mode); mode != XCAM_AWB_MODE_NOT_SET |
| */ |
| gboolean (* set_manual_wb_gain) (GstXCam3A *xcam, double gr, double r, double b, double gb); |
| |
| |
| /*! \brief set exposure mode. |
| * see xcam_3a_set_exposure_mode(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \param[in] mode choose from XCAM_AE_MODE_AUTO and XCAM_AE_MODE_MANUAL; others not supported |
| */ |
| gboolean (* set_exposure_mode) (GstXCam3A *xcam, XCamAeMode mode); |
| |
| /*! \brief set AE metering mode. |
| * see xcam_3a_set_ae_metering_mode(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \param[in] mode XCAM_AE_METERING_MODE_AUTO, default |
| * XCAM_AE_METERING_MODE_SPOT, need set spot window by set_exposure_window |
| * XCAM_AE_METERING_MODE_CENTER, more weight in center |
| * XCAM_AE_METERING_MODE_WEIGHTED_WINDOW, weighted multi metering window |
| */ |
| gboolean (* set_ae_metering_mode) (GstXCam3A *xcam, XCamAeMeteringMode mode); |
| |
| /* \brief set exposure window. |
| * see xcam_3a_set_ae_window(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \param[in] window the area to set exposure with. x_end > x_start AND y_end > y_start; only ONE window can be set |
| * \param[in] count the number of metering window |
| * |
| * Usage |
| * - Enable: |
| * set_ae_metering_mode(@xcam, %XCAM_AE_METERING_MODE_SPOT) |
| * - Disable: |
| * set_ae_metering_mode(@xcam, @mode); #mode != %XCAM_AE_METERING_MODE_SPOT |
| */ |
| gboolean (* set_exposure_window) (GstXCam3A *xcam, XCam3AWindow *window, guint8 count); |
| |
| /*! \brief set exposure value offset. |
| * see xcam_3a_set_ae_value_shift(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \param[in] ev_offset -4.0 <= ev_offset <= 4.0; default 0.0 |
| */ |
| gboolean (* set_exposure_value_offset) (GstXCam3A *xcam, double ev_offset); |
| |
| /*! \brief set AE speed. |
| * see xcam_3a_set_ae_speed(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \param[in] speed AE speed |
| */ |
| gboolean (* set_ae_speed) (GstXCam3A *xcam, double speed); |
| |
| /*! \brief set exposure flicker mode. |
| * see xcam_3a_set_ae_flicker_mode(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \param[in] flicker XCAM_AE_FLICKER_MODE_AUTO, default |
| * XCAM_AE_FLICKER_MODE_50HZ |
| * XCAM_AE_FLICKER_MODE_60HZ |
| * XCAM_AE_FLICKER_MODE_OFF, outside |
| */ |
| gboolean (*set_exposure_flicker_mode) (GstXCam3A *xcam, XCamFlickerMode flicker); |
| |
| /*! \brief get exposure flicker mode. |
| * see xcam_3a_get_ae_flicker_mode(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \return XCamFlickerMode XCAM_AE_FLICKER_MODE_AUTO, default |
| * XCAM_AE_FLICKER_MODE_50HZ |
| * XCAM_AE_FLICKER_MODE_60HZ |
| * XCAM_AE_FLICKER_MODE_OFF, outside |
| */ |
| XCamFlickerMode (*get_exposure_flicker_mode) (GstXCam3A *xcam); |
| |
| /*! \brief get current exposure time. |
| * see xcam_3a_get_current_exposure_time(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \return current exposure time in microsecond, if return -1, means xcam is not started |
| */ |
| gint64 (* get_current_exposure_time) (GstXCam3A *xcam); |
| |
| /*! \brief get current analog gain. |
| * see xcam_3a_get_current_analog_gain(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \return current analog gain as multiplier. If return < 0.0 OR return < 1.0, xcam is not started. |
| */ |
| double (* get_current_analog_gain) (GstXCam3A *xcam); |
| |
| /*! \brief set manual exposure time |
| * |
| * \param[in,out] xcam XCam handle |
| * \param[in] time_in_us exposure time |
| * |
| * Usage: |
| * - Enable: |
| * set time_in_us, 0 < time_in_us < 1/fps |
| * - Disable: |
| * time_in_us = 0 |
| */ |
| gboolean (* set_manual_exposure_time) (GstXCam3A *xcam, gint64 time_in_us); |
| |
| /*! \brief set manual analog gain. |
| * see xcam_3a_set_ae_manual_analog_gain(). |
| * |
| * \param[in,out] xcam XCam handle |
| * \param[in] gain analog gain |
| * |
| * Usage: |
| * - Enable: |
| * set @gain value, 1.0 < @gain |
| * - Disable: |
| * set @gain = 0.0 |
| */ |
| gboolean (* set_manual_analog_gain) (GstXCam3A *xcam, double gain); |
| |
| /*! \brief set aperture. |
| * see xcam_3a_set_ae_set_aperture(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] fn AE aperture fn |
| * \return bool 0 on success |
| */ |
| gboolean (* set_aperture) (GstXCam3A *xcam, double fn); |
| |
| /*! \brief set max analog gain. |
| * see xcam_3a_set_ae_max_analog_gain(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] max_gain max analog gain |
| * \return gboolen 0 on success |
| */ |
| gboolean (* set_max_analog_gain) (GstXCam3A *xcam, double max_gain); |
| |
| /*! \brief get max analog gain. |
| * see xcam_3a_get_ae_max_analog_gain(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \return max_gain max analog gain |
| */ |
| double (* get_max_analog_gain) (GstXCam3A *xcam); |
| |
| /*! |
| * \brief set AE time range |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] min_time_in_us min time |
| * \param[in] max_time_in_us max time |
| * \return XCam3AStatus 0 on success |
| */ |
| gboolean (* set_exposure_time_range) (GstXCam3A *xcam, gint64 min_time_in_us, gint64 max_time_in_us); |
| |
| /*! |
| * \brief XCam3A get AE time range. |
| * Range in [0 ~ 1000000/fps] micro-seconds. see xcam_3a_set_ae_time_range(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[out] min_time_in_us min time |
| * \param[out] max_time_in_us max time |
| * \return bool 0 on success |
| */ |
| gboolean (* get_exposure_time_range) (GstXCam3A *xcam, gint64 *min_time_in_us, gint64 *max_time_in_us); |
| |
| /*! \brief set DVS. |
| * digital video stabilization. see xcam_3a_enable_dvs(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] enable enable/disable |
| * \return bool 0 on success |
| */ |
| gboolean (* set_dvs) (GstXCam3A *xcam, gboolean enable); |
| |
| /*! \brief set noice reduction level to BNR and YNR. |
| * see xcam_3a_set_noise_reduction_level(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] level control BNR/YNR gain. 0 <= level <= 255; default level: 128 |
| * \return bool 0 on success |
| */ |
| gboolean (*set_noise_reduction_level) (GstXCam3A *xcam, guint8 level); |
| |
| /*! \brief set temporal noice reduction level. |
| * see xcam_3a_set_temporal_noise_reduction_level(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] level control TNR gain. 0 <= level <= 255; default level: 128 |
| * \param[in] mode TNR filter mode 0: disable, 1: YUV mode, 2: RGB mode |
| * \return bool 0 on success |
| */ |
| gboolean (*set_temporal_noise_reduction_level) (GstXCam3A *xcam, guint8 level, gint8 mode); |
| |
| /*! |
| * \brief set gamma table. |
| * see xcam_3a_set_set_gamma_table(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] r_table red color gamma table |
| * \param[in] g_table green color gamma table |
| * \param[in] b_table blue color gamma table |
| * \return bool 0 on success |
| * |
| * Restriction: |
| * 1. can't co-work with manual brightness and contrast, |
| * 2. table size = 256, and values in [0.0~1.0], e.g 0.0, 1.0/256, 2.0/256 ... 255.0/256 |
| * |
| * Usage: |
| * - to Disable: |
| * r_table = NULL && g_table = NULL && b_table=NULL |
| */ |
| gboolean (* set_gamma_table) (GstXCam3A *xcam, double *r_table, double *g_table, double *b_table); |
| |
| /*! |
| * \brief enable/disable gbce. |
| * see xcam_3a_enable_gbce(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] enable enable/disable, i.e. TRUE to enable GBCE and otherwise disable GBCE. |
| * \return bool 0 on success |
| */ |
| gboolean (* set_gbce) (GstXCam3A *xcam, gboolean enable); |
| |
| /*! |
| * \brief set manual brightness. |
| * see xcam_3a_set_manual_brightness(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] value manual brightness, 0 <= value <= 255; default:128 |
| * \return bool 0 on success */ |
| gboolean (* set_manual_brightness) (GstXCam3A *xcam, guint8 value); |
| |
| /*! |
| * \brief set manual contrast. |
| * see xcam_3a_set_manual_contrast(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] value manual contrast, 0 <= value <= 255; default:128 |
| * \return bool 0 on success */ |
| gboolean (* set_manual_contrast) (GstXCam3A *xcam, guint8 value); |
| |
| /*! |
| * \brief set manual hue. |
| * see xcam_3a_set_manual_hue(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] value manual hue, 0 <= value <= 255; default:128 |
| * \return bool 0 on success */ |
| gboolean (* set_manual_hue) (GstXCam3A *xcam, guint8 value); |
| |
| /*! |
| * \brief set manual saturation. |
| * see xcam_3a_set_manual_saturation(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] value manual saturation, 0 <= value <= 255; default:128 |
| * \return bool 0 on success */ |
| gboolean (* set_manual_saturation) (GstXCam3A *xcam, guint8 value); |
| |
| /*! |
| * \brief set manual sharpness. |
| * see xcam_3a_set_manual_sharpness(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] value manual sharpness, 0 <= value <= 255; default:128 |
| * \return bool 0 on success */ |
| gboolean (* set_manual_sharpness) (GstXCam3A *xcam, guint8 value); |
| |
| /* IR-cut */ |
| /*! |
| * \brief enable/disable night mode. |
| * see xcam_3a_enable_night_mode(). |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] enable enable/disable, i.e. TRUE to enable night mode and otherwise disable night mode. |
| * \return bool 0 on success |
| */ |
| gboolean (* set_night_mode) (GstXCam3A *xcam, gboolean enable); |
| |
| /*! |
| * \brief set HDR mode. |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] mode 0: disable, 1: HDR in RGB color space, 2: HDR in LAB color space |
| * \return bool 0 on success |
| */ |
| gboolean (* set_hdr_mode) (GstXCam3A *xcam, guint8 mode); |
| |
| /*! |
| * \brief set denoise mode. |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] mode bit mask to enable/disable denoise functions |
| * each bit controls a specific denoise function, 0: disable, 1: enable |
| * bit 0: simple noise reduction |
| * bit 1: bilateral noise reduction |
| * bit 2: luminance noise reduction and edge enhancement |
| * bit 3: bayer noise reduction |
| * bit 4: advanced bayer noise reduction |
| * \return bool 0 on success |
| */ |
| gboolean (* set_denoise_mode) (GstXCam3A *xcam, guint32 mode); |
| |
| /*! |
| * \brief set gamma mode. |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] enable true: enable, false: disable |
| * \return bool 0 on success |
| */ |
| gboolean (* set_gamma_mode) (GstXCam3A *xcam, gboolean enable); |
| |
| /*! |
| * \brief set dpc mode. |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] enable true: enable, false: disable |
| * \return bool 0 on success |
| */ |
| gboolean (* set_dpc_mode) (GstXCam3A *xcam, gboolean enable); |
| |
| /*! |
| * \brief set tone mapping mode. |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] enable true: enable, false: disable |
| * \return bool 0 on success |
| */ |
| gboolean (* set_tonemapping_mode) (GstXCam3A *xcam, gboolean enable); |
| |
| /*! |
| * \brief set retinex mode. |
| * |
| * \param[in,out] xcam XCam3A handle |
| * \param[in] enable true: enable, false: disable |
| * \return bool 0 on success |
| */ |
| gboolean (* set_retinex_mode) (GstXCam3A *xcam, gboolean enable); |
| |
| |
| }; |
| |
| /*! \brief Get GST interface type of XCam 3A interface. |
| * will try to register GsXcam3AInterface with |
| * g_type_register_static() if not done so yet, and in turn return the |
| * interface type it returns. |
| * |
| * \return GType XCam 3A interface type returned by g_type_register_static() |
| */ |
| GType |
| gst_xcam_3a_interface_get_type (void); |
| |
| G_END_DECLS |
| |
| #endif /* GST_XCAM_INTERFACE_H */ |