3 * Copyright (C) 2008 Nokia Corporation <multimedia@maemo.org>
5 * photography.c: photography interface for digital imaging
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
18 * You should have received a copy of the GNU Library General Public
19 * License along with this library; if not, write to the
20 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
21 * Boston, MA 02110-1301, USA.
28 #include "photography.h"
31 * SECTION:gstphotography
32 * @short_description: Interface for digital image capture elements
33 * @stability: Unstable
35 * The interface allows access to some common digital image capture parameters.
37 * > The GstPhotography interface is unstable API and may change in future.
38 * > One can define GST_USE_UNSTABLE_API to acknowledge and avoid this warning.
41 static void gst_photography_iface_base_init (GstPhotographyInterface * iface);
42 static void gst_photography_iface_class_init (gpointer g_class);
45 gst_photography_get_type (void)
47 static GType gst_photography_type = 0;
49 if (!gst_photography_type) {
50 static const GTypeInfo gst_photography_info = {
51 sizeof (GstPhotographyInterface),
52 (GBaseInitFunc) gst_photography_iface_base_init, /* base_init */
53 NULL, /* base_finalize */
54 (GClassInitFunc) gst_photography_iface_class_init, /* class_init */
55 NULL, /* class_finalize */
56 NULL, /* class_data */
59 NULL, /* instance_init */
62 gst_photography_type = g_type_register_static (G_TYPE_INTERFACE,
63 "GstPhotography", &gst_photography_info, 0);
66 return gst_photography_type;
70 gst_photography_iface_base_init (GstPhotographyInterface * iface)
72 /* default virtual functions */
73 iface->get_ev_compensation = NULL;
74 iface->get_iso_speed = NULL;
75 iface->get_aperture = NULL;
76 iface->get_exposure = NULL;
77 iface->get_white_balance_mode = NULL;
78 iface->get_color_tone_mode = NULL;
79 iface->get_scene_mode = NULL;
80 iface->get_flash_mode = NULL;
81 iface->get_noise_reduction = NULL;
82 iface->get_zoom = NULL;
83 iface->get_flicker_mode = NULL;
84 iface->get_focus_mode = NULL;
86 iface->set_ev_compensation = NULL;
87 iface->set_iso_speed = NULL;
88 iface->set_aperture = NULL;
89 iface->set_exposure = NULL;
90 iface->set_white_balance_mode = NULL;
91 iface->set_color_tone_mode = NULL;
92 iface->set_scene_mode = NULL;
93 iface->set_flash_mode = NULL;
94 iface->set_noise_reduction = NULL;
95 iface->set_zoom = NULL;
96 iface->set_flicker_mode = NULL;
97 iface->set_focus_mode = NULL;
99 iface->get_capabilities = NULL;
100 iface->prepare_for_capture = NULL;
101 iface->set_autofocus = NULL;
102 iface->set_config = NULL;
103 iface->get_config = NULL;
106 #define GST_PHOTOGRAPHY_FUNC_TEMPLATE(function_name, param_type) \
108 gst_photography_set_ ## function_name (GstPhotography * photo, param_type param) \
110 GstPhotographyInterface *iface; \
111 g_return_val_if_fail (photo != NULL, FALSE); \
112 iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo); \
113 if (iface->set_ ## function_name) { \
114 return iface->set_ ## function_name (photo, param); \
119 gst_photography_get_ ## function_name (GstPhotography * photo, param_type * param) \
121 GstPhotographyInterface *iface; \
122 g_return_val_if_fail (photo != NULL, FALSE); \
123 iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo); \
124 if (iface->get_ ## function_name) { \
125 return iface->get_ ## function_name (photo, param); \
132 * gst_photography_set_ev_compensation:
133 * @photo: #GstPhotography interface of a #GstElement
134 * @ev_comp: ev compensation value to set
136 * Set the ev compensation value for the #GstElement
138 * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
141 * gst_photography_get_ev_compensation:
142 * @photo: #GstPhotography interface of a #GstElement
143 * @ev_comp: ev compensation value to get
145 * Get the ev compensation value for the #GstElement
147 * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
149 GST_PHOTOGRAPHY_FUNC_TEMPLATE (ev_compensation, gfloat);
152 * gst_photography_set_iso_speed:
153 * @photo: #GstPhotography interface of a #GstElement
154 * @iso_speed: ISO speed value to set
156 * Set the ISO value (light sensivity) for the #GstElement
158 * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
161 * gst_photography_get_iso_speed:
162 * @photo: #GstPhotography interface of a #GstElement
163 * @iso_speed: ISO speed value to get
165 * Get the ISO value (light sensivity) for the #GstElement
167 * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
169 GST_PHOTOGRAPHY_FUNC_TEMPLATE (iso_speed, guint);
172 * gst_photography_set_aperture:
173 * @photo: #GstPhotography interface of a #GstElement
174 * @aperture: aperture value to set
176 * Set the aperture value for the #GstElement
178 * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
181 * gst_photography_get_aperture:
182 * @photo: #GstPhotography interface of a #GstElement
183 * @aperture: aperture value to get
185 * Get the aperture value for the #GstElement
187 * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
189 GST_PHOTOGRAPHY_FUNC_TEMPLATE (aperture, guint);
192 * gst_photography_set_exposure:
193 * @photo: #GstPhotography interface of a #GstElement
194 * @exposure: exposure time to set
196 * Set the fixed exposure time (in us) for the #GstElement
198 * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
201 * gst_photography_get_exposure:
202 * @photo: #GstPhotography interface of a #GstElement
203 * @exposure: exposure time to get
205 * Get the fixed exposure time (in us) for the #GstElement
207 * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
209 GST_PHOTOGRAPHY_FUNC_TEMPLATE (exposure, guint32);
212 * gst_photography_set_white_balance_mode:
213 * @photo: #GstPhotography interface of a #GstElement
214 * @wb_mode: #GstPhotographyWhiteBalanceMode to set
216 * Set the white balance mode for the #GstElement
218 * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
221 * gst_photography_get_white_balance_mode:
222 * @photo: #GstPhotography interface of a #GstElement
223 * @wb_mode: #GstPhotographyWhiteBalanceMode to get
225 * Get the white balance mode for the #GstElement
227 * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
229 GST_PHOTOGRAPHY_FUNC_TEMPLATE (white_balance_mode,
230 GstPhotographyWhiteBalanceMode);
233 * gst_photography_set_color_tone_mode:
234 * @photo: #GstPhotography interface of a #GstElement
235 * @tone_mode: #GstPhotographyColorToneMode to set
237 * Set the color tone mode for the #GstElement
239 * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
242 * gst_photography_get_color_tone_mode:
243 * @photo: #GstPhotography interface of a #GstElement
244 * @tone_mode: #GstPhotographyColorToneMode to get
246 * Get the color tone mode for the #GstElement
248 * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
250 GST_PHOTOGRAPHY_FUNC_TEMPLATE (color_tone_mode, GstPhotographyColorToneMode);
253 * gst_photography_set_scene_mode:
254 * @photo: #GstPhotography interface of a #GstElement
255 * @scene_mode: #GstPhotographySceneMode to set
257 * Set the scene mode for the #GstElement
259 * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
262 * gst_photography_get_scene_mode:
263 * @photo: #GstPhotography interface of a #GstElement
264 * @scene_mode: #GstPhotographySceneMode to get
266 * Get the scene mode for the #GstElement
268 * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
270 GST_PHOTOGRAPHY_FUNC_TEMPLATE (scene_mode, GstPhotographySceneMode);
273 * gst_photography_set_flash_mode:
274 * @photo: #GstPhotography interface of a #GstElement
275 * @flash_mode: #GstPhotographyFlashMode to set
277 * Set the flash mode for the #GstElement
279 * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
282 * gst_photography_get_flash_mode:
283 * @photo: #GstPhotography interface of a #GstElement
284 * @flash_mode: #GstPhotographyFlashMode to get
286 * Get the flash mode for the #GstElement
288 * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
290 GST_PHOTOGRAPHY_FUNC_TEMPLATE (flash_mode, GstPhotographyFlashMode);
293 * gst_photography_set_noise_reduction:
294 * @photo: #GstPhotography interface of a #GstElement
295 * @noise_reduction: #GstPhotographyNoiseReductionMode to set
297 * Set the noise reduction mode for the #GstElement
299 * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
302 * gst_photography_get_noise_reduction:
303 * @photo: #GstPhotography interface of a #GstElement
304 * @noise_reduction: #GstPhotographyNoiseReductionMode to get
306 * Get the noise reduction mode for the #GstElement
308 * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
310 GST_PHOTOGRAPHY_FUNC_TEMPLATE (noise_reduction, GstPhotographyNoiseReduction);
313 * gst_photography_set_zoom:
314 * @photo: #GstPhotography interface of a #GstElement
315 * @zoom: zoom value to set
317 * Set the zoom value for the #GstElement.
318 * E.g. 1.0 to get original image and 3.0 for 3x zoom and so on.
320 * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
323 * gst_photography_get_zoom:
324 * @photo: #GstPhotography interface of a #GstElement
325 * @zoom: zoom value to get
327 * Get the zoom value for the #GstElement
329 * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
331 GST_PHOTOGRAPHY_FUNC_TEMPLATE (zoom, gfloat);
334 * gst_photography_set_flicker_mode:
335 * @photo: #GstPhotography interface of a #GstElement
336 * @flicker_mode: flicker mode value to set
338 * Set the flicker mode value for the #GstElement.
340 * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
343 * gst_photography_get_flicker_mode:
344 * @photo: #GstPhotography interface of a #GstElement
345 * @flicker_mode: flicker mode value to get
347 * Get the flicker mode value for the #GstElement
349 * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
351 GST_PHOTOGRAPHY_FUNC_TEMPLATE (flicker_mode,
352 GstPhotographyFlickerReductionMode);
355 * gst_photography_set_focus_mode:
356 * @photo: #GstPhotography interface of a #GstElement
357 * @focus_mode: focus mode value to set
359 * Set the focus mode value for the #GstElement.
361 * Returns: %TRUE if setting the value succeeded, %FALSE otherwise
364 * gst_photography_get_focus_mode:
365 * @photo: #GstPhotography interface of a #GstElement
366 * @focus_mode: focus_mode value to get
368 * Get the focus mode value for the #GstElement
370 * Returns: %TRUE if getting the value succeeded, %FALSE otherwise
372 GST_PHOTOGRAPHY_FUNC_TEMPLATE (focus_mode, GstPhotographyFocusMode);
375 * gst_photography_get_capabilities:
376 * @photo: #GstPhotography interface of a #GstElement
378 * Get #GstPhotographyCaps bitmask value that indicates what photography
379 * interface features the #GstElement supports
381 * Returns: #GstPhotographyCaps value
384 gst_photography_get_capabilities (GstPhotography * photo)
386 GstPhotographyInterface *iface;
387 g_return_val_if_fail (photo != NULL, GST_PHOTOGRAPHY_CAPS_NONE);
389 iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo);
390 if (iface->get_capabilities) {
391 return iface->get_capabilities (photo);
393 return GST_PHOTOGRAPHY_CAPS_NONE;
398 * gst_photography_prepare_for_capture:
399 * @photo: #GstPhotography interface of a #GstElement
400 * @func: callback that is called after capturing has been prepared
401 * @capture_caps: #GstCaps defining the desired format of the captured image
402 * @user_data: user data that will be passed to the callback @func
404 * Start preparations for capture. Preparations can take indeterminate
405 * amount of time and @func callback is called after preparations are
406 * done. Image capture will begin after callback returns.
408 * Returns: %TRUE if preparations were started (caps were OK), otherwise %FALSE.
411 gst_photography_prepare_for_capture (GstPhotography * photo,
412 GstPhotographyCapturePrepared func, GstCaps * capture_caps,
415 GstPhotographyInterface *iface;
418 g_return_val_if_fail (photo != NULL, FALSE);
420 iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo);
421 if (iface->prepare_for_capture) {
422 ret = iface->prepare_for_capture (photo, func, capture_caps, user_data);
429 * gst_photography_set_autofocus:
430 * @photo: #GstPhotography interface of a #GstElement
431 * @on: %TRUE to start autofocusing, %FALSE to stop autofocusing
433 * Start or stop autofocusing. %GST_PHOTOGRAPHY_AUTOFOCUS_DONE
434 * message is posted to bus when autofocusing has finished.
437 gst_photography_set_autofocus (GstPhotography * photo, gboolean on)
439 GstPhotographyInterface *iface;
440 g_return_if_fail (photo != NULL);
442 iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo);
443 if (iface->set_autofocus) {
444 iface->set_autofocus (photo, on);
449 * gst_photography_set_config:
450 * @photo: #GstPhotography interface of a #GstElement
451 * @config: #GstPhotographySettings containg the configuration
453 * Set all configuration settings at once.
455 * Returns: TRUE if configuration was set successfully, otherwise FALSE.
458 gst_photography_set_config (GstPhotography * photo,
459 GstPhotographySettings * config)
461 GstPhotographyInterface *iface;
462 gboolean ret = FALSE;
464 g_return_val_if_fail (photo != NULL, FALSE);
466 iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo);
467 if (iface->set_config) {
468 ret = iface->set_config (photo, config);
475 * gst_photography_get_config:
476 * @photo: #GstPhotography interface of a #GstElement
477 * @config: #GstPhotographySettings containg the configuration
479 * Get all configuration settings at once.
481 * Returns: TRUE if configuration was got successfully, otherwise FALSE.
484 gst_photography_get_config (GstPhotography * photo,
485 GstPhotographySettings * config)
487 GstPhotographyInterface *iface;
488 gboolean ret = FALSE;
490 g_return_val_if_fail (photo != NULL, FALSE);
492 iface = GST_PHOTOGRAPHY_GET_INTERFACE (photo);
493 if (iface->get_config) {
494 ret = iface->get_config (photo, config);
500 /* Photography class initialization stuff */
502 gst_photography_iface_class_init (gpointer g_class)
504 /* create interface signals and properties here. */
507 g_object_interface_install_property (g_class,
508 g_param_spec_enum (GST_PHOTOGRAPHY_PROP_WB_MODE,
509 "White balance mode property",
510 "White balance affects the color temperature of the photo",
511 GST_TYPE_PHOTOGRAPHY_WHITE_BALANCE_MODE,
512 GST_PHOTOGRAPHY_WB_MODE_AUTO,
513 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
516 g_object_interface_install_property (g_class,
517 g_param_spec_enum (GST_PHOTOGRAPHY_PROP_COLOR_TONE,
518 "Color tone mode property",
519 "Color tone setting changes color shading in the photo",
520 GST_TYPE_PHOTOGRAPHY_COLOR_TONE_MODE,
521 GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL,
522 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
525 g_object_interface_install_property (g_class,
526 g_param_spec_enum (GST_PHOTOGRAPHY_PROP_SCENE_MODE,
527 "Scene mode property",
528 "Scene mode works as a preset for different photo shooting mode settings",
529 GST_TYPE_PHOTOGRAPHY_SCENE_MODE,
530 GST_PHOTOGRAPHY_SCENE_MODE_AUTO,
531 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
534 g_object_interface_install_property (g_class,
535 g_param_spec_enum (GST_PHOTOGRAPHY_PROP_FLASH_MODE,
536 "Flash mode property",
537 "Flash mode defines how the flash light should be used",
538 GST_TYPE_PHOTOGRAPHY_FLASH_MODE,
539 GST_PHOTOGRAPHY_FLASH_MODE_AUTO,
540 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
542 /* Flicker reduction mode */
543 g_object_interface_install_property (g_class,
544 g_param_spec_enum (GST_PHOTOGRAPHY_PROP_FLICKER_MODE,
545 "Flicker reduction mode property",
546 "Flicker reduction mode defines a line frequency for flickering prevention",
547 GST_TYPE_PHOTOGRAPHY_FLICKER_REDUCTION_MODE,
548 GST_PHOTOGRAPHY_FLICKER_REDUCTION_OFF,
549 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
552 g_object_interface_install_property (g_class,
553 g_param_spec_enum (GST_PHOTOGRAPHY_PROP_FOCUS_MODE,
554 "Focus mode property",
555 "Focus mode defines the range of focal lengths to use in autofocus search",
556 GST_TYPE_PHOTOGRAPHY_FOCUS_MODE,
557 GST_PHOTOGRAPHY_FOCUS_MODE_AUTO,
558 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
561 g_object_interface_install_property (g_class,
562 g_param_spec_ulong (GST_PHOTOGRAPHY_PROP_CAPABILITIES,
563 "Photo capabilities bitmask",
564 "Tells the photo capabilities of the device",
565 0, G_MAXULONG, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
567 /* EV_compensation */
568 g_object_interface_install_property (g_class,
569 g_param_spec_float (GST_PHOTOGRAPHY_PROP_EV_COMP,
570 "EV compensation property",
571 "EV compensation affects the brightness of the image",
572 -2.5, 2.5, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
575 g_object_interface_install_property (g_class,
576 g_param_spec_uint (GST_PHOTOGRAPHY_PROP_ISO_SPEED,
577 "ISO speed property",
578 "ISO speed defines the light sensitivity (0 = auto)",
579 0, 6400, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
582 g_object_interface_install_property (g_class,
583 g_param_spec_uint (GST_PHOTOGRAPHY_PROP_APERTURE,
585 "Aperture defines the size of lens opening (0 = auto)",
586 0, G_MAXUINT8, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
589 g_object_interface_install_property (g_class,
590 g_param_spec_uint (GST_PHOTOGRAPHY_PROP_EXPOSURE_TIME,
591 "Exposure time in milliseconds",
592 "Exposure time defines how long the shutter will stay open (0 = auto)",
593 0, G_MAXUINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
596 * GstPhotography:image-capture-supported-caps:
598 * Query caps that describe supported formats for image capture. Sometimes
599 * element may support different formats for image capture than for video
602 g_object_interface_install_property (g_class,
603 g_param_spec_boxed (GST_PHOTOGRAPHY_PROP_IMAGE_CAPTURE_SUPPORTED_CAPS,
604 "Image capture supported caps",
605 "Caps describing supported image capture formats", GST_TYPE_CAPS,
606 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
609 * GstPhotography:image-preview-supported-caps:
611 * Query caps that describe supported formats for preview image. Sometimes
612 * element may support different formats for preview image than for video
615 g_object_interface_install_property (g_class,
616 g_param_spec_boxed (GST_PHOTOGRAPHY_PROP_IMAGE_PREVIEW_SUPPORTED_CAPS,
617 "Image preview supported caps",
618 "Caps describing supported image preview formats", GST_TYPE_CAPS,
619 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
622 g_object_interface_install_property (g_class,
623 g_param_spec_float (GST_PHOTOGRAPHY_PROP_ZOOM,
625 "How much the resulted image will be zoomed",
626 1.0f, 10.0f, 1.0f, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
629 * GstPhotography:color-temperature:
631 * Color temperature parameter for manual white balance.
632 * Control color temperature in Kelvin units.
634 g_object_interface_install_property (g_class,
635 g_param_spec_uint (GST_PHOTOGRAPHY_PROP_COLOR_TEMPERATURE,
636 "Color temperature in Kelvin units",
637 "Color temperature in Kelvin units for manual white balance",
638 0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
641 * GstPhotography:white-point:
643 * White point parameter for manual white balance.
644 * Describes the color "white" as raw values.
646 * FIXME: check and document correct representation for white point
648 g_object_interface_install_property (g_class,
649 g_param_spec_value_array (GST_PHOTOGRAPHY_PROP_WHITE_POINT,
651 "Describe color white as raw values",
652 g_param_spec_uint ("raw-value", "Raw value",
653 "Raw value", 0, G_MAXUINT, 0,
654 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS),
655 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
658 * GstPhotography:analog-gain:
660 * Linear multiplicative value how much amplification is applied to the signal
661 * before A-D conversion.
663 g_object_interface_install_property (g_class,
664 g_param_spec_float (GST_PHOTOGRAPHY_PROP_ANALOG_GAIN,
665 "Analog gain applied to the sensor",
666 "Analog gain applied to the sensor",
667 1.0f, G_MAXFLOAT, 1.0f, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
670 * GstPhotography:lens-focus:
672 * Manual changing of lens focus in diopter units.
673 * Inteded use with GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL focus mode, otherwise
677 g_object_interface_install_property (g_class,
678 g_param_spec_float (GST_PHOTOGRAPHY_PROP_LENS_FOCUS,
680 "Focus point in diopter units",
681 0.0f, G_MAXFLOAT, 0.0f, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
684 * GstPhotography:min-exposure-time:
686 * Minimum exposure time for automatic exposure mode.
688 g_object_interface_install_property (g_class,
689 g_param_spec_uint (GST_PHOTOGRAPHY_PROP_MIN_EXPOSURE_TIME,
690 "Minimum exposure time",
691 "Minimum exposure time for automatic exposure mode",
692 0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
695 * GstPhotography:max-exposure-time:
697 * Maximum exposure time for automatic exposure mode.
699 g_object_interface_install_property (g_class,
700 g_param_spec_uint (GST_PHOTOGRAPHY_PROP_MAX_EXPOSURE_TIME,
701 "Maximum exposure time",
702 "Maximum exposure time for automatic exposure mode",
703 0, G_MAXUINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
705 /* Noise Reduction, Bayer an YCC noise reduction are enabled by default */
706 g_object_interface_install_property (g_class,
707 g_param_spec_flags (GST_PHOTOGRAPHY_PROP_NOISE_REDUCTION,
708 "Noise Reduction settings",
709 "Which noise reduction modes are enabled (0 = disabled)",
710 GST_TYPE_PHOTOGRAPHY_NOISE_REDUCTION,
711 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));