summaryrefslogtreecommitdiff
path: root/gst-libs
diff options
context:
space:
mode:
authorLasse Laukkanen <ext-lasse.2.laukkanen@nokia.com>2010-10-14 10:49:55 +0300
committerTim-Philipp Müller <tim@centricular.net>2012-07-11 00:10:55 +0100
commit3d94d8dc39c4e13069714c80a3584dd561a1e41b (patch)
tree9d06a4bc55f4f6d52429b9486938b45ea07e24bb /gst-libs
parent8fd2fc662a7c36a2df4c2621dd88a0951395a820 (diff)
downloadgstreamer-plugins-bad-3d94d8dc39c4e13069714c80a3584dd561a1e41b.tar.gz
photography: Add manual control of exposure, focus and white balance
Add new interface properties and mode for better manual control of exposure, focus and white balance. https://bugzilla.gnome.org/show_bug.cgi?id=622482
Diffstat (limited to 'gst-libs')
-rw-r--r--gst-libs/gst/interfaces/photography.c79
-rw-r--r--gst-libs/gst/interfaces/photography.h35
2 files changed, 108 insertions, 6 deletions
diff --git a/gst-libs/gst/interfaces/photography.c b/gst-libs/gst/interfaces/photography.c
index 3761a8684..b5a50e445 100644
--- a/gst-libs/gst/interfaces/photography.c
+++ b/gst-libs/gst/interfaces/photography.c
@@ -591,7 +591,7 @@ gst_photography_iface_class_init (gpointer g_class)
/* Exposure */
g_object_interface_install_property (g_class,
- g_param_spec_uint (GST_PHOTOGRAPHY_PROP_EXPOSURE,
+ g_param_spec_uint (GST_PHOTOGRAPHY_PROP_EXPOSURE_TIME,
"Exposure time in milliseconds",
"Exposure time defines how long the shutter will stay open (0 = auto)",
0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -617,6 +617,83 @@ gst_photography_iface_class_init (gpointer g_class)
"How much the resulted image will be zoomed",
1.0f, 10.0f, 1.0f, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * GstPhotography:color-temperature:
+ *
+ * Color temperature parameter for manual white balance.
+ * Control color temperature in Kelvin units.
+ */
+ g_object_interface_install_property (g_class,
+ g_param_spec_uint (GST_PHOTOGRAPHY_PROP_COLOR_TEMPERATURE,
+ "Color temperature in Kelvin units",
+ "Color temperature in Kelvin units for manual white balance",
+ 0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstPhotography:white-point:
+ *
+ * White point parameter for manual white balance.
+ * Describes the color "white" as raw values.
+ *
+ * FIXME: check and document correct representation for white point
+ */
+ g_object_interface_install_property (g_class,
+ g_param_spec_value_array (GST_PHOTOGRAPHY_PROP_WHITE_POINT,
+ "White point",
+ "Describe color white as raw values",
+ g_param_spec_uint ("raw-value", "Raw value",
+ "Raw value", 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS),
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstPhotography:analog-gain:
+ *
+ * Linear multiplicative value how much amplification is applied to the signal
+ * before A-D conversion.
+ */
+ g_object_interface_install_property (g_class,
+ g_param_spec_float (GST_PHOTOGRAPHY_PROP_ANALOG_GAIN,
+ "Analog gain applied to the sensor",
+ "Analog gain applied to the sensor",
+ 1.0f, G_MAXFLOAT, 1.0f, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstPhotography:lens-focus:
+ *
+ * Manual changing of lens focus in diopter units.
+ * Inteded use with GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL focus mode, otherwise
+ * to be ignored.
+ *
+ */
+ g_object_interface_install_property (g_class,
+ g_param_spec_float (GST_PHOTOGRAPHY_PROP_LENS_FOCUS,
+ "Manual lens focus",
+ "Focus point in diopter units",
+ 0.0f, G_MAXFLOAT, 0.0f, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstPhotography:min-exposure-time:
+ *
+ * Minimum exposure time for automatic exposure mode.
+ */
+ g_object_interface_install_property (g_class,
+ g_param_spec_uint (GST_PHOTOGRAPHY_PROP_MIN_EXPOSURE_TIME,
+ "Minimum exposure time",
+ "Minimum exposure time for automatic exposure mode",
+ 0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstPhotography:max-exposure-time:
+ *
+ * Maximum exposure time for automatic exposure mode.
+ */
+ g_object_interface_install_property (g_class,
+ g_param_spec_uint (GST_PHOTOGRAPHY_PROP_MAX_EXPOSURE_TIME,
+ "Maximum exposure time",
+ "Maximum exposure time for automatic exposure mode",
+ 0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
/* Noise Reduction, Bayer an YCC noise reduction are enabled by default */
g_object_interface_install_property (g_class,
g_param_spec_flags (GST_PHOTOGRAPHY_PROP_NOISE_REDUCTION,
diff --git a/gst-libs/gst/interfaces/photography.h b/gst-libs/gst/interfaces/photography.h
index 27c55eb73..f0351bf2f 100644
--- a/gst-libs/gst/interfaces/photography.h
+++ b/gst-libs/gst/interfaces/photography.h
@@ -51,6 +51,9 @@ G_BEGIN_DECLS
/* Custom GstMessage name that will be sent to GstBus when shake risk changes */
#define GST_PHOTOGRAPHY_SHAKE_RISK "shake-risk"
+/* Maximum white point values used in #GstPhotographySettings */
+#define MAX_WHITE_POINT_VALUES 4
+
/* Interface property names */
#define GST_PHOTOGRAPHY_PROP_WB_MODE "white-balance-mode"
#define GST_PHOTOGRAPHY_PROP_COLOR_TONE "color-tone-mode"
@@ -63,7 +66,7 @@ G_BEGIN_DECLS
#define GST_PHOTOGRAPHY_PROP_EV_COMP "ev-compensation"
#define GST_PHOTOGRAPHY_PROP_ISO_SPEED "iso-speed"
#define GST_PHOTOGRAPHY_PROP_APERTURE "aperture"
-#define GST_PHOTOGRAPHY_PROP_EXPOSURE "exposure"
+#define GST_PHOTOGRAPHY_PROP_EXPOSURE_TIME "exposure-time"
#define GST_PHOTOGRAPHY_PROP_IMAGE_CAPTURE_SUPPORTED_CAPS \
"image-capture-supported-caps"
#define GST_PHOTOGRAPHY_PROP_IMAGE_PREVIEW_SUPPORTED_CAPS \
@@ -71,6 +74,13 @@ G_BEGIN_DECLS
#define GST_PHOTOGRAPHY_PROP_FLICKER_MODE "flicker-mode"
#define GST_PHOTOGRAPHY_PROP_FOCUS_MODE "focus-mode"
#define GST_PHOTOGRAPHY_PROP_ZOOM "zoom"
+#define GST_PHOTOGRAPHY_PROP_COLOR_TEMPERATURE "color-temperature"
+#define GST_PHOTOGRAPHY_PROP_WHITE_POINT "white-point"
+#define GST_PHOTOGRAPHY_PROP_ANALOG_GAIN "analog-gain"
+#define GST_PHOTOGRAPHY_PROP_EXPOSURE_MODE "exposure-mode"
+#define GST_PHOTOGRAPHY_PROP_LENS_FOCUS "lens-focus"
+#define GST_PHOTOGRAPHY_PROP_MIN_EXPOSURE_TIME "min-exposure-time"
+#define GST_PHOTOGRAPHY_PROP_MAX_EXPOSURE_TIME "max-exposure-time"
/**
* GstPhotography:
@@ -114,7 +124,8 @@ typedef enum
GST_PHOTOGRAPHY_WB_MODE_CLOUDY,
GST_PHOTOGRAPHY_WB_MODE_SUNSET,
GST_PHOTOGRAPHY_WB_MODE_TUNGSTEN,
- GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT
+ GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT,
+ GST_PHOTOGRAPHY_WB_MODE_MANUAL
} GstPhotographyWhiteBalanceMode;
typedef enum
@@ -175,8 +186,9 @@ typedef enum
GST_PHOTOGRAPHY_CAPS_APERTURE = (1 << 8),
GST_PHOTOGRAPHY_CAPS_EXPOSURE = (1 << 9),
GST_PHOTOGRAPHY_CAPS_SHAKE = (1 << 10),
- GST_PHOTOGRAPHY_CAPS_NOISE_REDUCTION = (1 << 11),
- GST_PHOTOGRAPHY_CAPS_FLICKER_REDUCTION = (1 << 12),
+ GST_PHOTOGRAPHY_CAPS_WHITE_BALANCE = (1 << 11),
+ GST_PHOTOGRAPHY_CAPS_NOISE_REDUCTION = (1 << 12),
+ GST_PHOTOGRAPHY_CAPS_FLICKER_REDUCTION = (1 << 13),
GST_PHOTOGRAPHY_CAPS_ALL = (~0)
} GstPhotographyCaps;
@@ -204,15 +216,21 @@ typedef enum {
GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED,
GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL,
GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED,
+ GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL
} GstPhotographyFocusMode;
+typedef enum {
+ GST_PHOTOGRAPHY_EXPOSURE_MODE_AUTO = 0,
+ GST_PHOTOGRAPHY_EXPOSURE_MODE_MANUAL
+} GstPhotographyExposureMode;
+
typedef struct
{
GstPhotographyWhiteBalanceMode wb_mode;
GstPhotographyColorToneMode tone_mode;
GstPhotographySceneMode scene_mode;
GstPhotographyFlashMode flash_mode;
- guint32 exposure;
+ guint32 exposure_time;
guint aperture;
gfloat ev_compensation;
guint iso_speed;
@@ -220,6 +238,13 @@ typedef struct
GstPhotographyFlickerReductionMode flicker_mode;
GstPhotographyFocusMode focus_mode;
GstPhotographyNoiseReduction noise_reduction;
+ GstPhotographyExposureMode exposure_mode;
+ guint color_temperature;
+ guint white_point[MAX_WHITE_POINT_VALUES];
+ gfloat analog_gain;
+ gfloat lens_focus;
+ guint min_exposure_time;
+ guint max_exposure_time;
} GstPhotographySettings;
/**