examples: camerabin: use photoiface properties through video-source

Fixes #616923
This commit is contained in:
Teemu Katajisto 2010-04-22 17:46:59 +03:00 committed by Thiago Santos
parent e0dae09731
commit 9bace27300
3 changed files with 42 additions and 28 deletions

View file

@ -36,8 +36,13 @@ if HAVE_X11
GST_CAMERABIN_X11_EXAMPLES = gst-camerabin-test
gst_camerabin_test_SOURCES = gst-camerabin-test.c
gst_camerabin_test_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
gst_camerabin_test_LDADD = -lgstinterfaces-@GST_MAJORMINOR@ $(GST_LIBS) $(GST_PLUGINS_BASE_LIBS) $(X11_LIBS)
gst_camerabin_test_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_PLUGINS_BAD_CFLAGS)
gst_camerabin_test_LDADD = \
$(top_builddir)/gst-libs/gst/interfaces/libgstphotography-@GST_MAJORMINOR@.la \
-lgstinterfaces-@GST_MAJORMINOR@ \
$(GST_LIBS) \
$(GST_PLUGINS_BASE_LIBS) \
$(X11_LIBS)
else
GST_CAMERABIN_X11_EXAMPLES =

View file

@ -819,11 +819,11 @@ on_buttonPause_clicked (GtkButton * button, gpointer user_data)
case CAP_STATE_IMAGE:
if (g_str_equal (gtk_button_get_label (ui_bnt_pause), "Focus")) {
/* Start autofocus */
gst_photography_set_autofocus (GST_PHOTOGRAPHY (gst_camera_bin), TRUE);
gst_photography_set_autofocus (GST_PHOTOGRAPHY (gst_videosrc), TRUE);
gtk_button_set_label (ui_bnt_pause, "Cancel Focus");
} else {
/* Cancel autofocus */
gst_photography_set_autofocus (GST_PHOTOGRAPHY (gst_camera_bin), FALSE);
gst_photography_set_autofocus (GST_PHOTOGRAPHY (gst_videosrc), FALSE);
gtk_button_set_label (ui_bnt_pause, "Focus");
}
break;
@ -1043,7 +1043,7 @@ on_key_released (GtkWidget * widget, GdkEventKey * event, gpointer user_data)
switch (event->keyval) {
case GDK_F11:
#ifdef HAVE_GST_PHOTO_IFACE_H
gst_photography_set_autofocus (GST_PHOTOGRAPHY (gst_camera_bin), FALSE);
gst_photography_set_autofocus (GST_PHOTOGRAPHY (gst_videosrc), FALSE);
#endif
break;
default:
@ -1061,7 +1061,7 @@ on_key_pressed (GtkWidget * widget, GdkEventKey * event, gpointer user_data)
switch (event->keyval) {
case GDK_F11:
#ifdef HAVE_GST_PHOTO_IFACE_H
gst_photography_set_autofocus (GST_PHOTOGRAPHY (gst_camera_bin), TRUE);
gst_photography_set_autofocus (GST_PHOTOGRAPHY (gst_videosrc), TRUE);
#endif
break;
case 0x0:
@ -1337,31 +1337,31 @@ photo_menuitem_toggled_cb (GtkRadioMenuItem * menuitem, gpointer user_data)
GstWhiteBalanceMode mode;
ret =
gst_photography_set_white_balance_mode (GST_PHOTOGRAPHY
(gst_camera_bin), val->value);
gst_photography_get_white_balance_mode (GST_PHOTOGRAPHY (gst_camera_bin),
(gst_videosrc), val->value);
gst_photography_get_white_balance_mode (GST_PHOTOGRAPHY (gst_videosrc),
&mode);
set_value = (gint) mode;
} else if (etype == GST_TYPE_SCENE_MODE) {
GstSceneMode mode;
ret =
gst_photography_set_scene_mode (GST_PHOTOGRAPHY (gst_camera_bin),
gst_photography_set_scene_mode (GST_PHOTOGRAPHY (gst_videosrc),
val->value);
gst_photography_get_scene_mode (GST_PHOTOGRAPHY (gst_camera_bin), &mode);
gst_photography_get_scene_mode (GST_PHOTOGRAPHY (gst_videosrc), &mode);
set_value = (gint) mode;
} else if (etype == GST_TYPE_COLOUR_TONE_MODE) {
GstColourToneMode mode;
ret =
gst_photography_set_colour_tone_mode (GST_PHOTOGRAPHY
(gst_camera_bin), val->value);
gst_photography_get_colour_tone_mode (GST_PHOTOGRAPHY (gst_camera_bin),
(gst_videosrc), val->value);
gst_photography_get_colour_tone_mode (GST_PHOTOGRAPHY (gst_videosrc),
&mode);
set_value = (gint) mode;
} else if (etype == GST_TYPE_FLASH_MODE) {
GstFlashMode mode;
ret =
gst_photography_set_flash_mode (GST_PHOTOGRAPHY (gst_camera_bin),
gst_photography_set_flash_mode (GST_PHOTOGRAPHY (gst_videosrc),
val->value);
gst_photography_get_flash_mode (GST_PHOTOGRAPHY (gst_camera_bin), &mode);
gst_photography_get_flash_mode (GST_PHOTOGRAPHY (gst_videosrc), &mode);
set_value = (gint) mode;
}
@ -1388,11 +1388,10 @@ photo_iso_speed_toggled_cb (GtkRadioMenuItem * menuitem, gpointer user_data)
if (!g_str_equal (name, "auto")) {
sscanf (name, "%d", &val);
}
if (!gst_photography_set_iso_speed (GST_PHOTOGRAPHY (gst_camera_bin), val)) {
if (!gst_photography_set_iso_speed (GST_PHOTOGRAPHY (gst_videosrc), val)) {
g_print ("ISO speed (%d) setting failed\n", val);
} else {
gst_photography_get_iso_speed (GST_PHOTOGRAPHY (gst_camera_bin),
&set_val);
gst_photography_get_iso_speed (GST_PHOTOGRAPHY (gst_videosrc), &set_val);
if (val != set_val) {
g_print ("ISO speed (%d) setting failed, got %d\n", val, set_val);
}
@ -1411,11 +1410,11 @@ photo_ev_comp_toggled_cb (GtkRadioMenuItem * menuitem, gpointer user_data)
if (active) {
name = gtk_widget_get_name (GTK_WIDGET (menuitem));
sscanf (name, "%f", &val);
if (!gst_photography_set_ev_compensation (GST_PHOTOGRAPHY (gst_camera_bin),
if (!gst_photography_set_ev_compensation (GST_PHOTOGRAPHY (gst_videosrc),
val)) {
g_print ("EV compensation (%.1f) setting failed\n", val);
} else {
gst_photography_get_ev_compensation (GST_PHOTOGRAPHY (gst_camera_bin),
gst_photography_get_ev_compensation (GST_PHOTOGRAPHY (gst_videosrc),
&set_val);
if (val != set_val) {
g_print ("EV compensation (%.1f) setting failed, got %.1f\n", val,

View file

@ -85,8 +85,11 @@
# include "config.h"
#endif
#define GST_USE_UNSTABLE_API 1
#include <gst/gst.h>
#include <gst/interfaces/xoverlay.h>
#include <gst/interfaces/photography.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>
@ -102,7 +105,6 @@
*/
GST_DEBUG_CATEGORY_STATIC (camerabin_test);
#define GST_CAT_DEFAULT camerabin_test
typedef struct _ResultType
{
GstClockTime avg;
@ -533,6 +535,7 @@ run_pipeline (gpointer user_data)
GstCaps *preview_caps = NULL;
gchar *filename_str = NULL;
GString *filename_buffer = NULL;
GstElement *video_source = NULL;
g_object_set (camera_bin, "mode", mode, NULL);
@ -561,14 +564,21 @@ run_pipeline (gpointer user_data)
g_free (filename_str);
g_object_set (camera_bin, "ev-compensation", ev_compensation, NULL);
g_object_set (camera_bin, "aperture", aperture, NULL);
g_object_set (camera_bin, "flash-mode", flash_mode, NULL);
g_object_set (camera_bin, "scene-mode", scene_mode, NULL);
g_object_set (camera_bin, "exposure", exposure, NULL);
g_object_set (camera_bin, "iso-speed", iso_speed, NULL);
g_object_set (camera_bin, "white-balance-mode", wb_mode, NULL);
g_object_set (camera_bin, "colour-tone-mode", color_mode, NULL);
g_object_get (camera_bin, "video-source", &video_source, NULL);
if (video_source) {
if (GST_IS_ELEMENT (video_source) &&
gst_element_implements_interface (video_source, GST_TYPE_PHOTOGRAPHY)) {
g_object_set (video_source, "ev-compensation", ev_compensation, NULL);
g_object_set (video_source, "aperture", aperture, NULL);
g_object_set (video_source, "flash-mode", flash_mode, NULL);
g_object_set (video_source, "scene-mode", scene_mode, NULL);
g_object_set (video_source, "exposure", exposure, NULL);
g_object_set (video_source, "iso-speed", iso_speed, NULL);
g_object_set (video_source, "white-balance-mode", wb_mode, NULL);
g_object_set (video_source, "colour-tone-mode", color_mode, NULL);
}
g_object_unref (video_source);
}
g_object_set (camera_bin, "mute", mute, NULL);
g_object_set (camera_bin, "zoom", zoom, NULL);