camera: Add GstPhotography property "white-balance".
[gstreamer-omap:gst-openmax.git] / omx / gstomx_camera_parameters.h
1 /* GStreamer
2  *
3  * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
4  *
5  * Description: OMX Camera element
6  *  Created on: Mar 22, 2011
7  *      Author: Joaquin Castellanos <jcastellanos@ti.com>
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation
12  * version 2.1 of the License.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
22  */
23
24 #define GST_USE_UNSTABLE_API TRUE
25
26 #include "gstomx_camera.h"
27 #include <gst/interfaces/photography.h>
28
29
30 /*
31  * Mode table
32  */
33 enum
34 {
35     MODE_PREVIEW        = 0,
36     MODE_VIDEO          = 1,
37     MODE_VIDEO_IMAGE    = 2,
38     MODE_IMAGE          = 3,
39     MODE_IMAGE_HS       = 4,
40 };
41
42
43
44 /**
45  * Table mapping mode to features and ports.  The mode is used as an index
46  * into this table to determine which ports and features are used in that
47  * particular mode.  Since there is some degree of overlap between various
48  * modes, this is to simplify the code to not care about modes, but instead
49  * just which bits are set in the config.
50  */
51 static const enum
52 {
53     /* ports that can be used: */
54     PORT_PREVIEW  = 0x01,
55     PORT_VIDEO    = 0x02,
56     PORT_IMAGE    = 0x04,
57 } config[] = {
58     /* MODE_PREVIEW */            PORT_PREVIEW,
59     /* MODE_VIDEO */              PORT_PREVIEW,
60     /* MODE_VIDEO_IMAGE */        PORT_PREVIEW | PORT_IMAGE,
61     /* MODE_IMAGE */              PORT_PREVIEW | PORT_IMAGE,
62     /* MODE_IMAGE_HS */           PORT_PREVIEW | PORT_IMAGE,
63 };
64
65
66 /*
67  * Shutter state
68  */
69 enum
70 {
71     SHUTTER_OFF         = 0,
72     SHUTTER_HALF_PRESS  = 1,
73     SHUTTER_FULL_PRESS  = 2,
74 };
75
76 /*
77  * Argument table
78  */
79 enum
80 {
81     ARG_0,
82     ARG_NUM_IMAGE_OUTPUT_BUFFERS,
83     ARG_NUM_VIDEO_OUTPUT_BUFFERS,
84     ARG_MODE,
85     ARG_SHUTTER,
86     ARG_ZOOM,
87     ARG_FOCUS,
88     ARG_AWB,
89     ARG_CONTRAST,
90     ARG_BRIGHTNESS,
91     ARG_EXPOSURE,
92     ARG_ISO,
93     ARG_ROTATION,
94     ARG_MIRROR,
95     ARG_SATURATION,
96     ARG_EXPOSUREVALUE,
97     ARG_MANUALFOCUS,
98     ARG_QFACTORJPEG,
99 #ifdef USE_OMXTICORE
100     ARG_THUMBNAIL_WIDTH,
101     ARG_THUMBNAIL_HEIGHT,
102     ARG_FLICKER,
103     ARG_SCENE,
104     ARG_VNF,
105     ARG_YUV_RANGE,
106     ARG_VSTAB,
107     ARG_DEVICE,
108     ARG_LDC,
109     ARG_NSF,
110     ARG_MTIS,
111     ARG_SENSOR_OVERCLOCK,
112     ARG_WB_COLORTEMP,
113     ARG_FOCUSSPOT_WEIGHT,
114     ARG_SHARPNESS,
115     ARG_CAC,
116     ARG_GBCE,
117     ARG_GLBCE,
118     ARG_SCENE_MODE,
119     ARG_WHITE_BALANCE
120 #endif
121 };
122
123 /*
124  * Camera initial values and limits
125  */
126 #define DEFAULT_ZOOM_LEVEL          100
127 #define MIN_ZOOM_LEVEL              100
128 #define MAX_ZOOM_LEVEL              800
129 #define CAM_ZOOM_IN_STEP            65536
130 #define DEFAULT_FOCUS               OMX_IMAGE_FocusControlOff
131 #define DEFAULT_AWB                 OMX_WhiteBalControlOff
132 #define DEFAULT_EXPOSURE            OMX_ExposureControlOff
133 #define DEFAULT_CONTRAST_LEVEL      0
134 #define MIN_CONTRAST_LEVEL          -100
135 #define MAX_CONTRAST_LEVEL          100
136 #define DEFAULT_BRIGHTNESS_LEVEL    50
137 #define MIN_BRIGHTNESS_LEVEL        0
138 #define MAX_BRIGHTNESS_LEVEL        100
139 #define DEFAULT_ISO_LEVEL           0
140 #define MIN_ISO_LEVEL               0
141 #define MAX_ISO_LEVEL               1600
142 #define DEFAULT_ROTATION            180
143 #define DEFAULT_MIRROR              OMX_MirrorNone
144 #define MIN_SATURATION_VALUE        -100
145 #define MAX_SATURATION_VALUE        100
146 #define DEFAULT_SATURATION_VALUE    0
147 #define MIN_EXPOSURE_VALUE          -3.0
148 #define MAX_EXPOSURE_VALUE          3.0
149 #define DEFAULT_EXPOSURE_VALUE      0.0
150 #define MIN_MANUALFOCUS             0
151 #define MAX_MANUALFOCUS             100
152 #define DEFAULT_MANUALFOCUS         50
153 #define MIN_QFACTORJPEG             1
154 #define MAX_QFACTORJPEG             100
155 #define DEFAULT_QFACTORJPEG         75
156 #ifdef USE_OMXTICORE
157 #  define DEFAULT_THUMBNAIL_WIDTH   352
158 #  define DEFAULT_THUMBNAIL_HEIGHT  288
159 #  define MIN_THUMBNAIL_LEVEL       16
160 #  define MAX_THUMBNAIL_LEVEL       1920
161 #  define DEFAULT_FLICKER           OMX_FlickerCancelOff
162 #  define DEFAULT_SCENE             OMX_Manual
163 #  define DEFAULT_VNF               OMX_VideoNoiseFilterModeOn
164 #  define DEFAULT_YUV_RANGE         OMX_ITURBT601
165 #  define DEFAULT_DEVICE            OMX_PrimarySensor
166 #  define DEFAULT_NSF               OMX_ISONoiseFilterModeOff
167 #  define DEFAULT_WB_COLORTEMP_VALUE  5000
168 #  define MIN_WB_COLORTEMP_VALUE    2020
169 #  define MAX_WB_COLORTEMP_VALUE    7100
170 #  define DEFAULT_FOCUSSPOT_WEIGHT  OMX_FocusSpotDefault
171 #  define MIN_SHARPNESS_VALUE       -100
172 #  define MAX_SHARPNESS_VALUE       100
173 #  define DEFAULT_SHARPNESS_VALUE   0
174 #  define DEFAULT_GBCE              OMX_TI_BceModeOff
175 #  define DEFAULT_GLBCE             OMX_TI_BceModeOff
176 #endif
177
178
179 /*
180  * Enums:
181  */
182
183 #define GST_TYPE_OMX_CAMERA_MODE (gst_omx_camera_mode_get_type ())
184 GType gst_omx_camera_mode_get_type (void);
185
186
187 /*
188  * OMX Structure wrappers
189  */
190 #define GST_TYPE_OMX_CAMERA_SHUTTER (gst_omx_camera_shutter_get_type ())
191 GType gst_omx_camera_shutter_get_type (void);
192
193 #define GST_TYPE_OMX_CAMERA_FOCUS (gst_omx_camera_focus_get_type ())
194 GType gst_omx_camera_focus_get_type (void);
195
196 #define GST_TYPE_OMX_CAMERA_AWB (gst_omx_camera_awb_get_type ())
197 GType gst_omx_camera_awb_get_type (void);
198
199 #define GST_TYPE_OMX_CAMERA_EXPOSURE (gst_omx_camera_exposure_get_type ())
200 GType gst_omx_camera_exposure_get_type (void);
201
202 #define GST_TYPE_OMX_CAMERA_MIRROR (gst_omx_camera_mirror_get_type ())
203 GType gst_omx_camera_mirror_get_type (void);
204
205
206 #ifdef USE_OMXTICORE
207
208 #define GST_TYPE_OMX_CAMERA_FLICKER (gst_omx_camera_flicker_get_type ())
209 GType gst_omx_camera_flicker_get_type (void);
210
211 #define GST_TYPE_OMX_CAMERA_SCENE (gst_omx_camera_scene_get_type ())
212 GType gst_omx_camera_scene_get_type (void);
213
214 #define GST_TYPE_OMX_CAMERA_VNF (gst_omx_camera_vnf_get_type ())
215 GType gst_omx_camera_vnf_get_type (void);
216
217 #define GST_TYPE_OMX_CAMERA_YUV_RANGE (gst_omx_camera_yuv_range_get_type ())
218 GType gst_omx_camera_yuv_range_get_type (void);
219
220 #define GST_TYPE_OMX_CAMERA_DEVICE (gst_omx_camera_device_get_type ())
221 GType gst_omx_camera_device_get_type (void);
222
223 #define GST_TYPE_OMX_CAMERA_NSF (gst_omx_camera_nsf_get_type ())
224 GType gst_omx_camera_nsf_get_type (void);
225
226 #define GST_TYPE_OMX_CAMERA_FOCUSSPOT_WEIGHT (gst_omx_camera_focusspot_weight_get_type ())
227 GType gst_omx_camera_focusspot_weight_get_type (void);
228
229 #define GST_TYPE_OMX_CAMERA_BCE (gst_omx_camera_bce_get_type ())
230 GType gst_omx_camera_bce_get_type (void);
231
232 #endif
233
234 /*
235  *  Methods:
236  */
237 void set_camera_operating_mode (GstOmxCamera *self);
238 void set_property (GObject *obj, guint prop_id, const GValue *value, GParamSpec *pspec);
239 void get_property (GObject *obj, guint prop_id, GValue *value, GParamSpec *pspec);
240 void install_camera_properties(GObjectClass *gobject_class);
241
242
243 GstPhotoCaps gst_omx_camera_photography_get_capabilities (
244         GstPhotography *photo);
245 gboolean gst_omx_camera_photography_get_ev_compensation (GstPhotography *photo,
246                                                          gfloat *evcomp);
247 gboolean gst_omx_camera_photography_get_iso_speed (GstPhotography *photo,
248                                                    guint *iso_speed);
249 gboolean gst_omx_camera_photography_get_white_balance_mode (
250     GstPhotography *photo, GstWhiteBalanceMode *wb_mode);
251 gboolean gst_omx_camera_photography_get_scene_mode (GstPhotography *photo,
252                                                     GstSceneMode *scene_mode);
253 gboolean gst_omx_camera_photography_get_zoom (GstPhotography *photo,
254                                               gfloat *zoom);
255 gboolean gst_omx_camera_photography_set_ev_compensation (GstPhotography *photo,
256                                                          gfloat evcomp);
257 gboolean gst_omx_camera_photography_set_iso_speed (GstPhotography *photo,
258                                                    guint iso_speed);
259 gboolean gst_omx_camera_photography_set_white_balance_mode (
260     GstPhotography *photo, GstWhiteBalanceMode wb_mode);
261 gboolean gst_omx_camera_photography_set_scene_mode (GstPhotography *photo,
262                                                     GstSceneMode scene_mode);
263 gboolean gst_omx_camera_photography_set_zoom (GstPhotography *photo,
264                                               gfloat zoom);