1 /* GStreamer 2 * 3 * Copyright (C) 2008 Nokia Corporation <multimedia@maemo.org> 4 * 5 * photography.h: photography interface for digital imaging 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Library General Public 9 * License as published by the Free Software Foundation; either 10 * version 2 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Library General Public License for more details. 16 * 17 * You should have received a copy of the GNU Library General Public 18 * License along with this library; if not, write to the 19 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 20 * Boston, MA 02110-1301, USA. 21 */ 22 23 #ifndef __GST_PHOTOGRAPHY_H__ 24 #define __GST_PHOTOGRAPHY_H__ 25 26 #ifndef GST_USE_UNSTABLE_API 27 #warning "The GstPhotography interface is unstable API and may change in future." 28 #warning "You can define GST_USE_UNSTABLE_API to avoid this warning." 29 #endif 30 31 #include <gst/gst.h> 32 #include <gst/interfaces/photography-prelude.h> 33 #include <gst/interfaces/photography-enumtypes.h> 34 35 G_BEGIN_DECLS 36 37 #define GST_TYPE_PHOTOGRAPHY \ 38 (gst_photography_get_type ()) 39 #define GST_PHOTOGRAPHY(obj) \ 40 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PHOTOGRAPHY, GstPhotography)) 41 #define GST_IS_PHOTOGRAPHY(obj) \ 42 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PHOTOGRAPHY)) 43 #define GST_PHOTOGRAPHY_GET_INTERFACE(inst) \ 44 (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_PHOTOGRAPHY, GstPhotographyInterface)) 45 46 47 /** 48 * GST_PHOTOGRAPHY_AUTOFOCUS_DONE: 49 * 50 * Name of custom GstMessage that will be posted to #GstBus when autofocusing 51 * is complete. 52 * This message contains following fields: 53 * 54 * * `status` (#GstPhotographyFocusStatus): Tells if focusing succeeded or failed. 55 * 56 * * `focus-window-rows` (#G_TYPE_INT): Tells number of focus matrix rows. 57 * 58 * * `focus-window-columns` (#G_TYPE_INT): Tells number of focus matrix columns. 59 * 60 * * `focus-window-mask` (#G_TYPE_INT): Bitmask containing rows x columns bits 61 * which mark the focus points in the focus matrix. Lowest bit (LSB) always 62 * represents the top-left corner of the focus matrix. This field is only valid 63 * when focusing status is SUCCESS. 64 */ 65 #define GST_PHOTOGRAPHY_AUTOFOCUS_DONE "autofocus-done" 66 67 /** 68 * GST_PHOTOGRAPHY_SHAKE_RISK: 69 * 70 * Name of custom GstMessage that is posted to #GstBus during autofocusing 71 * process. It is posted if there is change in the risk of captured image 72 * becoming "shaken" due to camera movement and too long exposure time. 73 * 74 * This message contains following fields: 75 * 76 * * `status` (#GstPhotographyShakeRisk): Tells risk level of capturing shaken image. 77 */ 78 #define GST_PHOTOGRAPHY_SHAKE_RISK "shake-risk" 79 80 /* Maximum white point values used in #GstPhotographySettings */ 81 #define MAX_WHITE_POINT_VALUES 4 82 83 /* Interface property names */ 84 #define GST_PHOTOGRAPHY_PROP_WB_MODE "white-balance-mode" 85 #define GST_PHOTOGRAPHY_PROP_COLOR_TONE "color-tone-mode" 86 #define GST_PHOTOGRAPHY_PROP_SCENE_MODE "scene-mode" 87 #define GST_PHOTOGRAPHY_PROP_FLASH_MODE "flash-mode" 88 #define GST_PHOTOGRAPHY_PROP_NOISE_REDUCTION "noise-reduction" 89 #define GST_PHOTOGRAPHY_PROP_FOCUS_STATUS "focus-status" 90 #define GST_PHOTOGRAPHY_PROP_CAPABILITIES "capabilities" 91 #define GST_PHOTOGRAPHY_PROP_SHAKE_RISK "shake-risk" 92 #define GST_PHOTOGRAPHY_PROP_EV_COMP "ev-compensation" 93 #define GST_PHOTOGRAPHY_PROP_ISO_SPEED "iso-speed" 94 #define GST_PHOTOGRAPHY_PROP_APERTURE "aperture" 95 #define GST_PHOTOGRAPHY_PROP_EXPOSURE_TIME "exposure-time" 96 #define GST_PHOTOGRAPHY_PROP_IMAGE_CAPTURE_SUPPORTED_CAPS \ 97 "image-capture-supported-caps" 98 #define GST_PHOTOGRAPHY_PROP_IMAGE_PREVIEW_SUPPORTED_CAPS \ 99 "image-preview-supported-caps" 100 #define GST_PHOTOGRAPHY_PROP_FLICKER_MODE "flicker-mode" 101 #define GST_PHOTOGRAPHY_PROP_FOCUS_MODE "focus-mode" 102 #define GST_PHOTOGRAPHY_PROP_ZOOM "zoom" 103 #define GST_PHOTOGRAPHY_PROP_COLOR_TEMPERATURE "color-temperature" 104 #define GST_PHOTOGRAPHY_PROP_WHITE_POINT "white-point" 105 #define GST_PHOTOGRAPHY_PROP_ANALOG_GAIN "analog-gain" 106 #define GST_PHOTOGRAPHY_PROP_EXPOSURE_MODE "exposure-mode" 107 #define GST_PHOTOGRAPHY_PROP_LENS_FOCUS "lens-focus" 108 #define GST_PHOTOGRAPHY_PROP_MIN_EXPOSURE_TIME "min-exposure-time" 109 #define GST_PHOTOGRAPHY_PROP_MAX_EXPOSURE_TIME "max-exposure-time" 110 111 /** 112 * GstPhotography: 113 * 114 * Opaque #GstPhotography data structure. 115 */ 116 typedef struct _GstPhotography GstPhotography; 117 118 /** 119 * GstPhotographyNoiseReduction: 120 * @GST_PHOTOGRAPHY_NOISE_REDUCTION_BAYER: Adaptive noise reduction on Bayer 121 * format 122 * @GST_PHOTOGRAPHY_NOISE_REDUCTION_YCC: reduces the noise on Y and 2-chroma 123 * images. 124 * @GST_PHOTOGRAPHY_NOISE_REDUCTION_TEMPORAL: Multi-frame adaptive NR, 125 * provided for the video mode 126 * @GST_PHOTOGRAPHY_NOISE_REDUCTION_FIXED: Fixed Pattern Noise refers to noise 127 * that does not change between frames. The noise is removed from the sensor 128 * image, by subtracting a previously-captured black image in memory. 129 * @GST_PHOTOGRAPHY_NOISE_REDUCTION_EXTRA: Extra Noise Reduction. In the case 130 * of high-ISO capturing, some noise remains after YCC NR. XNR reduces this 131 * remaining noise. 132 * 133 * Noise Reduction features of a photography capture or filter element. 134 */ 135 typedef enum 136 { 137 GST_PHOTOGRAPHY_NOISE_REDUCTION_BAYER = (1 << 0), 138 GST_PHOTOGRAPHY_NOISE_REDUCTION_YCC = (1 << 1), 139 GST_PHOTOGRAPHY_NOISE_REDUCTION_TEMPORAL = (1 << 2), 140 GST_PHOTOGRAPHY_NOISE_REDUCTION_FIXED = (1 << 3), 141 GST_PHOTOGRAPHY_NOISE_REDUCTION_EXTRA = (1 << 4) 142 } GstPhotographyNoiseReduction; 143 144 /** 145 * GstPhotographyWhiteBalanceMode: 146 * @GST_PHOTOGRAPHY_WB_MODE_AUTO: Choose white balance mode automatically 147 * @GST_PHOTOGRAPHY_WB_MODE_DAYLIGHT: Mode for daylight conditions 148 * @GST_PHOTOGRAPHY_WB_MODE_CLOUDY: Mode for cloudy conditions 149 * @GST_PHOTOGRAPHY_WB_MODE_SUNSET: Mode for sunset conditions 150 * @GST_PHOTOGRAPHY_WB_MODE_TUNGSTEN: Mode for tungsten lighting 151 * @GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT: Mode for fluorescent lighting 152 * @GST_PHOTOGRAPHY_WB_MODE_MANUAL: Disable automatic white balance adjustment 153 * and keep current values. 154 * @GST_PHOTOGRAPHY_WB_MODE_WARM_FLUORESCENT: Mode for warm fluorescent lighting (Since: 1.2) 155 * @GST_PHOTOGRAPHY_WB_MODE_SHADE: Mode for shade lighting (Since: 1.2) 156 * 157 * Modes for white balance control. 158 */ 159 typedef enum 160 { 161 GST_PHOTOGRAPHY_WB_MODE_AUTO = 0, 162 GST_PHOTOGRAPHY_WB_MODE_DAYLIGHT, 163 GST_PHOTOGRAPHY_WB_MODE_CLOUDY, 164 GST_PHOTOGRAPHY_WB_MODE_SUNSET, 165 GST_PHOTOGRAPHY_WB_MODE_TUNGSTEN, 166 GST_PHOTOGRAPHY_WB_MODE_FLUORESCENT, 167 GST_PHOTOGRAPHY_WB_MODE_MANUAL, 168 GST_PHOTOGRAPHY_WB_MODE_WARM_FLUORESCENT, 169 GST_PHOTOGRAPHY_WB_MODE_SHADE 170 } GstPhotographyWhiteBalanceMode; 171 172 /** 173 * GstPhotographyColorToneMode: 174 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL: No effects 175 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SEPIA: Sepia 176 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEGATIVE: Negative 177 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRAYSCALE: Grayscale 178 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_NATURAL: Natural 179 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_VIVID: Vivid 180 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_COLORSWAP: Colorswap 181 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SOLARIZE: Solarize 182 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_OUT_OF_FOCUS: Out of focus 183 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKY_BLUE: Sky blue 184 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRASS_GREEN: Grass green 185 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKIN_WHITEN: Skin whiten 186 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_POSTERIZE: Posterize (Since: 1.2) 187 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_WHITEBOARD: Whiteboard (Since: 1.2) 188 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_BLACKBOARD: Blackboard (Since: 1.2) 189 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_AQUA: Aqua (Since: 1.2) 190 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_EMBOSS: Emboss (Since: 1.18) 191 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKETCH: Sketch (Since: 1.18) 192 * @GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEON: Neon (Since: 1.18) 193 * 194 * 195 * Modes for special color effects. 196 */ 197 typedef enum 198 { 199 GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL = 0, 200 GST_PHOTOGRAPHY_COLOR_TONE_MODE_SEPIA, 201 GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEGATIVE, 202 GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRAYSCALE, 203 GST_PHOTOGRAPHY_COLOR_TONE_MODE_NATURAL, 204 GST_PHOTOGRAPHY_COLOR_TONE_MODE_VIVID, 205 GST_PHOTOGRAPHY_COLOR_TONE_MODE_COLORSWAP, 206 GST_PHOTOGRAPHY_COLOR_TONE_MODE_SOLARIZE, 207 GST_PHOTOGRAPHY_COLOR_TONE_MODE_OUT_OF_FOCUS, 208 GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKY_BLUE, 209 GST_PHOTOGRAPHY_COLOR_TONE_MODE_GRASS_GREEN, 210 GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKIN_WHITEN, 211 GST_PHOTOGRAPHY_COLOR_TONE_MODE_POSTERIZE, 212 GST_PHOTOGRAPHY_COLOR_TONE_MODE_WHITEBOARD, 213 GST_PHOTOGRAPHY_COLOR_TONE_MODE_BLACKBOARD, 214 GST_PHOTOGRAPHY_COLOR_TONE_MODE_AQUA, 215 GST_PHOTOGRAPHY_COLOR_TONE_MODE_EMBOSS, 216 GST_PHOTOGRAPHY_COLOR_TONE_MODE_SKETCH, 217 GST_PHOTOGRAPHY_COLOR_TONE_MODE_NEON 218 } GstPhotographyColorToneMode; 219 220 /** 221 * GstPhotographySceneMode: 222 * @GST_PHOTOGRAPHY_SCENE_MODE_MANUAL: Set individual options manually 223 * @GST_PHOTOGRAPHY_SCENE_MODE_CLOSEUP: Mode for close objects 224 * @GST_PHOTOGRAPHY_SCENE_MODE_PORTRAIT: Mode for portraits 225 * @GST_PHOTOGRAPHY_SCENE_MODE_LANDSCAPE: Mode for landscapes 226 * @GST_PHOTOGRAPHY_SCENE_MODE_SPORT: Mode for scene with fast motion 227 * @GST_PHOTOGRAPHY_SCENE_MODE_NIGHT: Mode for night conditions 228 * @GST_PHOTOGRAPHY_SCENE_MODE_AUTO: Choose scene mode automatically 229 * @GST_PHOTOGRAPHY_SCENE_MODE_ACTION: Take photos of fast moving 230 * objects (Since: 1.2) 231 * @GST_PHOTOGRAPHY_SCENE_MODE_NIGHT_PORTRAIT: Take people pictures 232 * at night (Since: 1.2) 233 * @GST_PHOTOGRAPHY_SCENE_MODE_THEATRE: Take photos in a theater (Since: 1.2) 234 * @GST_PHOTOGRAPHY_SCENE_MODE_BEACH: Take pictures on the beach (Since: 1.2) 235 * @GST_PHOTOGRAPHY_SCENE_MODE_SNOW: Take pictures on the snow (Since: 1.2) 236 * @GST_PHOTOGRAPHY_SCENE_MODE_SUNSET: Take sunset photos (Since: 1.2) 237 * @GST_PHOTOGRAPHY_SCENE_MODE_STEADY_PHOTO: Avoid blurry pictures 238 * (for example, due to hand shake) (Since: 1.2) 239 * @GST_PHOTOGRAPHY_SCENE_MODE_FIREWORKS: For shooting firework 240 * displays (Since: 1.2) 241 * @GST_PHOTOGRAPHY_SCENE_MODE_PARTY: Take indoor low-light shot (Since: 1.2) 242 * @GST_PHOTOGRAPHY_SCENE_MODE_CANDLELIGHT: Capture the naturally warm color 243 * of scenes lit by candles (Since: 1.2) 244 * @GST_PHOTOGRAPHY_SCENE_MODE_BARCODE: Applications are looking for 245 * a barcode (Since: 1.2) 246 * @GST_PHOTOGRAPHY_SCENE_MODE_BACKLIGHT: Backlit photos (Since: 1.18) 247 * @GST_PHOTOGRAPHY_SCENE_MODE_FLOWERS: For shooting flowers (Since: 1.18) 248 * @GST_PHOTOGRAPHY_SCENE_MODE_AR: Specific for Augmented Reality (Since: 1.18) 249 * @GST_PHOTOGRAPHY_SCENE_MODE_HDR: High Dynamic Range photography (Since: 1.18) 250 * 251 * Each mode contains preset #GstPhotography options in order to produce 252 * good capturing result in certain scene. 253 */ 254 typedef enum 255 { 256 GST_PHOTOGRAPHY_SCENE_MODE_MANUAL = 0, 257 GST_PHOTOGRAPHY_SCENE_MODE_CLOSEUP, 258 GST_PHOTOGRAPHY_SCENE_MODE_PORTRAIT, 259 GST_PHOTOGRAPHY_SCENE_MODE_LANDSCAPE, 260 GST_PHOTOGRAPHY_SCENE_MODE_SPORT, 261 GST_PHOTOGRAPHY_SCENE_MODE_NIGHT, 262 GST_PHOTOGRAPHY_SCENE_MODE_AUTO, 263 GST_PHOTOGRAPHY_SCENE_MODE_ACTION, 264 GST_PHOTOGRAPHY_SCENE_MODE_NIGHT_PORTRAIT, 265 GST_PHOTOGRAPHY_SCENE_MODE_THEATRE, 266 GST_PHOTOGRAPHY_SCENE_MODE_BEACH, 267 GST_PHOTOGRAPHY_SCENE_MODE_SNOW, 268 GST_PHOTOGRAPHY_SCENE_MODE_SUNSET, 269 GST_PHOTOGRAPHY_SCENE_MODE_STEADY_PHOTO, 270 GST_PHOTOGRAPHY_SCENE_MODE_FIREWORKS, 271 GST_PHOTOGRAPHY_SCENE_MODE_PARTY, 272 GST_PHOTOGRAPHY_SCENE_MODE_CANDLELIGHT, 273 GST_PHOTOGRAPHY_SCENE_MODE_BARCODE, 274 GST_PHOTOGRAPHY_SCENE_MODE_BACKLIGHT, 275 GST_PHOTOGRAPHY_SCENE_MODE_FLOWERS, 276 GST_PHOTOGRAPHY_SCENE_MODE_AR, 277 GST_PHOTOGRAPHY_SCENE_MODE_HDR 278 } GstPhotographySceneMode; 279 280 /** 281 * GstPhotographyFlashMode: 282 * @GST_PHOTOGRAPHY_FLASH_MODE_AUTO: Fire flash automatically according to 283 * lighting conditions. 284 * @GST_PHOTOGRAPHY_FLASH_MODE_OFF: Never fire flash 285 * @GST_PHOTOGRAPHY_FLASH_MODE_ON: Always fire flash 286 * @GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN: Fill in flash 287 * @GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE: Flash mode for reducing chance of 288 * capturing red eyes 289 * 290 * Modes for flash control. 291 */ 292 typedef enum 293 { 294 GST_PHOTOGRAPHY_FLASH_MODE_AUTO = 0, 295 GST_PHOTOGRAPHY_FLASH_MODE_OFF, 296 GST_PHOTOGRAPHY_FLASH_MODE_ON, 297 GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN, 298 GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE 299 } GstPhotographyFlashMode; 300 301 /** 302 * GstPhotographyFocusStatus: 303 * @GST_PHOTOGRAPHY_FOCUS_STATUS_NONE: No status available 304 * @GST_PHOTOGRAPHY_FOCUS_STATUS_RUNNING: Focusing is ongoing 305 * @GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL: Focusing failed 306 * @GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS: Focusing succeeded 307 * 308 * Status of the focusing operation, used in #GST_PHOTOGRAPHY_AUTOFOCUS_DONE 309 * message. 310 */ 311 typedef enum 312 { 313 GST_PHOTOGRAPHY_FOCUS_STATUS_NONE = 0, 314 GST_PHOTOGRAPHY_FOCUS_STATUS_RUNNING, 315 GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL, 316 GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS 317 } GstPhotographyFocusStatus; 318 319 /** 320 * GstPhotographyCaps: 321 * 322 * Bitmask that indicates which #GstPhotography interface features an instance 323 * supports. 324 */ 325 typedef enum 326 { 327 GST_PHOTOGRAPHY_CAPS_NONE = (0 << 0), 328 GST_PHOTOGRAPHY_CAPS_EV_COMP = (1 << 0), 329 GST_PHOTOGRAPHY_CAPS_ISO_SPEED = (1 << 1), 330 GST_PHOTOGRAPHY_CAPS_WB_MODE = (1 << 2), 331 GST_PHOTOGRAPHY_CAPS_TONE = (1 << 3), 332 GST_PHOTOGRAPHY_CAPS_SCENE = (1 << 4), 333 GST_PHOTOGRAPHY_CAPS_FLASH = (1 << 5), 334 GST_PHOTOGRAPHY_CAPS_ZOOM = (1 << 6), 335 GST_PHOTOGRAPHY_CAPS_FOCUS = (1 << 7), 336 GST_PHOTOGRAPHY_CAPS_APERTURE = (1 << 8), 337 GST_PHOTOGRAPHY_CAPS_EXPOSURE = (1 << 9), 338 GST_PHOTOGRAPHY_CAPS_SHAKE = (1 << 10), 339 GST_PHOTOGRAPHY_CAPS_WHITE_BALANCE = (1 << 11), 340 GST_PHOTOGRAPHY_CAPS_NOISE_REDUCTION = (1 << 12), 341 GST_PHOTOGRAPHY_CAPS_FLICKER_REDUCTION = (1 << 13), 342 GST_PHOTOGRAPHY_CAPS_ALL = (~0) 343 } GstPhotographyCaps; 344 345 /** 346 * GstPhotographyShakeRisk: 347 * @GST_PHOTOGRAPHY_SHAKE_RISK_LOW: Low risk 348 * @GST_PHOTOGRAPHY_SHAKE_RISK_MEDIUM: Medium risk 349 * @GST_PHOTOGRAPHY_SHAKE_RISK_HIGH: High risk 350 * 351 * Risk level of captured image becoming "shaken" due to camera movement and 352 * too long exposure time. Used in #GST_PHOTOGRAPHY_SHAKE_RISK #GstMessage. 353 */ 354 typedef enum 355 { 356 GST_PHOTOGRAPHY_SHAKE_RISK_LOW = 0, 357 GST_PHOTOGRAPHY_SHAKE_RISK_MEDIUM, 358 GST_PHOTOGRAPHY_SHAKE_RISK_HIGH, 359 } GstPhotographyShakeRisk; 360 361 /** 362 * GstPhotographyFlickerReductionMode: 363 * @GST_PHOTOGRAPHY_FLICKER_REDUCTION_OFF: Disable flicker reduction 364 * @GST_PHOTOGRAPHY_FLICKER_REDUCTION_50HZ: 50Hz flicker reduction 365 * @GST_PHOTOGRAPHY_FLICKER_REDUCTION_60HZ: 60Hz flicker reduction 366 * @GST_PHOTOGRAPHY_FLICKER_REDUCTION_AUTO: Choose mode automatically 367 * 368 * Reduce flicker in video caused by light source fluctuation. 369 */ 370 typedef enum 371 { 372 GST_PHOTOGRAPHY_FLICKER_REDUCTION_OFF = 0, 373 GST_PHOTOGRAPHY_FLICKER_REDUCTION_50HZ, 374 GST_PHOTOGRAPHY_FLICKER_REDUCTION_60HZ, 375 GST_PHOTOGRAPHY_FLICKER_REDUCTION_AUTO, 376 } GstPhotographyFlickerReductionMode; 377 378 /** 379 * GstPhotographyFocusMode: 380 * @GST_PHOTOGRAPHY_FOCUS_MODE_AUTO: Choose focus mode automatically 381 * @GST_PHOTOGRAPHY_FOCUS_MODE_MACRO: Mode for focusing objects close to lens 382 * @GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT: Mode for portraits 383 * @GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY: Mode for landscapes and far away objects 384 * @GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL: Mode for maximum depth of field, keeping 385 * focus acceptable both in infinify and as close objects as possible 386 * @GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED: Extended focus mode 387 * @GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL: Continuous autofocus mode 388 * @GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED: Extended continuous 389 * autofocus mode 390 * @GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL: Disable automatic focusing 391 * and keep current value. #GstPhotography:lens-focus property can 392 * be used to change focus manually. 393 * 394 * Choose mode for focusing algorithm. 395 */ 396 typedef enum { 397 GST_PHOTOGRAPHY_FOCUS_MODE_AUTO = 0, 398 GST_PHOTOGRAPHY_FOCUS_MODE_MACRO, 399 GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT, 400 GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY, 401 GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL, 402 GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED, 403 GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL, 404 GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED, 405 GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL 406 } GstPhotographyFocusMode; 407 408 /** 409 * GstPhotographyExposureMode: 410 * @GST_PHOTOGRAPHY_EXPOSURE_MODE_AUTO: Adjust exposure automatically 411 * @GST_PHOTOGRAPHY_EXPOSURE_MODE_MANUAL: Disable automatic exposure adjustment 412 * and keep current values. 413 * 414 */ 415 typedef enum { 416 GST_PHOTOGRAPHY_EXPOSURE_MODE_AUTO = 0, 417 GST_PHOTOGRAPHY_EXPOSURE_MODE_MANUAL 418 } GstPhotographyExposureMode; 419 420 /** 421 * GstPhotographySettings: 422 * 423 * Structure containing all #GstPhotography settings, used to set all 424 * settings in one call with @gst_photography_set_config(). 425 */ 426 typedef struct 427 { 428 GstPhotographyWhiteBalanceMode wb_mode; 429 GstPhotographyColorToneMode tone_mode; 430 GstPhotographySceneMode scene_mode; 431 GstPhotographyFlashMode flash_mode; 432 guint32 exposure_time; 433 guint aperture; 434 gfloat ev_compensation; 435 guint iso_speed; 436 gfloat zoom; 437 GstPhotographyFlickerReductionMode flicker_mode; 438 GstPhotographyFocusMode focus_mode; 439 GstPhotographyNoiseReduction noise_reduction; 440 GstPhotographyExposureMode exposure_mode; 441 guint color_temperature; 442 guint white_point[MAX_WHITE_POINT_VALUES]; 443 gfloat analog_gain; 444 gfloat lens_focus; 445 guint min_exposure_time; 446 guint max_exposure_time; 447 /* FIXME: add padding? */ 448 } GstPhotographySettings; 449 450 /** 451 * GstPhotographyCapturePrepared: 452 * @data: user data that has been given, when registering the callback 453 * @configured_caps: #GstCaps defining the configured capture format. 454 * Ownership of these caps stays in the element. 455 * 456 * This callback will be called when the element has finished preparations 457 * and is ready for image capture. The next buffer that element produces 458 * will be of @configured_caps format, so this callback allows the application 459 * to e.g. reconfigure capsfilters in pipeline if any. 460 */ 461 typedef void (*GstPhotographyCapturePrepared) (gpointer data, const GstCaps *configured_caps); 462 463 /** 464 * GstPhotographyInterface: 465 * @parent: parent interface type. 466 * @get_ev_compensation: vmethod to get ev exposure compensation value 467 * @get_iso_speed: vmethod to get iso speed (light sensitivity) value 468 * @get_aperture: vmethod to get aperture value 469 * @get_exposure: vmethod to get exposure time value 470 * @get_white_balance_mode: vmethod to get white balance mode value 471 * @get_color_tone_mode: vmethod to get color tone mode value 472 * @get_scene_mode: vmethod to get scene mode value 473 * @get_flash_mode: vmethod to get flash mode value 474 * @get_noise_reduction: vmethod to get noise reduction mode value 475 * @get_zoom: vmethod to get zoom factor value 476 * @set_ev_compensation: vmethod to set ev exposure compensation value 477 * @set_iso_speed: vmethod to set iso speed (light sensitivity) value 478 * @set_aperture: vmethod to set aperture value 479 * @set_exposure: vmethod to set exposure time value 480 * @set_white_balance_mode: vmethod to set white balance mode value 481 * @set_color_tone_mode: vmethod to set color tone mode value 482 * @set_scene_mode: vmethod to set scene mode value 483 * @set_flash_mode: vmethod to set flash mode value 484 * @set_noise_reduction: vmethod to set noise reduction mode value 485 * @set_zoom: vmethod to set zoom factor value 486 * @get_capabilities: vmethod to get supported capabilities of the interface 487 * @prepare_for_capture: vmethod to tell the element to prepare for capturing 488 * @set_autofocus: vmethod to set autofocus on/off 489 * @set_config: vmethod to set all configuration parameters at once 490 * @get_config: vmethod to get all configuration parameters at once 491 * @get_image_capture_supported_caps: vmethod to get caps describing supported image capture formats 492 * @set_exposure_mode: vmethod to set exposure mode (Since: 1.18) 493 * @get_exposure_mode: vmethod to get exposure mode (Since: 1.18) 494 * @set_analog_gain: vmethod to set analog gain (Since: 1.18) 495 * @get_analog_gain: vmethod to get analog gain (Since: 1.18) 496 * @set_lens_focus: vmethod to set lens focus (Since: 1.18) 497 * @get_lens_focus: vmethod to get lens focus (Since: 1.18) 498 * @set_color_temperature: vmethod to set color temperature (Since: 1.18) 499 * @get_color_temperature: vmethod to get color temperature (Since: 1.18) 500 * @set_min_exposure_time: vmethod to set min exposure time (Since: 1.18) 501 * @get_min_exposure_time: vmethod to get min exposure time (Since: 1.18) 502 * @set_max_exposure_time: vmethod to set max exposure time (Since: 1.18) 503 * @get_max_exposure_time: vmethod to get max exposure time (Since: 1.18) 504 * 505 * #GstPhotographyInterface interface. 506 */ 507 typedef struct _GstPhotographyInterface 508 { 509 GTypeInterface parent; 510 511 /* virtual functions */ 512 gboolean (*get_ev_compensation) (GstPhotography * photo, gfloat * ev_comp); 513 gboolean (*get_iso_speed) (GstPhotography * photo, guint * iso_speed); 514 gboolean (*get_aperture) (GstPhotography * photo, guint * aperture); 515 gboolean (*get_exposure) (GstPhotography * photo, guint32 * exposure); 516 gboolean (*get_white_balance_mode) (GstPhotography * photo, GstPhotographyWhiteBalanceMode * wb_mode); 517 gboolean (*get_color_tone_mode) (GstPhotography * photo, GstPhotographyColorToneMode * tone_mode); 518 gboolean (*get_scene_mode) (GstPhotography * photo, GstPhotographySceneMode * scene_mode); 519 gboolean (*get_flash_mode) (GstPhotography * photo, GstPhotographyFlashMode * flash_mode); 520 gboolean (*get_zoom) (GstPhotography * photo, gfloat * zoom); 521 gboolean (*get_flicker_mode) (GstPhotography * photo, GstPhotographyFlickerReductionMode * flicker_mode); 522 gboolean (*get_focus_mode) (GstPhotography * photo, GstPhotographyFocusMode * focus_mode); 523 524 gboolean (*set_ev_compensation) (GstPhotography * photo, gfloat ev_comp); 525 gboolean (*set_iso_speed) (GstPhotography * photo, guint iso_speed); 526 gboolean (*set_aperture) (GstPhotography * photo, guint aperture); 527 gboolean (*set_exposure) (GstPhotography * photo, guint32 exposure); 528 gboolean (*set_white_balance_mode) (GstPhotography * photo, GstPhotographyWhiteBalanceMode wb_mode); 529 gboolean (*set_color_tone_mode) (GstPhotography * photo, GstPhotographyColorToneMode tone_mode); 530 gboolean (*set_scene_mode) (GstPhotography * photo, GstPhotographySceneMode scene_mode); 531 gboolean (*set_flash_mode) (GstPhotography * photo, GstPhotographyFlashMode flash_mode); 532 gboolean (*set_zoom) (GstPhotography * photo, gfloat zoom); 533 gboolean (*set_flicker_mode) (GstPhotography * photo, GstPhotographyFlickerReductionMode flicker_mode); 534 gboolean (*set_focus_mode) (GstPhotography * photo, GstPhotographyFocusMode focus_mode); 535 536 GstPhotographyCaps (*get_capabilities) (GstPhotography * photo); 537 538 gboolean (*prepare_for_capture) (GstPhotography * photo, GstPhotographyCapturePrepared func, GstCaps *capture_caps, gpointer user_data); 539 540 void (*set_autofocus) (GstPhotography * photo, gboolean on); 541 542 gboolean (*set_config) (GstPhotography * photo, GstPhotographySettings * config); 543 gboolean (*get_config) (GstPhotography * photo, GstPhotographySettings * config); 544 545 gboolean (*get_noise_reduction) (GstPhotography * photo, GstPhotographyNoiseReduction * noise_reduction); 546 gboolean (*set_noise_reduction) (GstPhotography * photo, GstPhotographyNoiseReduction noise_reduction); 547 548 gboolean (*set_exposure_mode) (GstPhotography * photo, GstPhotographyExposureMode exposure_mode); 549 gboolean (*get_exposure_mode) (GstPhotography * photo, GstPhotographyExposureMode * exposure_mode); 550 gboolean (*set_analog_gain) (GstPhotography * photo, gfloat analog_gain); 551 gboolean (*get_analog_gain) (GstPhotography * photo, gfloat * analog_gain); 552 gboolean (*set_lens_focus) (GstPhotography * photo, gfloat lens_focus); 553 gboolean (*get_lens_focus) (GstPhotography * photo, gfloat * lens_focus); 554 gboolean (*set_color_temperature) (GstPhotography * photo, guint color_temperature); 555 gboolean (*get_color_temperature) (GstPhotography * photo, guint * color_temperature); 556 gboolean (*set_min_exposure_time) (GstPhotography * photo, guint min_exposure_time); 557 gboolean (*get_min_exposure_time) (GstPhotography * photo, guint * min_exposure_time); 558 gboolean (*set_max_exposure_time) (GstPhotography * photo, guint max_exposure_time); 559 gboolean (*get_max_exposure_time) (GstPhotography * photo, guint * max_exposure_time); 560 561 /* FIXME: remove padding, not needed for interfaces */ 562 /*< private > */ 563 gpointer _gst_reserved[GST_PADDING]; 564 } GstPhotographyInterface; 565 566 GST_PHOTOGRAPHY_API 567 GType gst_photography_get_type (void); 568 569 /* virtual class function wrappers */ 570 571 GST_PHOTOGRAPHY_API 572 gboolean gst_photography_get_ev_compensation (GstPhotography * photo, 573 gfloat * ev_comp); 574 575 GST_PHOTOGRAPHY_API 576 gboolean gst_photography_get_iso_speed (GstPhotography * photo, 577 guint * iso_speed); 578 579 GST_PHOTOGRAPHY_API 580 gboolean gst_photography_get_aperture (GstPhotography * photo, 581 guint * aperture); 582 583 GST_PHOTOGRAPHY_API 584 gboolean gst_photography_get_exposure (GstPhotography * photo, 585 guint32 * exposure); 586 587 GST_PHOTOGRAPHY_API 588 gboolean gst_photography_get_white_balance_mode (GstPhotography * photo, 589 GstPhotographyWhiteBalanceMode * wb_mode); 590 591 GST_PHOTOGRAPHY_API 592 gboolean gst_photography_get_color_tone_mode (GstPhotography * photo, 593 GstPhotographyColorToneMode * tone_mode); 594 595 GST_PHOTOGRAPHY_API 596 gboolean gst_photography_get_scene_mode (GstPhotography * photo, 597 GstPhotographySceneMode * scene_mode); 598 599 GST_PHOTOGRAPHY_API 600 gboolean gst_photography_get_flash_mode (GstPhotography * photo, 601 GstPhotographyFlashMode * flash_mode); 602 603 GST_PHOTOGRAPHY_API 604 gboolean gst_photography_get_noise_reduction (GstPhotography * photo, 605 GstPhotographyNoiseReduction * noise_reduction); 606 607 GST_PHOTOGRAPHY_API 608 gboolean gst_photography_get_zoom (GstPhotography * photo, gfloat * zoom); 609 610 GST_PHOTOGRAPHY_API 611 gboolean gst_photography_get_flicker_mode (GstPhotography * photo, 612 GstPhotographyFlickerReductionMode * mode); 613 614 GST_PHOTOGRAPHY_API 615 gboolean gst_photography_get_focus_mode (GstPhotography * photo, 616 GstPhotographyFocusMode * mode); 617 618 GST_PHOTOGRAPHY_API 619 gboolean gst_photography_set_ev_compensation (GstPhotography * photo, 620 gfloat ev_comp); 621 622 GST_PHOTOGRAPHY_API 623 gboolean gst_photography_set_iso_speed (GstPhotography * photo, 624 guint iso_speed); 625 626 GST_PHOTOGRAPHY_API 627 gboolean gst_photography_set_aperture (GstPhotography * photo, guint aperture); 628 629 GST_PHOTOGRAPHY_API 630 gboolean gst_photography_set_exposure (GstPhotography * photo, guint exposure); 631 632 GST_PHOTOGRAPHY_API 633 gboolean gst_photography_set_white_balance_mode (GstPhotography * photo, 634 GstPhotographyWhiteBalanceMode wb_mode); 635 636 GST_PHOTOGRAPHY_API 637 gboolean gst_photography_set_color_tone_mode (GstPhotography * photo, 638 GstPhotographyColorToneMode tone_mode); 639 640 GST_PHOTOGRAPHY_API 641 gboolean gst_photography_set_scene_mode (GstPhotography * photo, 642 GstPhotographySceneMode scene_mode); 643 644 GST_PHOTOGRAPHY_API 645 gboolean gst_photography_set_flash_mode (GstPhotography * photo, 646 GstPhotographyFlashMode flash_mode); 647 648 GST_PHOTOGRAPHY_API 649 gboolean gst_photography_set_noise_reduction (GstPhotography * photo, 650 GstPhotographyNoiseReduction noise_reduction); 651 652 GST_PHOTOGRAPHY_API 653 gboolean gst_photography_set_zoom (GstPhotography * photo, gfloat zoom); 654 655 GST_PHOTOGRAPHY_API 656 gboolean gst_photography_set_flicker_mode (GstPhotography * photo, 657 GstPhotographyFlickerReductionMode mode); 658 659 GST_PHOTOGRAPHY_API 660 gboolean gst_photography_set_focus_mode (GstPhotography * photo, 661 GstPhotographyFocusMode mode); 662 663 GST_PHOTOGRAPHY_API 664 GstPhotographyCaps gst_photography_get_capabilities (GstPhotography * photo); 665 666 GST_PHOTOGRAPHY_API 667 gboolean gst_photography_prepare_for_capture (GstPhotography * photo, 668 GstPhotographyCapturePrepared func, 669 GstCaps *capture_caps, 670 gpointer user_data); 671 672 GST_PHOTOGRAPHY_API 673 gboolean gst_photography_set_config (GstPhotography * photo, 674 GstPhotographySettings * config); 675 676 GST_PHOTOGRAPHY_API 677 gboolean gst_photography_get_config (GstPhotography * photo, 678 GstPhotographySettings * config); 679 680 GST_PHOTOGRAPHY_API 681 void gst_photography_set_autofocus (GstPhotography * photo, gboolean on); 682 683 G_END_DECLS 684 685 #endif /* __GST_PHOTOGRAPHY_H__ */ 686