482 lines
18 KiB
C
482 lines
18 KiB
C
/*
|
|
* 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 <feng.yuan@intel.com>
|
|
*/
|
|
|
|
/*! \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 */
|