blob: febdf0406324c39c868e3271840311a87ded1fd2 [file] [log] [blame]
/*
* 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 */