[cheese/threezero] move cheese-webcam to libcheese and create a lib out of it



commit f1beef6717fd4543ce4acbcb0af9cde8564b91ea
Author: daniel g. siegel <siegel in tum de>
Date:   Mon Nov 23 18:12:13 2009 +0100

    move cheese-webcam to libcheese and create a lib out of it

 INSTALL                                            |  110 ++++-
 Makefile.am                                        |    2 +-
 libcheese/Makefile.am                              |   29 +-
 src/cheese-webcam.c => libcheese/cheese-camera.c   |  550 ++++++++++----------
 libcheese/cheese-camera.h                          |  128 +++++
 libcheese/libcheese-camera.c                       |   42 --
 libcheese/libcheese-camera.h                       |   30 --
 src/Makefile.am                                    |   15 +-
 src/cheese-effect-chooser.c                        |   32 +-
 src/cheese-effect-chooser.h                        |    4 +-
 src/cheese-flash.c                                 |    2 +-
 src/cheese-prefs-balance-scale.c                   |   35 +-
 src/cheese-prefs-balance-scale.h                   |    4 +-
 src/cheese-prefs-burst-spinbox.h                   |    2 +-
 ...-webcam-combo.c => cheese-prefs-camera-combo.c} |  164 +++---
 src/cheese-prefs-camera-combo.h                    |   60 +++
 src/cheese-prefs-dialog.c                          |   56 +-
 src/cheese-prefs-dialog.h                          |    6 +-
 src/cheese-prefs-resolution-combo.c                |   34 +-
 src/cheese-prefs-resolution-combo.h                |    4 +-
 src/cheese-prefs-webcam-combo.h                    |   60 ---
 src/cheese-webcam.h                                |  128 -----
 src/cheese-window.c                                |   92 ++--
 23 files changed, 797 insertions(+), 792 deletions(-)
---
diff --git a/INSTALL b/INSTALL
index 5458714..2550dab 100644
--- a/INSTALL
+++ b/INSTALL
@@ -2,15 +2,15 @@ Installation Instructions
 *************************
 
 Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
-2006 Free Software Foundation, Inc.
+2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
-This file is free documentation; the Free Software Foundation gives
+   This file is free documentation; the Free Software Foundation gives
 unlimited permission to copy, distribute and modify it.
 
 Basic Installation
 ==================
 
-Briefly, the shell commands `./configure; make; make install' should
+   Briefly, the shell commands `./configure; make; make install' should
 configure, build, and install this package.  The following
 more-detailed instructions are generic; see the `README' file for
 instructions specific to this package.
@@ -67,12 +67,15 @@ The simplest way to compile this package is:
      all sorts of other programs in order to regenerate files that came
      with the distribution.
 
+  6. Often, you can also type `make uninstall' to remove the installed
+     files again.
+
 Compilers and Options
 =====================
 
-Some systems require unusual options for compilation or linking that the
-`configure' script does not know about.  Run `./configure --help' for
-details on some of the pertinent environment variables.
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
 
    You can give `configure' initial values for configuration parameters
 by setting variables in the command line or in the environment.  Here
@@ -85,7 +88,7 @@ is an example:
 Compiling For Multiple Architectures
 ====================================
 
-You can compile the package for more than one kind of computer at the
+   You can compile the package for more than one kind of computer at the
 same time, by placing the object files for each architecture in their
 own directory.  To do this, you can use GNU `make'.  `cd' to the
 directory where you want the object files and executables to go and run
@@ -97,10 +100,24 @@ architecture at a time in the source code directory.  After you have
 installed the package for one architecture, use `make distclean' before
 reconfiguring for another architecture.
 
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
 Installation Names
 ==================
 
-By default, `make install' installs the package's commands under
+   By default, `make install' installs the package's commands under
 `/usr/local/bin', include files under `/usr/local/include', etc.  You
 can specify an installation prefix other than `/usr/local' by giving
 `configure' the option `--prefix=PREFIX'.
@@ -123,7 +140,7 @@ option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
 Optional Features
 =================
 
-Some packages pay attention to `--enable-FEATURE' options to
+   Some packages pay attention to `--enable-FEATURE' options to
 `configure', where FEATURE indicates an optional part of the package.
 They may also pay attention to `--with-PACKAGE' options, where PACKAGE
 is something like `gnu-as' or `x' (for the X Window System).  The
@@ -135,14 +152,46 @@ find the X include and library files automatically, but if it doesn't,
 you can use the `configure' options `--x-includes=DIR' and
 `--x-libraries=DIR' to specify their locations.
 
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+   On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
 Specifying the System Type
 ==========================
 
-There may be some features `configure' cannot figure out automatically,
-but needs to determine by the type of machine the package will run on.
-Usually, assuming the package is built to be run on the _same_
-architectures, `configure' can figure that out, but if it prints a
-message saying it cannot guess the machine type, give it the
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
 `--build=TYPE' option.  TYPE can either be a short name for the system
 type, such as `sun4', or a canonical name which has the form:
 
@@ -150,7 +199,8 @@ type, such as `sun4', or a canonical name which has the form:
 
 where SYSTEM can have one of these forms:
 
-     OS KERNEL-OS
+     OS
+     KERNEL-OS
 
    See the file `config.sub' for the possible values of each field.  If
 `config.sub' isn't included in this package, then this package doesn't
@@ -168,9 +218,9 @@ eventually be run) with `--host=TYPE'.
 Sharing Defaults
 ================
 
-If you want to set default values for `configure' scripts to share, you
-can create a site shell script called `config.site' that gives default
-values for variables like `CC', `cache_file', and `prefix'.
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
 `configure' looks for `PREFIX/share/config.site' if it exists, then
 `PREFIX/etc/config.site' if it exists.  Or, you can set the
 `CONFIG_SITE' environment variable to the location of the site script.
@@ -179,7 +229,7 @@ A warning: not all `configure' scripts look for a site script.
 Defining Variables
 ==================
 
-Variables not defined in a site shell script can be set in the
+   Variables not defined in a site shell script can be set in the
 environment passed to `configure'.  However, some packages may run
 configure again during the build, and the customized values of these
 variables may be lost.  In order to avoid this problem, you should set
@@ -198,11 +248,19 @@ an Autoconf bug.  Until the bug is fixed you can use this workaround:
 `configure' Invocation
 ======================
 
-`configure' recognizes the following options to control how it operates.
+   `configure' recognizes the following options to control how it
+operates.
 
 `--help'
 `-h'
-     Print a summary of the options to `configure', and exit.
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
 
 `--version'
 `-V'
@@ -229,6 +287,16 @@ an Autoconf bug.  Until the bug is fixed you can use this workaround:
      Look for the package's source code in directory DIR.  Usually
      `configure' can determine that directory automatically.
 
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *Note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
 `configure' also accepts some other, not widely useful, options.  Run
 `configure --help' for more details.
 
diff --git a/Makefile.am b/Makefile.am
index 1b696a3..cb9c213 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = po help data libcheese src
+SUBDIRS = libcheese src data po help
 
 EXTRA_DIST =			\
 	$(cheesedoc_DATA)	\
diff --git a/libcheese/Makefile.am b/libcheese/Makefile.am
index 0eedb73..f906ef6 100644
--- a/libcheese/Makefile.am
+++ b/libcheese/Makefile.am
@@ -1,18 +1,23 @@
-INCLUDES = 						\
-	-DBINDIR=\"$(bindir)\"			 	\
-	-DDATADIR=\"$(datadir)\"			\
-	-DPREFIX=\""$(prefix)"\" 			\
-	-DSYSCONFDIR=\""$(sysconfdir)"\" 		\
-	-DLIBDIR=\""$(libdir)"\" 			\
-	-DPACKAGE_DATADIR=\""$(datadir)/cheese"\"	\
-	-DPACKAGE_LOCALEDIR=\""$(datadir)/locale"\"	\
-	-DAPPNAME_DATA_DIR=\"$(pkgdatadir)\"		\
-	-DGNOME_DESKTOP_USE_UNSTABLE_API=1		\
+libcheese_la_CFLAGS = \
+	-DDATADIR=\"$(datadir)\" \
+	-DPREFIX=\""$(prefix)"\" \
+	-DSYSCONFDIR=\""$(sysconfdir)"\" \
+	-DLIBDIR=\""$(libdir)"\" \
+	-DPACKAGE_DATADIR=\""$(datadir)/cheese"\" \
+	-DPACKAGE_LOCALEDIR=\""$(datadir)/locale"\" \
+	-DAPPNAME_DATA_DIR=\"$(pkgdatadir)\" \
+	-DGNOME_DESKTOP_USE_UNSTABLE_API=1 \
 	$(CHEESE_CFLAGS)
 
 lib_LTLIBRARIES = libcheese.la
 
+libcheese_la_CFLAGS = $(CHEESE_CFLAGS)
+
 libcheese_la_SOURCES = \
-	libcheese-camera.c \
-	libcheese-camera.h \
+	cheese-camera.c \
 	$(NULL)
+
+include_HEADERS = cheese-camera.h
+
+libcheese_la_LIBADD = \
+	$(CHEESE_LIBS)
diff --git a/src/cheese-webcam.c b/libcheese/cheese-camera.c
similarity index 73%
rename from src/cheese-webcam.c
rename to libcheese/cheese-camera.c
index 6bfdeb0..999e1d4 100644
--- a/src/cheese-webcam.c
+++ b/libcheese/cheese-camera.c
@@ -39,22 +39,22 @@
 #include <sys/ioctl.h>
 #include <linux/videodev.h>
 
-#include "cheese-webcam.h"
+#include "cheese-camera.h"
 
-G_DEFINE_TYPE (CheeseWebcam, cheese_webcam, G_TYPE_OBJECT)
+G_DEFINE_TYPE (CheeseCamera, cheese_camera, G_TYPE_OBJECT)
 
-#define CHEESE_WEBCAM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CHEESE_TYPE_WEBCAM, CheeseWebcamPrivate))
+#define CHEESE_CAMERA_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CHEESE_TYPE_CAMERA, CheeseCameraPrivate))
 
-#define CHEESE_WEBCAM_ERROR cheese_webcam_error_quark ()
+#define CHEESE_CAMERA_ERROR cheese_camera_error_quark ()
 
 #define MIN_DEFAULT_RATE 15.0
 
 static void find_highest_framerate (CheeseVideoFormat *format);
 
-enum CheeseWebcamError
+enum CheeseCameraError
 {
-  CHEESE_WEBCAM_ERROR_UNKNOWN,
-  CHEESE_WEBCAM_ERROR_ELEMENT_NOT_FOUND
+  CHEESE_CAMERA_ERROR_UNKNOWN,
+  CHEESE_CAMERA_ERROR_ELEMENT_NOT_FOUND
 };
 
 typedef struct
@@ -65,7 +65,7 @@ typedef struct
   GstBus *bus;
 
   /* We build the active pipeline by linking the appropriate pipelines listed below*/
-  GstElement *webcam_source_bin;
+  GstElement *camera_source_bin;
   GstElement *video_display_bin;
   GstElement *photo_save_bin;
   GstElement *video_save_bin;
@@ -87,16 +87,16 @@ typedef struct
   gboolean pipeline_is_playing;
   char *photo_filename;
 
-  int num_webcam_devices;
+  int num_camera_devices;
   char *device_name;
-  CheeseWebcamDevice *webcam_devices;
+  CheeseCameraDevice *camera_devices;
   int x_resolution;
   int y_resolution;
   int selected_device;
   CheeseVideoFormat *current_format;
 
   guint eos_timeout_id;
-} CheeseWebcamPrivate;
+} CheeseCameraPrivate;
 
 enum
 {
@@ -114,7 +114,7 @@ enum
   LAST_SIGNAL
 };
 
-static guint webcam_signals[LAST_SIGNAL];
+static guint camera_signals[LAST_SIGNAL];
 
 typedef enum
 {
@@ -124,39 +124,39 @@ typedef enum
 
 typedef struct
 {
-  CheeseWebcamEffect effect;
+  CheeseCameraEffect effect;
   const char *pipeline_desc;
   VideoColorSpace colorspace; /* The color space the effect works in */
 } EffectToPipelineDesc;
 
 
 static const EffectToPipelineDesc EFFECT_TO_PIPELINE_DESC[] = {
-  {CHEESE_WEBCAM_EFFECT_NO_EFFECT,       "identity",                             RGB},
-  {CHEESE_WEBCAM_EFFECT_MAUVE,           "videobalance saturation=1.5 hue=+0.5", YUV},
-  {CHEESE_WEBCAM_EFFECT_NOIR_BLANC,      "videobalance saturation=0",            YUV},
-  {CHEESE_WEBCAM_EFFECT_SATURATION,      "videobalance saturation=2",            YUV},
-  {CHEESE_WEBCAM_EFFECT_HULK,            "videobalance saturation=1.5 hue=-0.5", YUV},
-  {CHEESE_WEBCAM_EFFECT_VERTICAL_FLIP,   "videoflip method=5",                   YUV},
-  {CHEESE_WEBCAM_EFFECT_HORIZONTAL_FLIP, "videoflip method=4",                   YUV},
-  {CHEESE_WEBCAM_EFFECT_SHAGADELIC,      "shagadelictv",                         RGB},
-  {CHEESE_WEBCAM_EFFECT_VERTIGO,         "vertigotv",                            RGB},
-  {CHEESE_WEBCAM_EFFECT_EDGE,            "edgetv",                               RGB},
-  {CHEESE_WEBCAM_EFFECT_DICE,            "dicetv",                               RGB},
-  {CHEESE_WEBCAM_EFFECT_WARP,            "warptv",                               RGB}
+  {CHEESE_CAMERA_EFFECT_NO_EFFECT,       "identity",                             RGB},
+  {CHEESE_CAMERA_EFFECT_MAUVE,           "videobalance saturation=1.5 hue=+0.5", YUV},
+  {CHEESE_CAMERA_EFFECT_NOIR_BLANC,      "videobalance saturation=0",            YUV},
+  {CHEESE_CAMERA_EFFECT_SATURATION,      "videobalance saturation=2",            YUV},
+  {CHEESE_CAMERA_EFFECT_HULK,            "videobalance saturation=1.5 hue=-0.5", YUV},
+  {CHEESE_CAMERA_EFFECT_VERTICAL_FLIP,   "videoflip method=5",                   YUV},
+  {CHEESE_CAMERA_EFFECT_HORIZONTAL_FLIP, "videoflip method=4",                   YUV},
+  {CHEESE_CAMERA_EFFECT_SHAGADELIC,      "shagadelictv",                         RGB},
+  {CHEESE_CAMERA_EFFECT_VERTIGO,         "vertigotv",                            RGB},
+  {CHEESE_CAMERA_EFFECT_EDGE,            "edgetv",                               RGB},
+  {CHEESE_CAMERA_EFFECT_DICE,            "dicetv",                               RGB},
+  {CHEESE_CAMERA_EFFECT_WARP,            "warptv",                               RGB}
 };
 
 static const int NUM_EFFECTS = G_N_ELEMENTS (EFFECT_TO_PIPELINE_DESC);
 
 GQuark
-cheese_webcam_error_quark (void)
+cheese_camera_error_quark (void)
 {
-  return g_quark_from_static_string ("cheese-webcam-error-quark");
+  return g_quark_from_static_string ("cheese-camera-error-quark");
 }
 
 static GstBusSyncReply
-cheese_webcam_bus_sync_handler (GstBus *bus, GstMessage *message, CheeseWebcam *webcam)
+cheese_camera_bus_sync_handler (GstBus *bus, GstMessage *message, CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
   GstXOverlay         *overlay;
 
   if (GST_MESSAGE_TYPE (message) != GST_MESSAGE_ELEMENT)
@@ -180,13 +180,13 @@ cheese_webcam_bus_sync_handler (GstBus *bus, GstMessage *message, CheeseWebcam *
 }
 
 static void
-cheese_webcam_change_sink (CheeseWebcam *webcam, GstElement *src,
+cheese_camera_change_sink (CheeseCamera *camera, GstElement *src,
                            GstElement *new_sink, GstElement *old_sink)
 {
-  CheeseWebcamPrivate *priv       = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv       = CHEESE_CAMERA_GET_PRIVATE (camera);
   gboolean             is_playing = priv->pipeline_is_playing;
 
-  cheese_webcam_stop (webcam);
+  cheese_camera_stop (camera);
 
   gst_element_unlink (src, old_sink);
   gst_object_ref (old_sink);
@@ -196,13 +196,13 @@ cheese_webcam_change_sink (CheeseWebcam *webcam, GstElement *src,
   gst_element_link (src, new_sink);
 
   if (is_playing)
-    cheese_webcam_play (webcam);
+    cheese_camera_play (camera);
 }
 
 static gboolean
-cheese_webcam_expose_cb (GtkWidget *widget, GdkEventExpose *event, CheeseWebcam *webcam)
+cheese_camera_expose_cb (GtkWidget *widget, GdkEventExpose *event, CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
   GstState             state;
   GstXOverlay         *overlay = GST_X_OVERLAY (gst_bin_get_by_interface (GST_BIN (priv->pipeline),
                                                                           GST_TYPE_X_OVERLAY));
@@ -223,10 +223,10 @@ cheese_webcam_expose_cb (GtkWidget *widget, GdkEventExpose *event, CheeseWebcam
 }
 
 static void
-cheese_webcam_photo_data_cb (GstElement *element, GstBuffer *buffer,
-                             GstPad *pad, CheeseWebcam *webcam)
+cheese_camera_photo_data_cb (GstElement *element, GstBuffer *buffer,
+                             GstPad *pad, CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   GstCaps            *caps;
   const GstStructure *structure;
@@ -251,13 +251,13 @@ cheese_webcam_photo_data_cb (GstElement *element, GstBuffer *buffer,
                                priv->photo_handler_signal_id);
   priv->photo_handler_signal_id = 0;
 
-  g_signal_emit (webcam, webcam_signals[PHOTO_SAVED], 0);
+  g_signal_emit (camera, camera_signals[PHOTO_SAVED], 0);
 }
 
 static void
-cheese_webcam_bus_message_cb (GstBus *bus, GstMessage *message, CheeseWebcam *webcam)
+cheese_camera_bus_message_cb (GstBus *bus, GstMessage *message, CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_EOS)
   {
@@ -267,9 +267,9 @@ cheese_webcam_bus_message_cb (GstBus *bus, GstMessage *message, CheeseWebcam *we
 
       g_source_remove (priv->eos_timeout_id);
 
-      g_signal_emit (webcam, webcam_signals[VIDEO_SAVED], 0);
+      g_signal_emit (camera, camera_signals[VIDEO_SAVED], 0);
 
-      cheese_webcam_change_sink (webcam, priv->video_display_bin,
+      cheese_camera_change_sink (camera, priv->video_display_bin,
                                  priv->photo_save_bin, priv->video_save_bin);
       priv->is_recording = FALSE;
     }
@@ -277,9 +277,9 @@ cheese_webcam_bus_message_cb (GstBus *bus, GstMessage *message, CheeseWebcam *we
 }
 
 static void
-cheese_webcam_get_video_devices_from_hal (CheeseWebcam *webcam)
+cheese_camera_get_video_devices_from_hal (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   int            i, fd, ok;
   int            num_udis = 0;
@@ -287,7 +287,7 @@ cheese_webcam_get_video_devices_from_hal (CheeseWebcam *webcam)
   DBusError      error;
   LibHalContext *hal_ctx;
 
-  priv->num_webcam_devices = 0;
+  priv->num_camera_devices = 0;
 
   g_print ("Probing devices with HAL...\n");
 
@@ -328,8 +328,8 @@ cheese_webcam_get_video_devices_from_hal (CheeseWebcam *webcam)
     goto fallback;
   }
 
-  /* Initialize webcam structures */
-  priv->webcam_devices = g_new0 (CheeseWebcamDevice, num_udis);
+  /* Initialize camera structures */
+  priv->camera_devices = g_new0 (CheeseCameraDevice, num_udis);
 
   for (i = 0; i < num_udis; i++)
   {
@@ -439,40 +439,40 @@ cheese_webcam_get_video_devices_from_hal (CheeseWebcam *webcam)
 
     g_print ("\n");
 
-    priv->webcam_devices[priv->num_webcam_devices].hal_udi           = g_strdup (udis[i]);
-    priv->webcam_devices[priv->num_webcam_devices].video_device      = g_strdup (device);
-    priv->webcam_devices[priv->num_webcam_devices].gstreamer_src     = g_strdup (gstreamer_src);
-    priv->webcam_devices[priv->num_webcam_devices].product_name      = g_strdup (product_name);
-    priv->webcam_devices[priv->num_webcam_devices].num_video_formats = 0;
-    priv->webcam_devices[priv->num_webcam_devices].video_formats     =
+    priv->camera_devices[priv->num_camera_devices].hal_udi           = g_strdup (udis[i]);
+    priv->camera_devices[priv->num_camera_devices].video_device      = g_strdup (device);
+    priv->camera_devices[priv->num_camera_devices].gstreamer_src     = g_strdup (gstreamer_src);
+    priv->camera_devices[priv->num_camera_devices].product_name      = g_strdup (product_name);
+    priv->camera_devices[priv->num_camera_devices].num_video_formats = 0;
+    priv->camera_devices[priv->num_camera_devices].video_formats     =
       g_array_new (FALSE, FALSE, sizeof (CheeseVideoFormat));
-    priv->webcam_devices[priv->num_webcam_devices].supported_resolutions =
+    priv->camera_devices[priv->num_camera_devices].supported_resolutions =
       g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
-    priv->num_webcam_devices++;
+    priv->num_camera_devices++;
 
     libhal_free_string (device);
     close (fd);
   }
   libhal_free_string_array (udis);
 
-  if (priv->num_webcam_devices == 0)
+  if (priv->num_camera_devices == 0)
   {
     /* Create a fake device so that resolution changing stil works even if the
-     * computer doesn't have a webcam. */
+     * computer doesn't have a camera. */
 fallback:
     if (num_udis == 0)
     {
-      priv->webcam_devices = g_new0 (CheeseWebcamDevice, 1);
+      priv->camera_devices = g_new0 (CheeseCameraDevice, 1);
     }
-    priv->webcam_devices[0].num_video_formats = 0;
-    priv->webcam_devices[0].video_formats     =
+    priv->camera_devices[0].num_video_formats = 0;
+    priv->camera_devices[0].video_formats     =
       g_array_new (FALSE, FALSE, sizeof (CheeseVideoFormat));
-    priv->webcam_devices[0].hal_udi = g_strdup ("cheese_fake_videodevice");
+    priv->camera_devices[0].hal_udi = g_strdup ("cheese_fake_videodevice");
   }
 }
 
 static void
-cheese_webcam_get_supported_framerates (CheeseVideoFormat *video_format, GstStructure *structure)
+cheese_camera_get_supported_framerates (CheeseVideoFormat *video_format, GstStructure *structure)
 {
   const GValue *framerates;
   int           i, j;
@@ -532,13 +532,13 @@ cheese_webcam_get_supported_framerates (CheeseVideoFormat *video_format, GstStru
 }
 
 static void
-cheese_webcam_add_video_format (CheeseWebcamDevice *webcam_device,
+cheese_camera_add_video_format (CheeseCameraDevice *camera_device,
                                 CheeseVideoFormat *video_format, GstStructure *format_structure)
 {
   int    i;
   gchar *resolution;
 
-  cheese_webcam_get_supported_framerates (video_format, format_structure);
+  cheese_camera_get_supported_framerates (video_format, format_structure);
   find_highest_framerate (video_format);
 
   g_print ("%s %d x %d num_framerates %d\n", video_format->mimetype, video_format->width,
@@ -552,12 +552,12 @@ cheese_webcam_add_video_format (CheeseWebcamDevice *webcam_device,
   resolution = g_strdup_printf ("%ix%i", video_format->width,
                                 video_format->height);
   i = GPOINTER_TO_INT (g_hash_table_lookup (
-                         webcam_device->supported_resolutions,
+                         camera_device->supported_resolutions,
                          resolution));
   if (i)   /* Resolution already added ? */
   {
     CheeseVideoFormat *curr_format = &g_array_index (
-      webcam_device->video_formats,
+      camera_device->video_formats,
       CheeseVideoFormat, i - 1);
     float new_framerate = (float) video_format->highest_framerate.numerator /
                           video_format->highest_framerate.denominator;
@@ -575,11 +575,11 @@ cheese_webcam_add_video_format (CheeseWebcamDevice *webcam_device,
     return;
   }
 
-  g_array_append_val (webcam_device->video_formats, *video_format);
-  g_hash_table_insert (webcam_device->supported_resolutions, resolution,
-                       GINT_TO_POINTER (webcam_device->num_video_formats + 1));
+  g_array_append_val (camera_device->video_formats, *video_format);
+  g_hash_table_insert (camera_device->supported_resolutions, resolution,
+                       GINT_TO_POINTER (camera_device->num_video_formats + 1));
 
-  webcam_device->num_video_formats++;
+  camera_device->num_video_formats++;
 }
 
 static gint
@@ -595,7 +595,7 @@ cheese_resolution_compare (gconstpointer _a, gconstpointer _b)
 }
 
 static void
-cheese_webcam_get_supported_video_formats (CheeseWebcamDevice *webcam_device, GstCaps *caps)
+cheese_camera_get_supported_video_formats (CheeseCameraDevice *camera_device, GstCaps *caps)
 {
   int i;
   int num_structures;
@@ -627,7 +627,7 @@ cheese_webcam_get_supported_video_formats (CheeseWebcamDevice *webcam_device, Gs
       video_format.mimetype = g_strdup (gst_structure_get_name (structure));
       gst_structure_get_int (structure, "width", &(video_format.width));
       gst_structure_get_int (structure, "height", &(video_format.height));
-      cheese_webcam_add_video_format (webcam_device, &video_format, structure);
+      cheese_camera_add_video_format (camera_device, &video_format, structure);
     }
     else if (GST_VALUE_HOLDS_INT_RANGE (width))
     {
@@ -651,7 +651,7 @@ cheese_webcam_get_supported_video_formats (CheeseWebcamDevice *webcam_device, Gs
         video_format.mimetype = g_strdup (gst_structure_get_name (structure));
         video_format.width    = cur_width;
         video_format.height   = cur_height;
-        cheese_webcam_add_video_format (webcam_device, &video_format, structure);
+        cheese_camera_add_video_format (camera_device, &video_format, structure);
         cur_width  *= 2;
         cur_height *= 2;
       }
@@ -665,7 +665,7 @@ cheese_webcam_get_supported_video_formats (CheeseWebcamDevice *webcam_device, Gs
         video_format.mimetype = g_strdup (gst_structure_get_name (structure));
         video_format.width    = cur_width;
         video_format.height   = cur_height;
-        cheese_webcam_add_video_format (webcam_device, &video_format, structure);
+        cheese_camera_add_video_format (camera_device, &video_format, structure);
         cur_width  /= 2;
         cur_height /= 2;
       }
@@ -679,13 +679,13 @@ cheese_webcam_get_supported_video_formats (CheeseWebcamDevice *webcam_device, Gs
   /* Sort the format array (so that it will show sorted in the resolution
    * selection GUI), and rebuild the hashtable (as that will be invalid after
    * the sorting) */
-  g_array_sort (webcam_device->video_formats, cheese_resolution_compare);
-  g_hash_table_remove_all (webcam_device->supported_resolutions);
-  for (i = 0; i < webcam_device->num_video_formats; i++)
+  g_array_sort (camera_device->video_formats, cheese_resolution_compare);
+  g_hash_table_remove_all (camera_device->supported_resolutions);
+  for (i = 0; i < camera_device->num_video_formats; i++)
   {
-    CheeseVideoFormat *format = &g_array_index (webcam_device->video_formats,
+    CheeseVideoFormat *format = &g_array_index (camera_device->video_formats,
                                                 CheeseVideoFormat, i);
-    g_hash_table_insert (webcam_device->supported_resolutions,
+    g_hash_table_insert (camera_device->supported_resolutions,
                          g_strdup_printf ("%ix%i", format->width,
                                           format->height),
                          GINT_TO_POINTER (i + 1));
@@ -693,8 +693,8 @@ cheese_webcam_get_supported_video_formats (CheeseWebcamDevice *webcam_device, Gs
 }
 
 static void
-cheese_webcam_get_webcam_device_data (CheeseWebcam       *webcam,
-                                      CheeseWebcamDevice *webcam_device)
+cheese_camera_get_camera_device_data (CheeseCamera       *camera,
+                                      CheeseCameraDevice *camera_device)
 {
   char                *pipeline_desc;
   GstElement          *pipeline;
@@ -705,8 +705,8 @@ cheese_webcam_get_webcam_device_data (CheeseWebcam       *webcam,
 
   {
     pipeline_desc = g_strdup_printf ("%s name=source device=%s ! fakesink",
-                                     webcam_device->gstreamer_src,
-                                     webcam_device->video_device);
+                                     camera_device->gstreamer_src,
+                                     camera_device->video_device);
     err      = NULL;
     pipeline = gst_parse_launch (pipeline_desc, &err);
     if ((pipeline != NULL) && (err == NULL))
@@ -735,11 +735,11 @@ cheese_webcam_get_webcam_device_data (CheeseWebcam       *webcam,
         if (name == NULL)
           name = "Unknown";
 
-        g_print ("Device: %s (%s)\n", name, webcam_device->video_device);
+        g_print ("Device: %s (%s)\n", name, camera_device->video_device);
         pad  = gst_element_get_pad (src, "src");
         caps = gst_pad_get_caps (pad);
         gst_object_unref (pad);
-        cheese_webcam_get_supported_video_formats (webcam_device, caps);
+        cheese_camera_get_supported_video_formats (camera_device, caps);
         gst_caps_unref (caps);
       }
       gst_element_set_state (pipeline, GST_STATE_NULL);
@@ -753,9 +753,9 @@ cheese_webcam_get_webcam_device_data (CheeseWebcam       *webcam,
 }
 
 static void
-cheese_webcam_create_fake_format (CheeseWebcam *webcam)
+cheese_camera_create_fake_format (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   CheeseVideoFormat format;
 
@@ -769,28 +769,28 @@ cheese_webcam_create_fake_format (CheeseWebcam *webcam)
   format.framerates[0].numerator   = 30;
   format.framerates[0].denominator = 1;
 
-  g_array_append_val (priv->webcam_devices[0].video_formats, format);
+  g_array_append_val (priv->camera_devices[0].video_formats, format);
   priv->current_format = &format;
 }
 
 static void
-cheese_webcam_detect_webcam_devices (CheeseWebcam *webcam)
+cheese_camera_detect_camera_devices (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   int i;
 
-  cheese_webcam_get_video_devices_from_hal (webcam);
+  cheese_camera_get_video_devices_from_hal (camera);
 
   g_print ("Probing supported video formats...\n");
-  for (i = 0; i < priv->num_webcam_devices; i++)
+  for (i = 0; i < priv->num_camera_devices; i++)
   {
-    cheese_webcam_get_webcam_device_data (webcam, &(priv->webcam_devices[i]));
+    cheese_camera_get_camera_device_data (camera, &(priv->camera_devices[i]));
     g_print ("\n");
   }
 
-  if (priv->num_webcam_devices == 0)
-    cheese_webcam_create_fake_format (webcam);
+  if (priv->num_camera_devices == 0)
+    cheese_camera_create_fake_format (camera);
 }
 
 static void
@@ -819,16 +819,16 @@ find_highest_framerate (CheeseVideoFormat *format)
 }
 
 static gboolean
-cheese_webcam_create_webcam_source_bin (CheeseWebcam *webcam)
+cheese_camera_create_camera_source_bin (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   GError *err = NULL;
-  char   *webcam_input;
+  char   *camera_input;
 
-  if (priv->num_webcam_devices == 0)
+  if (priv->num_camera_devices == 0)
   {
-    priv->webcam_source_bin = gst_parse_bin_from_description (
+    priv->camera_source_bin = gst_parse_bin_from_description (
       "videotestsrc name=video_source ! capsfilter name=capsfilter ! identity",
       TRUE,
       &err);
@@ -842,12 +842,12 @@ cheese_webcam_create_webcam_source_bin (CheeseWebcam *webcam)
     /* If we have a matching video device use that one, otherwise use the first */
     priv->selected_device = 0;
     format                = NULL;
-    for (i = 1; i < priv->num_webcam_devices; i++)
+    for (i = 1; i < priv->num_camera_devices; i++)
     {
-      if (g_strcmp0 (priv->webcam_devices[i].video_device, priv->device_name) == 0)
+      if (g_strcmp0 (priv->camera_devices[i].video_device, priv->device_name) == 0)
         priv->selected_device = i;
     }
-    CheeseWebcamDevice *selected_webcam = &(priv->webcam_devices[priv->selected_device]);
+    CheeseCameraDevice *selected_camera = &(priv->camera_devices[priv->selected_device]);
 
     resolution = g_strdup_printf ("%ix%i", priv->x_resolution,
                                   priv->y_resolution);
@@ -856,20 +856,20 @@ cheese_webcam_create_webcam_source_bin (CheeseWebcam *webcam)
      * camera supports it. */
     if (priv->x_resolution != 0 && priv->y_resolution != 0)
     {
-      i = GPOINTER_TO_INT (g_hash_table_lookup (selected_webcam->supported_resolutions, resolution));
+      i = GPOINTER_TO_INT (g_hash_table_lookup (selected_camera->supported_resolutions, resolution));
       if (i)
-        format = &g_array_index (selected_webcam->video_formats,
+        format = &g_array_index (selected_camera->video_formats,
                                  CheeseVideoFormat, i - 1);
     }
 
     if (!format)
     {
       /* Select the highest resolution */
-      format = &(g_array_index (selected_webcam->video_formats,
+      format = &(g_array_index (selected_camera->video_formats,
                                 CheeseVideoFormat, 0));
-      for (i = 1; i < selected_webcam->num_video_formats; i++)
+      for (i = 1; i < selected_camera->num_video_formats; i++)
       {
-        CheeseVideoFormat *new = &g_array_index (selected_webcam->video_formats,
+        CheeseVideoFormat *new = &g_array_index (selected_camera->video_formats,
                                                  CheeseVideoFormat, i);
         gfloat newrate = new->highest_framerate.numerator /
                          new->highest_framerate.denominator;
@@ -887,10 +887,10 @@ cheese_webcam_create_webcam_source_bin (CheeseWebcam *webcam)
     if (format == NULL)
       goto fallback;
 
-    webcam_input = g_strdup_printf (
+    camera_input = g_strdup_printf (
       "%s name=video_source device=%s ! capsfilter name=capsfilter caps=video/x-raw-rgb,width=%d,height=%d,framerate=%d/%d;video/x-raw-yuv,width=%d,height=%d,framerate=%d/%d ! identity",
-      selected_webcam->gstreamer_src,
-      selected_webcam->video_device,
+      selected_camera->gstreamer_src,
+      selected_camera->video_device,
       format->width,
       format->height,
       format->highest_framerate.numerator,
@@ -899,18 +899,18 @@ cheese_webcam_create_webcam_source_bin (CheeseWebcam *webcam)
       format->height,
       format->highest_framerate.numerator,
       format->highest_framerate.denominator);
-    g_print ("%s\n", webcam_input);
+    g_print ("%s\n", camera_input);
 
-    priv->webcam_source_bin = gst_parse_bin_from_description (webcam_input,
+    priv->camera_source_bin = gst_parse_bin_from_description (camera_input,
                                                               TRUE, &err);
-    g_free (webcam_input);
+    g_free (camera_input);
 
-    if (priv->webcam_source_bin == NULL)
+    if (priv->camera_source_bin == NULL)
       goto fallback;
   }
 
-  priv->video_source = gst_bin_get_by_name (GST_BIN (priv->webcam_source_bin), "video_source");
-  priv->capsfilter   = gst_bin_get_by_name (GST_BIN (priv->webcam_source_bin), "capsfilter");
+  priv->video_source = gst_bin_get_by_name (GST_BIN (priv->camera_source_bin), "video_source");
+  priv->capsfilter   = gst_bin_get_by_name (GST_BIN (priv->camera_source_bin), "capsfilter");
   return TRUE;
 
 fallback:
@@ -920,28 +920,28 @@ fallback:
     err = NULL;
   }
 
-  priv->webcam_source_bin = gst_parse_bin_from_description ("videotestsrc name=video_source",
+  priv->camera_source_bin = gst_parse_bin_from_description ("videotestsrc name=video_source",
                                                             TRUE, &err);
-  priv->video_source = gst_bin_get_by_name (GST_BIN (priv->webcam_source_bin), "video_source");
+  priv->video_source = gst_bin_get_by_name (GST_BIN (priv->camera_source_bin), "video_source");
   if (err != NULL)
   {
     g_error_free (err);
     return FALSE;
   }
-  priv->capsfilter = gst_bin_get_by_name (GST_BIN (priv->webcam_source_bin),
+  priv->capsfilter = gst_bin_get_by_name (GST_BIN (priv->camera_source_bin),
                                           "capsfilter");
   return TRUE;
 }
 
 static void
-cheese_webcam_set_error_element_not_found (GError **error, const char *factoryname)
+cheese_camera_set_error_element_not_found (GError **error, const char *factoryname)
 {
   if (error == NULL)
     return;
 
   if (*error == NULL)
   {
-    g_set_error (error, CHEESE_WEBCAM_ERROR, CHEESE_WEBCAM_ERROR_ELEMENT_NOT_FOUND, "%s.", factoryname);
+    g_set_error (error, CHEESE_CAMERA_ERROR, CHEESE_CAMERA_ERROR_ELEMENT_NOT_FOUND, "%s.", factoryname);
   }
   else
   {
@@ -967,9 +967,9 @@ cheese_webcam_set_error_element_not_found (GError **error, const char *factoryna
 }
 
 static gboolean
-cheese_webcam_create_video_display_bin (CheeseWebcam *webcam, GError **error)
+cheese_camera_create_video_display_bin (CheeseCamera *camera, GError **error)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   GstElement *tee, *video_display_queue, *video_scale, *video_sink, *save_queue;
 
@@ -978,45 +978,45 @@ cheese_webcam_create_video_display_bin (CheeseWebcam *webcam, GError **error)
 
   priv->video_display_bin = gst_bin_new ("video_display_bin");
 
-  cheese_webcam_create_webcam_source_bin (webcam);
+  cheese_camera_create_camera_source_bin (camera);
 
   if ((priv->effect_filter = gst_element_factory_make ("identity", "effect")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "identity");
+    cheese_camera_set_error_element_not_found (error, "identity");
   }
   if ((priv->csp_post_effect = gst_element_factory_make ("ffmpegcolorspace", "csp_post_effect")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "ffmpegcolorspace");
+    cheese_camera_set_error_element_not_found (error, "ffmpegcolorspace");
   }
   if ((priv->video_balance = gst_element_factory_make ("videobalance", "video_balance")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "videobalance");
+    cheese_camera_set_error_element_not_found (error, "videobalance");
     return FALSE;
   }
   if ((priv->csp_post_balance = gst_element_factory_make ("ffmpegcolorspace", "csp_post_balance")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "ffmpegcolorspace");
+    cheese_camera_set_error_element_not_found (error, "ffmpegcolorspace");
     return FALSE;
   }
 
   if ((tee = gst_element_factory_make ("tee", "tee")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "tee");
+    cheese_camera_set_error_element_not_found (error, "tee");
   }
 
   if ((save_queue = gst_element_factory_make ("queue", "save_queue")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "queue");
+    cheese_camera_set_error_element_not_found (error, "queue");
   }
 
   if ((video_display_queue = gst_element_factory_make ("queue", "video_display_queue")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "queue");
+    cheese_camera_set_error_element_not_found (error, "queue");
   }
 
   if ((video_scale = gst_element_factory_make ("videoscale", "video_scale")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "videoscale");
+    cheese_camera_set_error_element_not_found (error, "videoscale");
   }
   else
   {
@@ -1026,19 +1026,19 @@ cheese_webcam_create_video_display_bin (CheeseWebcam *webcam, GError **error)
 
   if ((video_sink = gst_element_factory_make ("gconfvideosink", "video_sink")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "gconfvideosink");
+    cheese_camera_set_error_element_not_found (error, "gconfvideosink");
   }
 
   if (error != NULL && *error != NULL)
     return FALSE;
 
-  gst_bin_add_many (GST_BIN (priv->video_display_bin), priv->webcam_source_bin,
+  gst_bin_add_many (GST_BIN (priv->video_display_bin), priv->camera_source_bin,
                     priv->effect_filter, priv->csp_post_effect,
                     priv->video_balance, priv->csp_post_balance,
                     tee, save_queue,
                     video_display_queue, video_scale, video_sink, NULL);
 
-  ok = gst_element_link_many (priv->webcam_source_bin, priv->effect_filter,
+  ok = gst_element_link_many (priv->camera_source_bin, priv->effect_filter,
                               priv->csp_post_effect,
                               priv->video_balance, priv->csp_post_balance,
                               tee, NULL);
@@ -1059,9 +1059,9 @@ cheese_webcam_create_video_display_bin (CheeseWebcam *webcam, GError **error)
 }
 
 static gboolean
-cheese_webcam_create_photo_save_bin (CheeseWebcam *webcam, GError **error)
+cheese_camera_create_photo_save_bin (CheeseCamera *camera, GError **error)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   GstElement *csp_photo_save_bin;
 
@@ -1073,11 +1073,11 @@ cheese_webcam_create_photo_save_bin (CheeseWebcam *webcam, GError **error)
 
   if ((csp_photo_save_bin = gst_element_factory_make ("ffmpegcolorspace", "csp_photo_save_bin")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "ffmpegcolorspace");
+    cheese_camera_set_error_element_not_found (error, "ffmpegcolorspace");
   }
   if ((priv->photo_sink = gst_element_factory_make ("fakesink", "photo_sink")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "fakesink");
+    cheese_camera_set_error_element_not_found (error, "fakesink");
   }
 
   if (error != NULL && *error != NULL)
@@ -1107,9 +1107,9 @@ cheese_webcam_create_photo_save_bin (CheeseWebcam *webcam, GError **error)
 }
 
 static gboolean
-cheese_webcam_create_video_save_bin (CheeseWebcam *webcam, GError **error)
+cheese_camera_create_video_save_bin (CheeseCamera *camera, GError **error)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   GstElement *audio_queue, *audio_convert, *audio_enc;
   GstElement *video_save_csp, *video_save_rate, *video_save_scale, *video_enc;
@@ -1121,28 +1121,28 @@ cheese_webcam_create_video_save_bin (CheeseWebcam *webcam, GError **error)
 
   if ((priv->audio_source = gst_element_factory_make ("gconfaudiosrc", "audio_source")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "gconfaudiosrc");
+    cheese_camera_set_error_element_not_found (error, "gconfaudiosrc");
   }
   if ((audio_queue = gst_element_factory_make ("queue", "audio_queue")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "queue");
+    cheese_camera_set_error_element_not_found (error, "queue");
   }
   if ((audio_convert = gst_element_factory_make ("audioconvert", "audio_convert")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "audioconvert");
+    cheese_camera_set_error_element_not_found (error, "audioconvert");
   }
   if ((audio_enc = gst_element_factory_make ("vorbisenc", "audio_enc")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "vorbisenc");
+    cheese_camera_set_error_element_not_found (error, "vorbisenc");
   }
 
   if ((video_save_csp = gst_element_factory_make ("ffmpegcolorspace", "video_save_csp")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "ffmpegcolorspace");
+    cheese_camera_set_error_element_not_found (error, "ffmpegcolorspace");
   }
   if ((video_enc = gst_element_factory_make ("theoraenc", "video_enc")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "theoraenc");
+    cheese_camera_set_error_element_not_found (error, "theoraenc");
   }
   else
   {
@@ -1151,11 +1151,11 @@ cheese_webcam_create_video_save_bin (CheeseWebcam *webcam, GError **error)
 
   if ((video_save_rate = gst_element_factory_make ("videorate", "video_save_rate")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "videorate");
+    cheese_camera_set_error_element_not_found (error, "videorate");
   }
   if ((video_save_scale = gst_element_factory_make ("videoscale", "video_save_scale")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "videoscale");
+    cheese_camera_set_error_element_not_found (error, "videoscale");
   }
   else
   {
@@ -1165,7 +1165,7 @@ cheese_webcam_create_video_save_bin (CheeseWebcam *webcam, GError **error)
 
   if ((mux = gst_element_factory_make ("oggmux", "mux")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "oggmux");
+    cheese_camera_set_error_element_not_found (error, "oggmux");
   }
   else
   {
@@ -1176,7 +1176,7 @@ cheese_webcam_create_video_save_bin (CheeseWebcam *webcam, GError **error)
 
   if ((priv->video_file_sink = gst_element_factory_make ("filesink", "video_file_sink")) == NULL)
   {
-    cheese_webcam_set_error_element_not_found (error, "filesink");
+    cheese_camera_set_error_element_not_found (error, "filesink");
   }
 
   if (error != NULL && *error != NULL)
@@ -1206,17 +1206,17 @@ cheese_webcam_create_video_save_bin (CheeseWebcam *webcam, GError **error)
 }
 
 int
-cheese_webcam_get_num_webcam_devices (CheeseWebcam *webcam)
+cheese_camera_get_num_camera_devices (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
-  return priv->num_webcam_devices;
+  return priv->num_camera_devices;
 }
 
 gboolean
-cheese_webcam_switch_webcam_device (CheeseWebcam *webcam)
+cheese_camera_switch_camera_device (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   gboolean was_recording        = FALSE;
   gboolean pipeline_was_playing = FALSE;
@@ -1227,19 +1227,19 @@ cheese_webcam_switch_webcam_device (CheeseWebcam *webcam)
 
   if (priv->is_recording)
   {
-    cheese_webcam_stop_video_recording (webcam);
+    cheese_camera_stop_video_recording (camera);
     was_recording = TRUE;
   }
 
   if (priv->pipeline_is_playing)
   {
-    cheese_webcam_stop (webcam);
+    cheese_camera_stop (camera);
     pipeline_was_playing = TRUE;
   }
 
   gst_bin_remove (GST_BIN (priv->pipeline), priv->video_display_bin);
 
-  disp_bin_created = cheese_webcam_create_video_display_bin (webcam, &error);
+  disp_bin_created = cheese_camera_create_video_display_bin (camera, &error);
   if (!disp_bin_created)
   {
     return FALSE;
@@ -1260,7 +1260,7 @@ cheese_webcam_switch_webcam_device (CheeseWebcam *webcam)
 
   if (pipeline_was_playing)
   {
-    cheese_webcam_play (webcam);
+    cheese_camera_play (camera);
   }
 
   /* if (was_recording)
@@ -1272,51 +1272,51 @@ cheese_webcam_switch_webcam_device (CheeseWebcam *webcam)
 }
 
 void
-cheese_webcam_play (CheeseWebcam *webcam)
+cheese_camera_play (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   gst_element_set_state (priv->pipeline, GST_STATE_PLAYING);
   priv->pipeline_is_playing = TRUE;
 }
 
 void
-cheese_webcam_stop (CheeseWebcam *webcam)
+cheese_camera_stop (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   gst_element_set_state (priv->pipeline, GST_STATE_NULL);
   priv->pipeline_is_playing = FALSE;
 }
 
 static void
-cheese_webcam_change_effect_filter (CheeseWebcam *webcam, GstElement *new_filter)
+cheese_camera_change_effect_filter (CheeseCamera *camera, GstElement *new_filter)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   gboolean is_playing = priv->pipeline_is_playing;
   gboolean ok;
 
-  cheese_webcam_stop (webcam);
+  cheese_camera_stop (camera);
 
-  gst_element_unlink_many (priv->webcam_source_bin, priv->effect_filter,
+  gst_element_unlink_many (priv->camera_source_bin, priv->effect_filter,
                            priv->csp_post_effect, NULL);
 
   gst_bin_remove (GST_BIN (priv->video_display_bin), priv->effect_filter);
 
   gst_bin_add (GST_BIN (priv->video_display_bin), new_filter);
-  ok = gst_element_link_many (priv->webcam_source_bin, new_filter,
+  ok = gst_element_link_many (priv->camera_source_bin, new_filter,
                               priv->csp_post_effect, NULL);
   g_return_if_fail (ok);
 
   if (is_playing)
-    cheese_webcam_play (webcam);
+    cheese_camera_play (camera);
 
   priv->effect_filter = new_filter;
 }
 
 void
-cheese_webcam_set_effect (CheeseWebcam *webcam, CheeseWebcamEffect effect)
+cheese_camera_set_effect (CheeseCamera *camera, CheeseCameraEffect effect)
 {
   GString    *rgb_effects_str = g_string_new ("");
   GString    *yuv_effects_str = g_string_new ("");
@@ -1353,7 +1353,7 @@ cheese_webcam_set_effect (CheeseWebcam *webcam, CheeseWebcamEffect effect)
     g_error_free (err);
     g_error ("ERROR effect_filter\n");
   }
-  cheese_webcam_change_effect_filter (webcam, effect_filter);
+  cheese_camera_change_effect_filter (camera, effect_filter);
 
   g_free (effects_pipeline_desc);
   g_string_free (rgb_effects_str, TRUE);
@@ -1361,28 +1361,28 @@ cheese_webcam_set_effect (CheeseWebcam *webcam, CheeseWebcamEffect effect)
 }
 
 void
-cheese_webcam_start_video_recording (CheeseWebcam *webcam, char *filename)
+cheese_camera_start_video_recording (CheeseCamera *camera, char *filename)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
-  g_object_set (CHEESE_WEBCAM_GET_PRIVATE (webcam)->video_file_sink, "location", filename, NULL);
-  cheese_webcam_change_sink (webcam, priv->video_display_bin,
+  g_object_set (CHEESE_CAMERA_GET_PRIVATE (camera)->video_file_sink, "location", filename, NULL);
+  cheese_camera_change_sink (camera, priv->video_display_bin,
                              priv->video_save_bin, priv->photo_save_bin);
   priv->is_recording = TRUE;
 }
 
 static gboolean
-cheese_webcam_force_stop_video_recording (gpointer data)
+cheese_camera_force_stop_video_recording (gpointer data)
 {
-  CheeseWebcam        *webcam = CHEESE_WEBCAM (data);
-  CheeseWebcamPrivate *priv   = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCamera        *camera = CHEESE_CAMERA (data);
+  CheeseCameraPrivate *priv   = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   if (priv->is_recording)
   {
     g_print ("Cannot cleanly shutdown recording pipeline, forcing\n");
-    g_signal_emit (webcam, webcam_signals[VIDEO_SAVED], 0);
+    g_signal_emit (camera, camera_signals[VIDEO_SAVED], 0);
 
-    cheese_webcam_change_sink (webcam, priv->video_display_bin,
+    cheese_camera_change_sink (camera, priv->video_display_bin,
                                priv->photo_save_bin, priv->video_save_bin);
     priv->is_recording = FALSE;
   }
@@ -1391,9 +1391,9 @@ cheese_webcam_force_stop_video_recording (gpointer data)
 }
 
 void
-cheese_webcam_stop_video_recording (CheeseWebcam *webcam)
+cheese_camera_stop_video_recording (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
   GstState             state;
 
   gst_element_get_state (priv->pipeline, &state, NULL, 0);
@@ -1404,18 +1404,18 @@ cheese_webcam_stop_video_recording (CheeseWebcam *webcam)
     g_print ("Sending EOS event down the recording pipeline\n");
     gst_element_send_event (priv->video_source, gst_event_new_eos ());
     gst_element_send_event (priv->audio_source, gst_event_new_eos ());
-    priv->eos_timeout_id = g_timeout_add (3000, cheese_webcam_force_stop_video_recording, webcam);
+    priv->eos_timeout_id = g_timeout_add (3000, cheese_camera_force_stop_video_recording, camera);
   }
   else
   {
-    cheese_webcam_force_stop_video_recording (webcam);
+    cheese_camera_force_stop_video_recording (camera);
   }
 }
 
 gboolean
-cheese_webcam_take_photo (CheeseWebcam *webcam, char *filename)
+cheese_camera_take_photo (CheeseCamera *camera, char *filename)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   if (priv->photo_handler_signal_id != 0)
   {
@@ -1429,21 +1429,21 @@ cheese_webcam_take_photo (CheeseWebcam *webcam, char *filename)
   /* Take the photo by connecting the handoff signal */
   priv->photo_handler_signal_id = g_signal_connect (G_OBJECT (priv->photo_sink),
                                                     "handoff",
-                                                    G_CALLBACK (cheese_webcam_photo_data_cb),
-                                                    webcam);
+                                                    G_CALLBACK (cheese_camera_photo_data_cb),
+                                                    camera);
   return TRUE;
 }
 
 static void
-cheese_webcam_finalize (GObject *object)
+cheese_camera_finalize (GObject *object)
 {
-  CheeseWebcam *webcam;
+  CheeseCamera *camera;
   int           i, j;
 
-  webcam = CHEESE_WEBCAM (object);
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  camera = CHEESE_CAMERA (object);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
-  cheese_webcam_stop (webcam);
+  cheese_camera_stop (camera);
   gst_object_unref (priv->pipeline);
 
   if (priv->is_recording)
@@ -1454,34 +1454,34 @@ cheese_webcam_finalize (GObject *object)
   g_free (priv->photo_filename);
   g_free (priv->device_name);
 
-  /* Free CheeseWebcamDevice array */
-  for (i = 0; i < priv->num_webcam_devices; i++)
+  /* Free CheeseCameraDevice array */
+  for (i = 0; i < priv->num_camera_devices; i++)
   {
-    for (j = 0; j < priv->webcam_devices[i].num_video_formats; j++)
+    for (j = 0; j < priv->camera_devices[i].num_video_formats; j++)
     {
-      g_free (g_array_index (priv->webcam_devices[i].video_formats, CheeseVideoFormat, j).framerates);
-      g_free (g_array_index (priv->webcam_devices[i].video_formats, CheeseVideoFormat, j).mimetype);
+      g_free (g_array_index (priv->camera_devices[i].video_formats, CheeseVideoFormat, j).framerates);
+      g_free (g_array_index (priv->camera_devices[i].video_formats, CheeseVideoFormat, j).mimetype);
     }
-    g_free (priv->webcam_devices[i].video_device);
-    g_free (priv->webcam_devices[i].hal_udi);
-    g_free (priv->webcam_devices[i].gstreamer_src);
-    g_free (priv->webcam_devices[i].product_name);
-    g_array_free (priv->webcam_devices[i].video_formats, TRUE);
-    g_hash_table_destroy (priv->webcam_devices[i].supported_resolutions);
+    g_free (priv->camera_devices[i].video_device);
+    g_free (priv->camera_devices[i].hal_udi);
+    g_free (priv->camera_devices[i].gstreamer_src);
+    g_free (priv->camera_devices[i].product_name);
+    g_array_free (priv->camera_devices[i].video_formats, TRUE);
+    g_hash_table_destroy (priv->camera_devices[i].supported_resolutions);
   }
-  g_free (priv->webcam_devices);
+  g_free (priv->camera_devices);
 
-  G_OBJECT_CLASS (cheese_webcam_parent_class)->finalize (object);
+  G_OBJECT_CLASS (cheese_camera_parent_class)->finalize (object);
 }
 
 static void
-cheese_webcam_get_property (GObject *object, guint prop_id, GValue *value,
+cheese_camera_get_property (GObject *object, guint prop_id, GValue *value,
                             GParamSpec *pspec)
 {
-  CheeseWebcam *self;
+  CheeseCamera *self;
 
-  self = CHEESE_WEBCAM (object);
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (self);
+  self = CHEESE_CAMERA (object);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (self);
 
   switch (prop_id)
   {
@@ -1504,20 +1504,20 @@ cheese_webcam_get_property (GObject *object, guint prop_id, GValue *value,
 }
 
 static void
-cheese_webcam_set_property (GObject *object, guint prop_id, const GValue *value,
+cheese_camera_set_property (GObject *object, guint prop_id, const GValue *value,
                             GParamSpec *pspec)
 {
-  CheeseWebcam *self;
+  CheeseCamera *self;
 
-  self = CHEESE_WEBCAM (object);
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (self);
+  self = CHEESE_CAMERA (object);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (self);
 
   switch (prop_id)
   {
     case PROP_VIDEO_WINDOW:
       priv->video_window = g_value_get_pointer (value);
       g_signal_connect (priv->video_window, "expose-event",
-                        G_CALLBACK (cheese_webcam_expose_cb), self);
+                        G_CALLBACK (cheese_camera_expose_cb), self);
       break;
     case PROP_DEVICE_NAME:
       g_free (priv->device_name);
@@ -1536,24 +1536,24 @@ cheese_webcam_set_property (GObject *object, guint prop_id, const GValue *value,
 }
 
 static void
-cheese_webcam_class_init (CheeseWebcamClass *klass)
+cheese_camera_class_init (CheeseCameraClass *klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-  object_class->finalize     = cheese_webcam_finalize;
-  object_class->get_property = cheese_webcam_get_property;
-  object_class->set_property = cheese_webcam_set_property;
+  object_class->finalize     = cheese_camera_finalize;
+  object_class->get_property = cheese_camera_get_property;
+  object_class->set_property = cheese_camera_set_property;
 
-  webcam_signals[PHOTO_SAVED] = g_signal_new ("photo-saved", G_OBJECT_CLASS_TYPE (klass),
+  camera_signals[PHOTO_SAVED] = g_signal_new ("photo-saved", G_OBJECT_CLASS_TYPE (klass),
                                               G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-                                              G_STRUCT_OFFSET (CheeseWebcamClass, photo_saved),
+                                              G_STRUCT_OFFSET (CheeseCameraClass, photo_saved),
                                               NULL, NULL,
                                               g_cclosure_marshal_VOID__VOID,
                                               G_TYPE_NONE, 0);
 
-  webcam_signals[VIDEO_SAVED] = g_signal_new ("video-saved", G_OBJECT_CLASS_TYPE (klass),
+  camera_signals[VIDEO_SAVED] = g_signal_new ("video-saved", G_OBJECT_CLASS_TYPE (klass),
                                               G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
-                                              G_STRUCT_OFFSET (CheeseWebcamClass, video_saved),
+                                              G_STRUCT_OFFSET (CheeseCameraClass, video_saved),
                                               NULL, NULL,
                                               g_cclosure_marshal_VOID__VOID,
                                               G_TYPE_NONE, 0);
@@ -1593,67 +1593,67 @@ cheese_webcam_class_init (CheeseWebcamClass *klass)
                                                      G_PARAM_CONSTRUCT_ONLY));
 
 
-  g_type_class_add_private (klass, sizeof (CheeseWebcamPrivate));
+  g_type_class_add_private (klass, sizeof (CheeseCameraPrivate));
 }
 
 static void
-cheese_webcam_init (CheeseWebcam *webcam)
+cheese_camera_init (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   priv->is_recording            = FALSE;
   priv->pipeline_is_playing     = FALSE;
   priv->photo_filename          = NULL;
-  priv->webcam_devices          = NULL;
+  priv->camera_devices          = NULL;
   priv->device_name             = NULL;
   priv->photo_handler_signal_id = 0;
 }
 
-CheeseWebcam *
-cheese_webcam_new (GtkWidget *video_window, char *webcam_device_name,
+CheeseCamera *
+cheese_camera_new (GtkWidget *video_window, char *camera_device_name,
                    int x_resolution, int y_resolution)
 {
-  CheeseWebcam *webcam;
+  CheeseCamera *camera;
 
-  if (webcam_device_name)
+  if (camera_device_name)
   {
-    webcam = g_object_new (CHEESE_TYPE_WEBCAM, "video-window", video_window,
-                           "device_name", webcam_device_name,
+    camera = g_object_new (CHEESE_TYPE_CAMERA, "video-window", video_window,
+                           "device_name", camera_device_name,
                            "x-resolution", x_resolution,
                            "y-resolution", y_resolution, NULL);
   }
   else
   {
-    webcam = g_object_new (CHEESE_TYPE_WEBCAM, "video-window", video_window,
+    camera = g_object_new (CHEESE_TYPE_CAMERA, "video-window", video_window,
                            "x-resolution", x_resolution,
                            "y-resolution", y_resolution, NULL);
   }
 
-  return webcam;
+  return camera;
 }
 
 void
-cheese_webcam_setup (CheeseWebcam *webcam, char *hal_dev_udi, GError **error)
+cheese_camera_setup (CheeseCamera *camera, char *hal_dev_udi, GError **error)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   gboolean ok        = TRUE;
   GError  *tmp_error = NULL;
 
-  cheese_webcam_detect_webcam_devices (webcam);
+  cheese_camera_detect_camera_devices (camera);
 
   if (hal_dev_udi != NULL)
   {
-    cheese_webcam_set_device_by_dev_udi (webcam, hal_dev_udi);
+    cheese_camera_set_device_by_dev_udi (camera, hal_dev_udi);
   }
 
   priv->pipeline = gst_pipeline_new ("pipeline");
 
-  cheese_webcam_create_video_display_bin (webcam, &tmp_error);
+  cheese_camera_create_video_display_bin (camera, &tmp_error);
 
-  cheese_webcam_create_photo_save_bin (webcam, &tmp_error);
+  cheese_camera_create_photo_save_bin (camera, &tmp_error);
 
-  cheese_webcam_create_video_save_bin (webcam, &tmp_error);
+  cheese_camera_create_video_save_bin (camera, &tmp_error);
   if (tmp_error != NULL)
   {
     g_propagate_error (error, tmp_error);
@@ -1670,74 +1670,74 @@ cheese_webcam_setup (CheeseWebcam *webcam, char *hal_dev_udi, GError **error)
   gst_bus_add_signal_watch (priv->bus);
 
   g_signal_connect (G_OBJECT (priv->bus), "message",
-                    G_CALLBACK (cheese_webcam_bus_message_cb), webcam);
+                    G_CALLBACK (cheese_camera_bus_message_cb), camera);
 
-  gst_bus_set_sync_handler (priv->bus, (GstBusSyncHandler) cheese_webcam_bus_sync_handler, webcam);
+  gst_bus_set_sync_handler (priv->bus, (GstBusSyncHandler) cheese_camera_bus_sync_handler, camera);
 
   if (!ok)
     g_error ("Unable link pipeline for photo");
 }
 
 int
-cheese_webcam_get_selected_device_index (CheeseWebcam *webcam)
+cheese_camera_get_selected_device_index (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   return priv->selected_device;
 }
 
 GArray *
-cheese_webcam_get_webcam_devices (CheeseWebcam *webcam)
+cheese_camera_get_camera_devices (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   GArray *devices_arr;
 
   devices_arr = g_array_sized_new (FALSE,
                                    TRUE,
-                                   sizeof (CheeseWebcamDevice),
-                                   priv->num_webcam_devices);
+                                   sizeof (CheeseCameraDevice),
+                                   priv->num_camera_devices);
   devices_arr = g_array_append_vals (devices_arr,
-                                     priv->webcam_devices,
-                                     priv->num_webcam_devices);
+                                     priv->camera_devices,
+                                     priv->num_camera_devices);
   return devices_arr;
 }
 
 void
-cheese_webcam_set_device_by_dev_file (CheeseWebcam *webcam, char *file)
+cheese_camera_set_device_by_dev_file (CheeseCamera *camera, char *file)
 {
-  g_object_set (webcam, "device_name", file, NULL);
+  g_object_set (camera, "device_name", file, NULL);
 }
 
 void
-cheese_webcam_set_device_by_dev_udi (CheeseWebcam *webcam, char *udi)
+cheese_camera_set_device_by_dev_udi (CheeseCamera *camera, char *udi)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   int i;
 
-  for (i = 0; i < priv->num_webcam_devices; i++)
+  for (i = 0; i < priv->num_camera_devices; i++)
   {
-    if (strcmp (priv->webcam_devices[i].hal_udi, udi) == 0)
+    if (strcmp (priv->camera_devices[i].hal_udi, udi) == 0)
     {
-      g_object_set (webcam, "device_name", priv->webcam_devices[i].video_device, NULL);
+      g_object_set (camera, "device_name", priv->camera_devices[i].video_device, NULL);
       break;
     }
   }
 }
 
 GArray *
-cheese_webcam_get_video_formats (CheeseWebcam *webcam)
+cheese_camera_get_video_formats (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
-  return priv->webcam_devices[priv->selected_device].video_formats;
+  return priv->camera_devices[priv->selected_device].video_formats;
 }
 
 void
-cheese_webcam_set_video_format (CheeseWebcam *webcam, CheeseVideoFormat *format)
+cheese_camera_set_video_format (CheeseCamera *camera, CheeseVideoFormat *format)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   GstCaps *new_caps;
 
@@ -1763,25 +1763,25 @@ cheese_webcam_set_video_format (CheeseWebcam *webcam, CheeseVideoFormat *format)
 
   priv->current_format = format;
 
-  cheese_webcam_stop (webcam);
+  cheese_camera_stop (camera);
   g_object_set (priv->capsfilter, "caps", new_caps, NULL);
-  cheese_webcam_play (webcam);
+  cheese_camera_play (camera);
 }
 
 CheeseVideoFormat *
-cheese_webcam_get_current_video_format (CheeseWebcam *webcam)
+cheese_camera_get_current_video_format (CheeseCamera *camera)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   return priv->current_format;
 }
 
 void
-cheese_webcam_get_balance_property_range (CheeseWebcam *webcam,
+cheese_camera_get_balance_property_range (CheeseCamera *camera,
                                           gchar *property,
                                           gdouble *min, gdouble *max, gdouble *def)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
   GParamSpec          *pspec;
 
   *min = 0.0;
@@ -1799,9 +1799,9 @@ cheese_webcam_get_balance_property_range (CheeseWebcam *webcam,
 }
 
 void
-cheese_webcam_set_balance_property (CheeseWebcam *webcam, gchar *property, gdouble value)
+cheese_camera_set_balance_property (CheeseCamera *camera, gchar *property, gdouble value)
 {
-  CheeseWebcamPrivate *priv = CHEESE_WEBCAM_GET_PRIVATE (webcam);
+  CheeseCameraPrivate *priv = CHEESE_CAMERA_GET_PRIVATE (camera);
 
   g_object_set (G_OBJECT (priv->video_balance), property, value, NULL);
 }
diff --git a/libcheese/cheese-camera.h b/libcheese/cheese-camera.h
new file mode 100644
index 0000000..fe7d1c7
--- /dev/null
+++ b/libcheese/cheese-camera.h
@@ -0,0 +1,128 @@
+/*
+ * Copyright © 2007,2008 Jaap Haitsma <jaap haitsma org>
+ * Copyright © 2007,2008 daniel g. siegel <dgsiegel gnome org>
+ * Copyright © 2008 Ryan zeigler <zeiglerr gmail com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef __CHEESE_CAMERA_H__
+#define __CHEESE_CAMERA_H__
+
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <gst/interfaces/xoverlay.h>
+
+G_BEGIN_DECLS
+
+#define CHEESE_TYPE_CAMERA (cheese_camera_get_type ())
+#define CHEESE_CAMERA(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), CHEESE_TYPE_CAMERA, CheeseCamera))
+#define CHEESE_CAMERA_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST ((k), CHEESE_TYPE_CAMERA, CheeseCameraClass))
+#define CHEESE_IS_CAMERA(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), CHEESE_TYPE_CAMERA))
+#define CHEESE_IS_CAMERA_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), CHEESE_TYPE_CAMERA))
+#define CHEESE_CAMERA_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CHEESE_TYPE_CAMERA, CheeseCameraClass))
+
+typedef struct
+{
+  int numerator;
+  int denominator;
+} CheeseFramerate;
+
+typedef struct
+{
+  char *mimetype;
+  int   width;
+  int   height;
+  int   num_framerates;
+  CheeseFramerate *framerates;
+  CheeseFramerate  highest_framerate;
+} CheeseVideoFormat;
+
+typedef struct
+{
+  char *video_device;
+  char *hal_udi;
+  char *gstreamer_src;
+  char *product_name;
+  int   num_video_formats;
+  GArray *video_formats;
+
+  /* Hash table for resolution based lookup of video_formats */
+  GHashTable *supported_resolutions;
+} CheeseCameraDevice;
+
+typedef enum
+{
+  CHEESE_CAMERA_EFFECT_NO_EFFECT       = (0),
+  CHEESE_CAMERA_EFFECT_MAUVE           = (1 << 0),
+  CHEESE_CAMERA_EFFECT_NOIR_BLANC      = (1 << 1),
+  CHEESE_CAMERA_EFFECT_SATURATION      = (1 << 2),
+  CHEESE_CAMERA_EFFECT_HULK            = (1 << 3),
+  CHEESE_CAMERA_EFFECT_VERTICAL_FLIP   = (1 << 4),
+  CHEESE_CAMERA_EFFECT_HORIZONTAL_FLIP = (1 << 5),
+  CHEESE_CAMERA_EFFECT_SHAGADELIC      = (1 << 6),
+  CHEESE_CAMERA_EFFECT_VERTIGO         = (1 << 7),
+  CHEESE_CAMERA_EFFECT_EDGE            = (1 << 8),
+  CHEESE_CAMERA_EFFECT_DICE            = (1 << 9),
+  CHEESE_CAMERA_EFFECT_WARP            = (1 << 10),
+}
+CheeseCameraEffect;
+
+typedef struct
+{
+  GObject parent;
+} CheeseCamera;
+
+typedef struct
+{
+  GObjectClass parent_class;
+  void (*photo_saved)(CheeseCamera *camera);
+  void (*video_saved)(CheeseCamera *camera);
+} CheeseCameraClass;
+
+
+GType         cheese_camera_get_type (void);
+CheeseCamera *cheese_camera_new (GtkWidget *video_window,
+                                 char      *camera_device_name,
+                                 int        x_resolution,
+                                 int        y_resolution);
+
+CheeseVideoFormat *cheese_camera_get_current_video_format (CheeseCamera *camera);
+void               cheese_camera_setup (CheeseCamera *camera, char *udi, GError **error);
+void               cheese_camera_play (CheeseCamera *camera);
+void               cheese_camera_stop (CheeseCamera *camera);
+void               cheese_camera_set_effect (CheeseCamera *camera, CheeseCameraEffect effect);
+void               cheese_camera_start_video_recording (CheeseCamera *camera, char *filename);
+void               cheese_camera_stop_video_recording (CheeseCamera *camera);
+gboolean           cheese_camera_take_photo (CheeseCamera *camera, char *filename);
+gboolean           cheese_camera_has_camera (CheeseCamera *camera);
+int                cheese_camera_get_num_camera_devices (CheeseCamera *camera);
+int                cheese_camera_get_selected_device_index (CheeseCamera *camera);
+GArray *           cheese_camera_get_camera_devices (CheeseCamera *camera);
+void               cheese_camera_set_device_by_dev_file (CheeseCamera *camera, char *file);
+void               cheese_camera_set_device_by_dev_udi (CheeseCamera *camera, char *udi);
+gboolean           cheese_camera_switch_camera_device (CheeseCamera *camera);
+GArray *           cheese_camera_get_video_formats (CheeseCamera *camera);
+void               cheese_camera_set_video_format (CheeseCamera      *camera,
+                                                   CheeseVideoFormat *format);
+void cheese_camera_get_balance_property_range (CheeseCamera *camera,
+                                               gchar *property,
+                                               gdouble *min, gdouble *max, gdouble *def);
+void cheese_camera_set_balance_property (CheeseCamera *camera, gchar *property, gdouble value);
+G_END_DECLS
+
+#endif /* __CHEESE_CAMERA_H__ */
diff --git a/src/Makefile.am b/src/Makefile.am
index 21cb8a9..7e4e86c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -8,7 +8,9 @@ INCLUDES = 						\
 	-DPACKAGE_LOCALEDIR=\""$(datadir)/locale"\"	\
 	-DAPPNAME_DATA_DIR=\"$(pkgdatadir)\"		\
 	-DGNOME_DESKTOP_USE_UNSTABLE_API=1		\
-	$(CHEESE_CFLAGS)
+	$(CHEESE_CFLAGS) \
+	-I top_srcdir@/libcheese \
+	$(NULL)
 
 bin_PROGRAMS = cheese
 
@@ -26,8 +28,6 @@ cheese_SOURCES = \
 	cheese-gconf.h \
 	cheese-thumb-view.c \
 	cheese-thumb-view.h \
-	cheese-webcam.c \
-	cheese-webcam.h \
 	cheese-window.c \
 	cheese-window.h \
 	eog-thumbnail.c \
@@ -52,11 +52,14 @@ cheese_SOURCES = \
 	cheese-prefs-dialog.h \
 	cheese-flash.h \
 	cheese-flash.c \
-	cheese-prefs-webcam-combo.c \
-	cheese-prefs-webcam-combo.h \
+	cheese-prefs-camera-combo.c \
+	cheese-prefs-camera-combo.h \
 	cheese-prefs-burst-spinbox.h \
 	cheese-prefs-burst-spinbox.c
-	
+
+cheese_LDFLAGS = \
+	-L top_srcdir@/libcheese -lcheese
+
 cheese_LDADD = \
 	$(CHEESE_LIBS)
 
diff --git a/src/cheese-effect-chooser.c b/src/cheese-effect-chooser.c
index 22e3b29..65a76a2 100644
--- a/src/cheese-effect-chooser.c
+++ b/src/cheese-effect-chooser.c
@@ -29,7 +29,7 @@
 #include <cairo.h>
 
 #include "cheese-effect-chooser.h"
-#include "cheese-webcam.h"
+#include <cheese-camera.h>
 
 #define BOARD_COLS  4
 #define BOARD_ROWS  3
@@ -50,36 +50,36 @@ typedef struct
 
 typedef struct
 {
-  CheeseWebcamEffect effect;
+  CheeseCameraEffect effect;
   char *name;
   char *filename;
   gboolean is_black;
 } GstEffect;
 
 static const GstEffect GST_EFFECT[] = {
-  {CHEESE_WEBCAM_EFFECT_NO_EFFECT,       N_("No Effect"),
+  {CHEESE_CAMERA_EFFECT_NO_EFFECT,       N_("No Effect"),
    PACKAGE_DATADIR "/effects/identity.png", FALSE},
-  {CHEESE_WEBCAM_EFFECT_MAUVE,           N_("Mauve"),
+  {CHEESE_CAMERA_EFFECT_MAUVE,           N_("Mauve"),
    PACKAGE_DATADIR "/effects/Mauve.png", FALSE},
-  {CHEESE_WEBCAM_EFFECT_NOIR_BLANC,      N_("Noir/Blanc"),
+  {CHEESE_CAMERA_EFFECT_NOIR_BLANC,      N_("Noir/Blanc"),
    PACKAGE_DATADIR "/effects/NoirBlanc.png", FALSE},
-  {CHEESE_WEBCAM_EFFECT_SATURATION,      N_("Saturation"),
+  {CHEESE_CAMERA_EFFECT_SATURATION,      N_("Saturation"),
    PACKAGE_DATADIR "/effects/Saturation.png", FALSE},
-  {CHEESE_WEBCAM_EFFECT_HULK,            N_("Hulk"),
+  {CHEESE_CAMERA_EFFECT_HULK,            N_("Hulk"),
    PACKAGE_DATADIR "/effects/Hulk.png", FALSE},
-  {CHEESE_WEBCAM_EFFECT_VERTICAL_FLIP,   N_("Vertical Flip"),
+  {CHEESE_CAMERA_EFFECT_VERTICAL_FLIP,   N_("Vertical Flip"),
    PACKAGE_DATADIR "/effects/videoflip_v.png", FALSE},
-  {CHEESE_WEBCAM_EFFECT_HORIZONTAL_FLIP, N_("Horizontal Flip"),
+  {CHEESE_CAMERA_EFFECT_HORIZONTAL_FLIP, N_("Horizontal Flip"),
    PACKAGE_DATADIR "/effects/videoflip_h.png", FALSE},
-  {CHEESE_WEBCAM_EFFECT_SHAGADELIC,      N_("Shagadelic"),
+  {CHEESE_CAMERA_EFFECT_SHAGADELIC,      N_("Shagadelic"),
    PACKAGE_DATADIR "/effects/shagadelictv.png", FALSE},
-  {CHEESE_WEBCAM_EFFECT_VERTIGO,         N_("Vertigo"),
+  {CHEESE_CAMERA_EFFECT_VERTIGO,         N_("Vertigo"),
    PACKAGE_DATADIR "/effects/vertigotv.png", FALSE},
-  {CHEESE_WEBCAM_EFFECT_EDGE,            N_("Edge"),
+  {CHEESE_CAMERA_EFFECT_EDGE,            N_("Edge"),
    PACKAGE_DATADIR "/effects/edgetv.png", TRUE},
-  {CHEESE_WEBCAM_EFFECT_DICE,            N_("Dice"),
+  {CHEESE_CAMERA_EFFECT_DICE,            N_("Dice"),
    PACKAGE_DATADIR "/effects/dicetv.png", FALSE},
-  {CHEESE_WEBCAM_EFFECT_WARP,            N_("Warp"),
+  {CHEESE_CAMERA_EFFECT_WARP,            N_("Warp"),
    PACKAGE_DATADIR "/effects/warptv.png", FALSE}
 };
 
@@ -253,13 +253,13 @@ cheese_effect_chooser_button_press_event_cb (GtkWidget *widget, GdkEventButton *
   return TRUE;
 }
 
-CheeseWebcamEffect
+CheeseCameraEffect
 cheese_effect_chooser_get_selection (CheeseEffectChooser *effect_chooser)
 {
   CheeseEffectChooserPrivate *priv = CHEESE_EFFECT_CHOOSER_GET_PRIVATE (effect_chooser);
 
   int                i;
-  CheeseWebcamEffect effect = 0;
+  CheeseCameraEffect effect = 0;
 
   for (i = 0; i < NUM_EFFECTS; i++)
   {
diff --git a/src/cheese-effect-chooser.h b/src/cheese-effect-chooser.h
index af39294..c529659 100644
--- a/src/cheese-effect-chooser.h
+++ b/src/cheese-effect-chooser.h
@@ -22,7 +22,7 @@
 #define __CHEESE_EFFECT_CHOOSER_H__
 
 #include <gtk/gtk.h>
-#include "cheese-webcam.h"
+#include <cheese-camera.h>
 
 G_BEGIN_DECLS
 
@@ -50,7 +50,7 @@ typedef struct
 GType      cheese_effect_chooser_get_type (void);
 GtkWidget *cheese_effect_chooser_new (char *selected_effects);
 
-CheeseWebcamEffect cheese_effect_chooser_get_selection (CheeseEffectChooser *effect_chooser);
+CheeseCameraEffect cheese_effect_chooser_get_selection (CheeseEffectChooser *effect_chooser);
 char *             cheese_effect_chooser_get_selection_string (CheeseEffectChooser *effect_chooser);
 void               cheese_effect_chooser_unselect_all (CheeseEffectChooser *effect_chooser);
 
diff --git a/src/cheese-flash.c b/src/cheese-flash.c
index be55ae9..ef24f29 100644
--- a/src/cheese-flash.c
+++ b/src/cheese-flash.c
@@ -24,7 +24,7 @@
 #include <gtk/gtk.h>
 
 #include "cheese-flash.h"
-#include "cheese-webcam.h"
+#include <cheese-camera.h>
 
 /* How long to hold the flash for */
 #define FLASH_DURATION 250
diff --git a/src/cheese-prefs-balance-scale.c b/src/cheese-prefs-balance-scale.c
index cb0e159..80952a3 100644
--- a/src/cheese-prefs-balance-scale.c
+++ b/src/cheese-prefs-balance-scale.c
@@ -20,7 +20,8 @@
 #include <string.h>
 #include <glib.h>
 
-#include "cheese-webcam.h"
+#include <cheese-camera.h>
+
 #include "cheese-prefs-widget.h"
 #include "cheese-prefs-balance-scale.h"
 
@@ -31,16 +32,16 @@ enum
   PROP_0,
   PROP_PROPERTY_NAME,
   PROP_GCONF_KEY,
-  PROP_WEBCAM
+  PROP_CAMERA
 };
 
 typedef struct CheesePrefsBalanceScalePrivate
 {
-  CheeseWebcam *webcam;
+  CheeseCamera *camera;
   gchar *property_name;
   gchar *gconf_key;
   gboolean has_been_synchronized;  /* Make sure we don't synchronize if client
-                                    * sets webcam on construction. */
+                                    * sets camera on construction. */
 } CheesePrefsBalanceScalePrivate;
 
 #define CHEESE_PREFS_BALANCE_SCALE_GET_PRIVATE(o)                     \
@@ -77,7 +78,7 @@ cheese_prefs_balance_scale_value_changed (GtkRange *scale, CheesePrefsBalanceSca
   CheesePrefsBalanceScalePrivate *priv  = CHEESE_PREFS_BALANCE_SCALE_GET_PRIVATE (self);
   gdouble                         value = gtk_range_get_value (scale);
 
-  cheese_webcam_set_balance_property (priv->webcam, priv->property_name, value);
+  cheese_camera_set_balance_property (priv->camera, priv->property_name, value);
 
   g_object_set (CHEESE_PREFS_WIDGET (self)->gconf, priv->gconf_key, value, NULL);
 
@@ -97,7 +98,7 @@ cheese_prefs_balance_scale_synchronize (CheesePrefsWidget *prefs_widget)
 
   g_object_get (prefs_widget, "widget", &scale, NULL);
 
-  cheese_webcam_get_balance_property_range (priv->webcam,
+  cheese_camera_get_balance_property_range (priv->camera,
                                             priv->property_name, &min, &max, &def);
 
   adj = GTK_ADJUSTMENT (gtk_adjustment_new (def, min, max, (max - min) / STEPS, 0.0, 0.0));
@@ -132,8 +133,8 @@ cheese_prefs_balance_scale_set_property (GObject *object, guint prop_id,
     case PROP_GCONF_KEY:
       priv->gconf_key = g_value_dup_string (value);
       break;
-    case PROP_WEBCAM:
-      priv->webcam = CHEESE_WEBCAM (g_value_get_object (value));
+    case PROP_CAMERA:
+      priv->camera = CHEESE_CAMERA (g_value_get_object (value));
       if (priv->has_been_synchronized)
         cheese_prefs_balance_scale_synchronize (CHEESE_PREFS_WIDGET (object));
       break;
@@ -159,8 +160,8 @@ cheese_prefs_balance_scale_get_property (GObject *object, guint prop_id,
     case PROP_GCONF_KEY:
       g_value_set_string (value, priv->gconf_key);
       break;
-    case PROP_WEBCAM:
-      g_value_set_object (value, priv->webcam);
+    case PROP_CAMERA:
+      g_value_set_object (value, priv->camera);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -198,17 +199,17 @@ cheese_prefs_balance_scale_class_init (CheesePrefsBalanceScaleClass *klass)
                                                         G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
 
   g_object_class_install_property (object_class,
-                                   PROP_WEBCAM,
-                                   g_param_spec_object ("webcam",
-                                                        "webcam",
-                                                        "Webcam object",
-                                                        CHEESE_TYPE_WEBCAM,
+                                   PROP_CAMERA,
+                                   g_param_spec_object ("camera",
+                                                        "camera",
+                                                        "Camera object",
+                                                        CHEESE_TYPE_CAMERA,
                                                         G_PARAM_READWRITE));
 }
 
 CheesePrefsBalanceScale *
 cheese_prefs_balance_scale_new (GtkWidget    *scale,
-                                CheeseWebcam *webcam,
+                                CheeseCamera *camera,
                                 const gchar  *property,
                                 const gchar  *gconf_key)
 {
@@ -217,7 +218,7 @@ cheese_prefs_balance_scale_new (GtkWidget    *scale,
 
   self = g_object_new (CHEESE_TYPE_PREFS_BALANCE_SCALE,
                        "widget", scale,
-                       "webcam", webcam,
+                       "camera", camera,
                        "property_name", property,
                        "gconf_key", gconf_key,
                        NULL);
diff --git a/src/cheese-prefs-balance-scale.h b/src/cheese-prefs-balance-scale.h
index 21c261c..a33432c 100644
--- a/src/cheese-prefs-balance-scale.h
+++ b/src/cheese-prefs-balance-scale.h
@@ -22,7 +22,7 @@
 
 #include <glib-object.h>
 #include "cheese-prefs-widget.h"
-#include "cheese-webcam.h"
+#include <cheese-camera.h>
 
 G_BEGIN_DECLS
 
@@ -51,7 +51,7 @@ struct _CheesePrefsBalanceScale
 
 GType                    cheese_prefs_balance_scale_get_type (void) G_GNUC_CONST;
 CheesePrefsBalanceScale *cheese_prefs_balance_scale_new (GtkWidget    *scale,
-                                                         CheeseWebcam *webcam,
+                                                         CheeseCamera *camera,
                                                          const gchar  *property,
                                                          const gchar  *balance_key);
 
diff --git a/src/cheese-prefs-burst-spinbox.h b/src/cheese-prefs-burst-spinbox.h
index 27391a8..b4065d3 100644
--- a/src/cheese-prefs-burst-spinbox.h
+++ b/src/cheese-prefs-burst-spinbox.h
@@ -22,7 +22,7 @@
 
 #include <glib-object.h>
 #include "cheese-prefs-widget.h"
-#include "cheese-webcam.h"
+#include <cheese-camera.h>
 
 G_BEGIN_DECLS
 
diff --git a/src/cheese-prefs-webcam-combo.c b/src/cheese-prefs-camera-combo.c
similarity index 58%
rename from src/cheese-prefs-webcam-combo.c
rename to src/cheese-prefs-camera-combo.c
index fe8f39f..c14122e 100644
--- a/src/cheese-prefs-webcam-combo.c
+++ b/src/cheese-prefs-camera-combo.c
@@ -22,9 +22,9 @@
 #include <string.h>
 #include <glib.h>
 
-#include "cheese-webcam.h"
+#include <cheese-camera.h>
 #include "cheese-prefs-widget.h"
-#include "cheese-prefs-webcam-combo.h"
+#include "cheese-prefs-camera-combo.h"
 
 enum
 {
@@ -36,77 +36,77 @@ enum
 enum
 {
   PROP_0,
-  PROP_WEBCAM_DEVICE_KEY,
-  PROP_WEBCAM
+  PROP_CAMERA_DEVICE_KEY,
+  PROP_CAMERA
 };
 
-typedef struct CheesePrefsWebcamComboPrivate
+typedef struct CheesePrefsCameraComboPrivate
 {
-  gchar *webcam_device_key;
+  gchar *camera_device_key;
   GtkListStore *list_store;
-  CheeseWebcam *webcam;
+  CheeseCamera *camera;
   gboolean has_been_synchronized;  /* Make sure we don't synchronize if client
-                                    * sets webcam on construction. */
-} CheesePrefsWebcamComboPrivate;
+                                    * sets camera on construction. */
+} CheesePrefsCameraComboPrivate;
 
-#define CHEESE_PREFS_WEBCAM_COMBO_GET_PRIVATE(o)                     \
-  (G_TYPE_INSTANCE_GET_PRIVATE ((o), CHEESE_TYPE_PREFS_WEBCAM_COMBO, \
-                                CheesePrefsWebcamComboPrivate))
+#define CHEESE_PREFS_CAMERA_COMBO_GET_PRIVATE(o)                     \
+  (G_TYPE_INSTANCE_GET_PRIVATE ((o), CHEESE_TYPE_PREFS_CAMERA_COMBO, \
+                                CheesePrefsCameraComboPrivate))
 
-G_DEFINE_TYPE (CheesePrefsWebcamCombo, cheese_prefs_webcam_combo, CHEESE_TYPE_PREFS_WIDGET);
+G_DEFINE_TYPE (CheesePrefsCameraCombo, cheese_prefs_camera_combo, CHEESE_TYPE_PREFS_WIDGET);
 
 static void
-cheese_prefs_webcam_combo_init (CheesePrefsWebcamCombo *self)
+cheese_prefs_camera_combo_init (CheesePrefsCameraCombo *self)
 {
-  CheesePrefsWebcamComboPrivate *priv = CHEESE_PREFS_WEBCAM_COMBO_GET_PRIVATE (self);
+  CheesePrefsCameraComboPrivate *priv = CHEESE_PREFS_CAMERA_COMBO_GET_PRIVATE (self);
 
   priv->has_been_synchronized = FALSE;
-  priv->webcam                = NULL;
-  priv->webcam_device_key     = NULL;
+  priv->camera                = NULL;
+  priv->camera_device_key     = NULL;
   priv->list_store            = gtk_list_store_new (NUM_COLS, G_TYPE_STRING, G_TYPE_STRING);
 }
 
 static void
-cheese_prefs_webcam_combo_finalize (GObject *object)
+cheese_prefs_camera_combo_finalize (GObject *object)
 {
-  CheesePrefsWebcamCombo        *self = CHEESE_PREFS_WEBCAM_COMBO (object);
-  CheesePrefsWebcamComboPrivate *priv = CHEESE_PREFS_WEBCAM_COMBO_GET_PRIVATE (self);
+  CheesePrefsCameraCombo        *self = CHEESE_PREFS_CAMERA_COMBO (object);
+  CheesePrefsCameraComboPrivate *priv = CHEESE_PREFS_CAMERA_COMBO_GET_PRIVATE (self);
 
-  g_free (priv->webcam_device_key);
+  g_free (priv->camera_device_key);
   g_object_unref (priv->list_store);
 
-  G_OBJECT_CLASS (cheese_prefs_webcam_combo_parent_class)->finalize (object);
+  G_OBJECT_CLASS (cheese_prefs_camera_combo_parent_class)->finalize (object);
 }
 
 static void
-cheese_prefs_webcam_combo_selection_changed (GtkComboBox *combo_box, CheesePrefsWebcamCombo *self)
+cheese_prefs_camera_combo_selection_changed (GtkComboBox *combo_box, CheesePrefsCameraCombo *self)
 {
-  CheesePrefsWebcamComboPrivate *priv = CHEESE_PREFS_WEBCAM_COMBO_GET_PRIVATE (self);
+  CheesePrefsCameraComboPrivate *priv = CHEESE_PREFS_CAMERA_COMBO_GET_PRIVATE (self);
 
   /* Put it into gconf */
-  char *new_device = cheese_prefs_webcam_combo_get_selected_webcam (self);
+  char *new_device = cheese_prefs_camera_combo_get_selected_camera (self);
 
-  g_object_set (CHEESE_PREFS_WIDGET (self)->gconf, priv->webcam_device_key, new_device, NULL);
+  g_object_set (CHEESE_PREFS_WIDGET (self)->gconf, priv->camera_device_key, new_device, NULL);
   g_free (new_device);
 
   cheese_prefs_widget_notify_changed (CHEESE_PREFS_WIDGET (self));
 }
 
 static void
-cheese_prefs_webcam_combo_synchronize (CheesePrefsWidget *prefs_widget)
+cheese_prefs_camera_combo_synchronize (CheesePrefsWidget *prefs_widget)
 {
-  CheesePrefsWebcamCombo        *self = CHEESE_PREFS_WEBCAM_COMBO (prefs_widget);
-  CheesePrefsWebcamComboPrivate *priv = CHEESE_PREFS_WEBCAM_COMBO_GET_PRIVATE (self);
+  CheesePrefsCameraCombo        *self = CHEESE_PREFS_CAMERA_COMBO (prefs_widget);
+  CheesePrefsCameraComboPrivate *priv = CHEESE_PREFS_CAMERA_COMBO_GET_PRIVATE (self);
 
   GtkWidget          *combo_box;
-  GArray             *webcam_devices;
+  GArray             *camera_devices;
   int                 selected_device_ind;
   int                 num_devices;
-  CheeseWebcamDevice *selected_device;
+  CheeseCameraDevice *selected_device;
   char               *gconf_device_name;
   char               *product_name;
   char               *device_name;
-  CheeseWebcamDevice *device_ptr;
+  CheeseCameraDevice *device_ptr;
   GtkTreeIter         iter;
   GtkTreeIter         active_iter;
   int                 i;
@@ -116,27 +116,27 @@ cheese_prefs_webcam_combo_synchronize (CheesePrefsWidget *prefs_widget)
   g_object_get (prefs_widget, "widget", &combo_box, NULL);
 
   /* Disconnect to prevent a whole bunch of changed notifications */
-  g_signal_handlers_disconnect_by_func (combo_box, cheese_prefs_webcam_combo_selection_changed, prefs_widget);
+  g_signal_handlers_disconnect_by_func (combo_box, cheese_prefs_camera_combo_selection_changed, prefs_widget);
 
   g_object_ref (priv->list_store);
 
   gtk_combo_box_set_model (GTK_COMBO_BOX (combo_box), NULL);
 
-  webcam_devices      = cheese_webcam_get_webcam_devices (priv->webcam);
-  selected_device_ind = cheese_webcam_get_selected_device_index (priv->webcam);
-  num_devices         = cheese_webcam_get_num_webcam_devices (priv->webcam);
+  camera_devices      = cheese_camera_get_camera_devices (priv->camera);
+  selected_device_ind = cheese_camera_get_selected_device_index (priv->camera);
+  num_devices         = cheese_camera_get_num_camera_devices (priv->camera);
 
-  selected_device = &g_array_index (webcam_devices, CheeseWebcamDevice, selected_device_ind);
+  selected_device = &g_array_index (camera_devices, CheeseCameraDevice, selected_device_ind);
 
   /* If the selected device is not the same device as the one in gconf, the
    * selected device isn't available or was set by --hal-device. Set it now.
    * Not sure if this is desired behavior */
   if (num_devices > 0)
   {
-    g_object_get (prefs_widget->gconf, priv->webcam_device_key, &gconf_device_name, NULL);
+    g_object_get (prefs_widget->gconf, priv->camera_device_key, &gconf_device_name, NULL);
     if (!gconf_device_name || strcmp (selected_device->video_device, gconf_device_name) != 0)
     {
-      g_object_set (prefs_widget->gconf, priv->webcam_device_key, selected_device->video_device, NULL);
+      g_object_set (prefs_widget->gconf, priv->camera_device_key, selected_device->video_device, NULL);
     }
     g_free (gconf_device_name);
   }
@@ -144,7 +144,7 @@ cheese_prefs_webcam_combo_synchronize (CheesePrefsWidget *prefs_widget)
 
   for (i = 0; i < num_devices; i++)
   {
-    device_ptr   = &g_array_index (webcam_devices, CheeseWebcamDevice, i);
+    device_ptr   = &g_array_index (camera_devices, CheeseCameraDevice, i);
     product_name = g_strdup_printf ("%s (%s)", device_ptr->product_name, device_ptr->video_device);
     device_name  = g_strdup (device_ptr->video_device);
 
@@ -172,32 +172,32 @@ cheese_prefs_webcam_combo_synchronize (CheesePrefsWidget *prefs_widget)
     gtk_combo_box_set_active (GTK_COMBO_BOX (combo_box), 0);
 
   g_signal_connect (G_OBJECT (combo_box), "changed",
-                    G_CALLBACK (cheese_prefs_webcam_combo_selection_changed),
+                    G_CALLBACK (cheese_prefs_camera_combo_selection_changed),
                     self);
 
-  /* Set sensitive or not depending on whether or not there are webcam devices
+  /* Set sensitive or not depending on whether or not there are camera devices
    * available */
   gtk_widget_set_sensitive (combo_box, num_devices > 1);
 
-  g_array_free (webcam_devices, TRUE);
+  g_array_free (camera_devices, TRUE);
 }
 
 static void
-cheese_prefs_webcam_combo_set_property (GObject *object, guint prop_id,
+cheese_prefs_camera_combo_set_property (GObject *object, guint prop_id,
                                         const GValue *value,
                                         GParamSpec *pspec)
 {
-  CheesePrefsWebcamComboPrivate *priv = CHEESE_PREFS_WEBCAM_COMBO_GET_PRIVATE (object);
+  CheesePrefsCameraComboPrivate *priv = CHEESE_PREFS_CAMERA_COMBO_GET_PRIVATE (object);
 
   switch (prop_id)
   {
-    case PROP_WEBCAM_DEVICE_KEY:
-      priv->webcam_device_key = g_value_dup_string (value);
+    case PROP_CAMERA_DEVICE_KEY:
+      priv->camera_device_key = g_value_dup_string (value);
       break;
-    case PROP_WEBCAM:
-      priv->webcam = CHEESE_WEBCAM (g_value_get_object (value));
+    case PROP_CAMERA:
+      priv->camera = CHEESE_CAMERA (g_value_get_object (value));
       if (priv->has_been_synchronized)
-        cheese_prefs_webcam_combo_synchronize (CHEESE_PREFS_WIDGET (object));
+        cheese_prefs_camera_combo_synchronize (CHEESE_PREFS_WIDGET (object));
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -206,20 +206,20 @@ cheese_prefs_webcam_combo_set_property (GObject *object, guint prop_id,
 }
 
 static void
-cheese_prefs_webcam_combo_get_property (GObject *object, guint prop_id,
+cheese_prefs_camera_combo_get_property (GObject *object, guint prop_id,
                                         GValue *value, GParamSpec *pspec)
 {
-  CheesePrefsWebcamComboPrivate *priv = CHEESE_PREFS_WEBCAM_COMBO_GET_PRIVATE (object);
+  CheesePrefsCameraComboPrivate *priv = CHEESE_PREFS_CAMERA_COMBO_GET_PRIVATE (object);
 
-  g_return_if_fail (CHEESE_IS_PREFS_WEBCAM_COMBO (object));
+  g_return_if_fail (CHEESE_IS_PREFS_CAMERA_COMBO (object));
 
   switch (prop_id)
   {
-    case PROP_WEBCAM_DEVICE_KEY:
-      g_value_set_string (value, priv->webcam_device_key);
+    case PROP_CAMERA_DEVICE_KEY:
+      g_value_set_string (value, priv->camera_device_key);
       break;
-    case PROP_WEBCAM:
-      g_value_set_object (value, priv->webcam);
+    case PROP_CAMERA:
+      g_value_set_object (value, priv->camera);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -228,50 +228,50 @@ cheese_prefs_webcam_combo_get_property (GObject *object, guint prop_id,
 }
 
 static void
-cheese_prefs_webcam_combo_class_init (CheesePrefsWebcamComboClass *klass)
+cheese_prefs_camera_combo_class_init (CheesePrefsCameraComboClass *klass)
 {
   GObjectClass           *object_class = G_OBJECT_CLASS (klass);
   CheesePrefsWidgetClass *parent_class = CHEESE_PREFS_WIDGET_CLASS (klass);
 
-  g_type_class_add_private (klass, sizeof (CheesePrefsWebcamComboPrivate));
+  g_type_class_add_private (klass, sizeof (CheesePrefsCameraComboPrivate));
 
-  object_class->finalize     = cheese_prefs_webcam_combo_finalize;
-  object_class->set_property = cheese_prefs_webcam_combo_set_property;
-  object_class->get_property = cheese_prefs_webcam_combo_get_property;
-  parent_class->synchronize  = cheese_prefs_webcam_combo_synchronize;
+  object_class->finalize     = cheese_prefs_camera_combo_finalize;
+  object_class->set_property = cheese_prefs_camera_combo_set_property;
+  object_class->get_property = cheese_prefs_camera_combo_get_property;
+  parent_class->synchronize  = cheese_prefs_camera_combo_synchronize;
 
   g_object_class_install_property (object_class,
-                                   PROP_WEBCAM_DEVICE_KEY,
-                                   g_param_spec_string ("webcam_device_key",
+                                   PROP_CAMERA_DEVICE_KEY,
+                                   g_param_spec_string ("camera_device_key",
                                                         "",
-                                                        "Webcam device gconf key",
+                                                        "Camera device gconf key",
                                                         "",
                                                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
   g_object_class_install_property (object_class,
-                                   PROP_WEBCAM,
-                                   g_param_spec_object ("webcam",
+                                   PROP_CAMERA,
+                                   g_param_spec_object ("camera",
                                                         "",
-                                                        "Webcam object",
-                                                        CHEESE_TYPE_WEBCAM,
+                                                        "Camera object",
+                                                        CHEESE_TYPE_CAMERA,
                                                         G_PARAM_READWRITE));
 }
 
-CheesePrefsWebcamCombo *
-cheese_prefs_webcam_combo_new (GtkWidget *combo_box, CheeseWebcam *webcam,
-                               const gchar *webcam_device_key)
+CheesePrefsCameraCombo *
+cheese_prefs_camera_combo_new (GtkWidget *combo_box, CheeseCamera *camera,
+                               const gchar *camera_device_key)
 {
-  CheesePrefsWebcamCombo        *self;
+  CheesePrefsCameraCombo        *self;
   GtkCellRenderer               *renderer;
-  CheesePrefsWebcamComboPrivate *priv;
+  CheesePrefsCameraComboPrivate *priv;
 
-  self = g_object_new (CHEESE_TYPE_PREFS_WEBCAM_COMBO,
+  self = g_object_new (CHEESE_TYPE_PREFS_CAMERA_COMBO,
                        "widget", combo_box,
-                       "webcam", webcam,
-                       "webcam_device_key", webcam_device_key,
+                       "camera", camera,
+                       "camera_device_key", camera_device_key,
                        NULL);
 
-  priv = CHEESE_PREFS_WEBCAM_COMBO_GET_PRIVATE (self);
+  priv = CHEESE_PREFS_CAMERA_COMBO_GET_PRIVATE (self);
 
   renderer = gtk_cell_renderer_text_new ();
   gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, FALSE);
@@ -284,15 +284,15 @@ cheese_prefs_webcam_combo_new (GtkWidget *combo_box, CheeseWebcam *webcam,
 }
 
 char *
-cheese_prefs_webcam_combo_get_selected_webcam (CheesePrefsWebcamCombo *webcam)
+cheese_prefs_camera_combo_get_selected_camera (CheesePrefsCameraCombo *camera)
 {
-  CheesePrefsWebcamComboPrivate *priv = CHEESE_PREFS_WEBCAM_COMBO_GET_PRIVATE (webcam);
+  CheesePrefsCameraComboPrivate *priv = CHEESE_PREFS_CAMERA_COMBO_GET_PRIVATE (camera);
 
   GtkTreeIter active_iter;
   GtkWidget  *combo_box;
   char       *device;
 
-  g_object_get (webcam, "widget", &combo_box, NULL);
+  g_object_get (camera, "widget", &combo_box, NULL);
 
   gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo_box), &active_iter);
   gtk_tree_model_get (GTK_TREE_MODEL (priv->list_store), &active_iter, DEVICE_NAME, &device, -1);
diff --git a/src/cheese-prefs-camera-combo.h b/src/cheese-prefs-camera-combo.h
new file mode 100644
index 0000000..e26418a
--- /dev/null
+++ b/src/cheese-prefs-camera-combo.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright © 2008 James Liggett <jrliggett cox net>
+ * Copyright © 2008 Ryan Zeigler <zeiglerr gmail com>
+ *
+ * Licensed under the GNU General Public License Version 2
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _CHEESE_PREFS_CAMERA_COMBO_H_
+#define _CHEESE_PREFS_CAMERA_COMBO_H_
+
+#include <glib-object.h>
+#include "cheese-prefs-widget.h"
+#include <cheese-camera.h>
+
+G_BEGIN_DECLS
+
+#define CHEESE_TYPE_PREFS_CAMERA_COMBO (cheese_prefs_camera_combo_get_type ())
+#define CHEESE_PREFS_CAMERA_COMBO(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), CHEESE_TYPE_PREFS_CAMERA_COMBO, \
+                                                                               CheesePrefsCameraCombo))
+#define CHEESE_PREFS_CAMERA_COMBO_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CHEESE_TYPE_PREFS_CAMERA_COMBO, \
+                                                                            CheesePrefsCameraComboClass))
+#define CHEESE_IS_PREFS_CAMERA_COMBO(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CHEESE_TYPE_PREFS_CAMERA_COMBO))
+#define CHEESE_IS_PREFS_CAMERA_COMBO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CHEESE_TYPE_PREFS_CAMERA_COMBO))
+#define CHEESE_PREFS_CAMERA_COMBO_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), CHEESE_TYPE_PREFS_CAMERA_COMBO, \
+                                                                              CheesePrefsCameraComboClass))
+
+typedef struct _CheesePrefsCameraComboClass CheesePrefsCameraComboClass;
+typedef struct _CheesePrefsCameraCombo CheesePrefsCameraCombo;
+
+struct _CheesePrefsCameraComboClass
+{
+  CheesePrefsWidgetClass parent_class;
+};
+
+struct _CheesePrefsCameraCombo
+{
+  CheesePrefsWidget parent_instance;
+};
+
+GType                   cheese_prefs_camera_combo_get_type (void) G_GNUC_CONST;
+CheesePrefsCameraCombo *cheese_prefs_camera_combo_new (GtkWidget    *combo_box,
+                                                       CheeseCamera *camera,
+                                                       const gchar  *camera_device_key);
+
+char *cheese_prefs_camera_combo_get_selected_camera (CheesePrefsCameraCombo *camera);
+
+#endif /* _CHEESE_PREFS_CAMERA_COMBO_H_ */
diff --git a/src/cheese-prefs-dialog.c b/src/cheese-prefs-dialog.c
index bea44a3..d2c6ce2 100644
--- a/src/cheese-prefs-dialog.c
+++ b/src/cheese-prefs-dialog.c
@@ -24,7 +24,7 @@ typedef struct
 {
   GtkWidget *cheese_prefs_dialog;
   GtkWidget *resolution_combo_box;
-  GtkWidget *webcam_combo_box;
+  GtkWidget *camera_combo_box;
   GtkWidget *brightness_scale;
   GtkWidget *contrast_scale;
   GtkWidget *saturation_scale;
@@ -33,7 +33,7 @@ typedef struct
   GtkWidget *burst_delay;
 
   GtkWidget *parent;
-  CheeseWebcam *webcam;
+  CheeseCamera *camera;
 
   CheesePrefsDialogWidgets *widgets;
 } CheesePrefsDialog;
@@ -58,8 +58,8 @@ cheese_prefs_dialog_create_dialog (CheesePrefsDialog *prefs_dialog)
                                                                           "cheese_prefs_dialog"));
   prefs_dialog->resolution_combo_box = GTK_WIDGET (gtk_builder_get_object (builder,
                                                                            "resolution_combo_box"));
-  prefs_dialog->webcam_combo_box = GTK_WIDGET (gtk_builder_get_object (builder,
-                                                                       "webcam_combo_box"));
+  prefs_dialog->camera_combo_box = GTK_WIDGET (gtk_builder_get_object (builder,
+                                                                       "camera_combo_box"));
   prefs_dialog->brightness_scale = GTK_WIDGET (gtk_builder_get_object (builder,
                                                                        "brightness_scale"));
   prefs_dialog->contrast_scale = GTK_WIDGET (gtk_builder_get_object (builder,
@@ -79,38 +79,38 @@ cheese_prefs_dialog_create_dialog (CheesePrefsDialog *prefs_dialog)
 static void
 cheese_prefs_dialog_on_resolution_changed (CheesePrefsWidget *widget, gpointer user_data)
 {
-  CheeseWebcam      *webcam;
+  CheeseCamera      *camera;
   CheeseVideoFormat *current_format;
   CheeseVideoFormat *new_format;
 
-  g_object_get (widget, "webcam", &webcam, NULL);
+  g_object_get (widget, "camera", &camera, NULL);
 
-  current_format = cheese_webcam_get_current_video_format (webcam);
+  current_format = cheese_camera_get_current_video_format (camera);
   new_format     = cheese_prefs_resolution_combo_get_selected_format (CHEESE_PREFS_RESOLUTION_COMBO (widget));
 
   if (new_format != current_format)
-    cheese_webcam_set_video_format (webcam, new_format);
+    cheese_camera_set_video_format (camera, new_format);
 }
 
 static void
 cheese_prefs_dialog_on_device_changed (CheesePrefsWidget *widget, CheesePrefsDialog *prefs_dialog)
 {
-  CheeseWebcam *webcam;
+  CheeseCamera *camera;
   char         *new_device_name;
   char         *old_device_name;
 
-  g_object_get (widget, "webcam", &webcam, NULL);
-  g_object_get (webcam, "device_name", &old_device_name, NULL);
+  g_object_get (widget, "camera", &camera, NULL);
+  g_object_get (camera, "device_name", &old_device_name, NULL);
 
-  new_device_name = cheese_prefs_webcam_combo_get_selected_webcam (CHEESE_PREFS_WEBCAM_COMBO (widget));
-  g_object_set (webcam, "device_name", new_device_name, NULL);
+  new_device_name = cheese_prefs_camera_combo_get_selected_camera (CHEESE_PREFS_CAMERA_COMBO (widget));
+  g_object_set (camera, "device_name", new_device_name, NULL);
   g_free (new_device_name);
-  if (!cheese_webcam_switch_webcam_device (webcam))
+  if (!cheese_camera_switch_camera_device (camera))
   {
-    g_warning ("Couldn't change webcam device.");
+    g_warning ("Couldn't change camera device.");
 
     /* Revert to default device */
-    g_object_set (webcam, "device_name", old_device_name, NULL);
+    g_object_set (camera, "device_name", old_device_name, NULL);
   }
   cheese_prefs_dialog_widgets_synchronize (prefs_dialog->widgets);
   g_free (old_device_name);
@@ -120,7 +120,7 @@ static void
 cheese_prefs_dialog_setup_widgets (CheesePrefsDialog *prefs_dialog)
 {
   CheesePrefsWidget *resolution_widget;
-  CheesePrefsWidget *webcam_widget;
+  CheesePrefsWidget *camera_widget;
   CheesePrefsWidget *brightness_widget;
   CheesePrefsWidget *contrast_widget;
   CheesePrefsWidget *saturation_widget;
@@ -129,7 +129,7 @@ cheese_prefs_dialog_setup_widgets (CheesePrefsDialog *prefs_dialog)
   CheesePrefsWidget *burst_repeat_widget;
 
   resolution_widget = CHEESE_PREFS_WIDGET (cheese_prefs_resolution_combo_new (prefs_dialog->resolution_combo_box,
-                                                                              prefs_dialog->webcam,
+                                                                              prefs_dialog->camera,
                                                                               "gconf_prop_x_resolution",
                                                                               "gconf_prop_y_resolution",
                                                                               0, 0));
@@ -138,35 +138,35 @@ cheese_prefs_dialog_setup_widgets (CheesePrefsDialog *prefs_dialog)
                     NULL);
   cheese_prefs_dialog_widgets_add (prefs_dialog->widgets, resolution_widget);
 
-  webcam_widget = CHEESE_PREFS_WIDGET (cheese_prefs_webcam_combo_new (prefs_dialog->webcam_combo_box,
-                                                                      prefs_dialog->webcam,
+  camera_widget = CHEESE_PREFS_WIDGET (cheese_prefs_camera_combo_new (prefs_dialog->camera_combo_box,
+                                                                      prefs_dialog->camera,
                                                                       "gconf_prop_webcam"));
 
-  g_signal_connect (G_OBJECT (webcam_widget), "changed",
+  g_signal_connect (G_OBJECT (camera_widget), "changed",
                     G_CALLBACK (cheese_prefs_dialog_on_device_changed),
                     prefs_dialog);
-  cheese_prefs_dialog_widgets_add (prefs_dialog->widgets, webcam_widget);
+  cheese_prefs_dialog_widgets_add (prefs_dialog->widgets, camera_widget);
 
   brightness_widget = CHEESE_PREFS_WIDGET (cheese_prefs_balance_scale_new (prefs_dialog->brightness_scale,
-                                                                           prefs_dialog->webcam, "brightness",
+                                                                           prefs_dialog->camera, "brightness",
                                                                            "gconf_prop_brightness"));
 
   cheese_prefs_dialog_widgets_add (prefs_dialog->widgets, brightness_widget);
 
   contrast_widget = CHEESE_PREFS_WIDGET (cheese_prefs_balance_scale_new (prefs_dialog->contrast_scale,
-                                                                         prefs_dialog->webcam, "contrast",
+                                                                         prefs_dialog->camera, "contrast",
                                                                          "gconf_prop_contrast"));
 
   cheese_prefs_dialog_widgets_add (prefs_dialog->widgets, contrast_widget);
 
   saturation_widget = CHEESE_PREFS_WIDGET (cheese_prefs_balance_scale_new (prefs_dialog->saturation_scale,
-                                                                           prefs_dialog->webcam, "saturation",
+                                                                           prefs_dialog->camera, "saturation",
                                                                            "gconf_prop_saturation"));
 
   cheese_prefs_dialog_widgets_add (prefs_dialog->widgets, saturation_widget);
 
   hue_widget = CHEESE_PREFS_WIDGET (cheese_prefs_balance_scale_new (prefs_dialog->hue_scale,
-                                                                    prefs_dialog->webcam, "hue",
+                                                                    prefs_dialog->camera, "hue",
                                                                     "gconf_prop_hue"));
 
   cheese_prefs_dialog_widgets_add (prefs_dialog->widgets, hue_widget);
@@ -196,14 +196,14 @@ cheese_prefs_dialog_destroy_dialog (CheesePrefsDialog *prefs_dialog)
 }
 
 void
-cheese_prefs_dialog_run (GtkWidget *parent, CheeseGConf *gconf, CheeseWebcam *webcam)
+cheese_prefs_dialog_run (GtkWidget *parent, CheeseGConf *gconf, CheeseCamera *camera)
 {
   CheesePrefsDialog *prefs_dialog;
 
   prefs_dialog = g_new0 (CheesePrefsDialog, 1);
 
   prefs_dialog->parent  = parent;
-  prefs_dialog->webcam  = webcam;
+  prefs_dialog->camera  = camera;
   prefs_dialog->widgets = cheese_prefs_dialog_widgets_new (gconf);
 
   cheese_prefs_dialog_create_dialog (prefs_dialog);
diff --git a/src/cheese-prefs-dialog.h b/src/cheese-prefs-dialog.h
index 569f7f8..ed768a1 100644
--- a/src/cheese-prefs-dialog.h
+++ b/src/cheese-prefs-dialog.h
@@ -24,13 +24,13 @@
   #include "cheese-config.h"
 #endif
 
-#include "cheese-webcam.h"
+#include <cheese-camera.h>
 #include "cheese-prefs-dialog-widgets.h"
 #include "cheese-prefs-resolution-combo.h"
-#include "cheese-prefs-webcam-combo.h"
+#include "cheese-prefs-camera-combo.h"
 #include "cheese-prefs-balance-scale.h"
 #include "cheese-prefs-burst-spinbox.h"
 
-void cheese_prefs_dialog_run (GtkWidget *parent, CheeseGConf *gconf, CheeseWebcam *webcam);
+void cheese_prefs_dialog_run (GtkWidget *parent, CheeseGConf *gconf, CheeseCamera *camera);
 
 #endif /* _CHEESE_PREFS_DIALOG_H_ */
diff --git a/src/cheese-prefs-resolution-combo.c b/src/cheese-prefs-resolution-combo.c
index 0399c41..1cbe68a 100644
--- a/src/cheese-prefs-resolution-combo.c
+++ b/src/cheese-prefs-resolution-combo.c
@@ -26,10 +26,10 @@ typedef struct
   unsigned int max_x_resolution;
   unsigned int max_y_resolution;
   GtkListStore *list_store;
-  CheeseWebcam *webcam;
+  CheeseCamera *camera;
   CheeseVideoFormat *selected_format;
   gboolean has_been_synchronized;  /* Make sure we don't synchronize if client
-                                    * sets webcam on construction. */
+                                    * sets camera on construction. */
 } CheesePrefsResolutionComboPrivate;
 
 #define CHEESE_PREFS_RESOLUTION_COMBO_GET_PRIVATE(o)                     \
@@ -44,7 +44,7 @@ enum
   PROP_Y_RESOLUTION_KEY,
   PROP_MAX_X_RESOLUTION,
   PROP_MAX_Y_RESOLUTION,
-  PROP_WEBCAM
+  PROP_CAMERA
 };
 
 enum
@@ -66,7 +66,7 @@ cheese_prefs_resolution_combo_init (CheesePrefsResolutionCombo *self)
   priv->max_x_resolution      = G_MAXUINT;
   priv->max_y_resolution      = G_MAXUINT;
   priv->list_store            = gtk_list_store_new (NUM_COLS, G_TYPE_STRING, G_TYPE_POINTER);
-  priv->webcam                = NULL;
+  priv->camera                = NULL;
   priv->selected_format       = NULL;
   priv->has_been_synchronized = FALSE;
 }
@@ -133,10 +133,10 @@ cheese_prefs_resolution_combo_synchronize (CheesePrefsWidget *prefs_widget)
   gtk_combo_box_set_model (GTK_COMBO_BOX (combo_box), NULL);
 
   gtk_combo_box_set_model (GTK_COMBO_BOX (combo_box), NULL);
-  current_format = cheese_webcam_get_current_video_format (priv->webcam);
+  current_format = cheese_camera_get_current_video_format (priv->camera);
 
   gtk_list_store_clear (priv->list_store);
-  formats = cheese_webcam_get_video_formats (priv->webcam);
+  formats = cheese_camera_get_video_formats (priv->camera);
 
   for (i = 0; i < formats->len; i++)
   {
@@ -202,10 +202,10 @@ cheese_prefs_resolution_combo_set_property (GObject *object, guint prop_id,
     case PROP_MAX_Y_RESOLUTION:
       priv->max_y_resolution = g_value_get_uint (value);
       break;
-    case PROP_WEBCAM:
-      priv->webcam = CHEESE_WEBCAM (g_value_get_object (value));
+    case PROP_CAMERA:
+      priv->camera = CHEESE_CAMERA (g_value_get_object (value));
 
-      /* If the webcam changes the resolutions change too. But only change the
+      /* If the camera changes the resolutions change too. But only change the
        * data if we've been synchronized once already. If this property is set
        * on construction, we would synchronize twice--once when the property is
        * set, and again when the dialog syncs when it's created. */
@@ -241,8 +241,8 @@ cheese_prefs_resolution_combo_get_property (GObject *object, guint prop_id,
     case PROP_MAX_Y_RESOLUTION:
       g_value_set_uint (value, priv->max_y_resolution);
       break;
-    case PROP_WEBCAM:
-      g_value_set_object (value, priv->webcam);
+    case PROP_CAMERA:
+      g_value_set_object (value, priv->camera);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -300,16 +300,16 @@ cheese_prefs_resolution_combo_class_init (CheesePrefsResolutionComboClass *klass
                                                       G_PARAM_READABLE | G_PARAM_WRITABLE));
 
   g_object_class_install_property (object_class,
-                                   PROP_WEBCAM,
-                                   g_param_spec_object ("webcam",
+                                   PROP_CAMERA,
+                                   g_param_spec_object ("camera",
                                                         "",
-                                                        "Webcam object",
-                                                        CHEESE_TYPE_WEBCAM,
+                                                        "Camera object",
+                                                        CHEESE_TYPE_CAMERA,
                                                         G_PARAM_READABLE | G_PARAM_WRITABLE));
 }
 
 CheesePrefsResolutionCombo *
-cheese_prefs_resolution_combo_new (GtkWidget *combo_box, CheeseWebcam *webcam,
+cheese_prefs_resolution_combo_new (GtkWidget *combo_box, CheeseCamera *camera,
                                    const gchar *x_resolution_key,
                                    const gchar *y_resolution_key,
                                    unsigned int max_x_resolution,
@@ -321,7 +321,7 @@ cheese_prefs_resolution_combo_new (GtkWidget *combo_box, CheeseWebcam *webcam,
 
   self = g_object_new (CHEESE_TYPE_PREFS_RESOLUTION_COMBO,
                        "widget", combo_box,
-                       "webcam", webcam,
+                       "camera", camera,
                        "x_resolution_key", x_resolution_key,
                        "y_resolution_key", y_resolution_key,
                        NULL);
diff --git a/src/cheese-prefs-resolution-combo.h b/src/cheese-prefs-resolution-combo.h
index c610b96..9fd11c0 100644
--- a/src/cheese-prefs-resolution-combo.h
+++ b/src/cheese-prefs-resolution-combo.h
@@ -21,8 +21,8 @@
 #define _CHEESE_PREFS_RESOLUTION_COMBO_H_
 
 #include <glib-object.h>
+#include <cheese-camera.h>
 #include "cheese-prefs-widget.h"
-#include "cheese-webcam.h"
 
 G_BEGIN_DECLS
 
@@ -56,7 +56,7 @@ struct _CheesePrefsResolutionCombo
 
 GType                       cheese_prefs_resolution_combo_get_type (void) G_GNUC_CONST;
 CheesePrefsResolutionCombo *cheese_prefs_resolution_combo_new (GtkWidget    *combo_box,
-                                                               CheeseWebcam *webcam,
+                                                               CheeseCamera *camera,
                                                                const gchar  *x_resolution_key,
                                                                const gchar  *y_resolution_key,
                                                                unsigned int  max_x_resolution,
diff --git a/src/cheese-window.c b/src/cheese-window.c
index 88b0d24..8161823 100644
--- a/src/cheese-window.c
+++ b/src/cheese-window.c
@@ -65,10 +65,10 @@
 
 typedef enum
 {
-  WEBCAM_MODE_PHOTO,
-  WEBCAM_MODE_VIDEO,
-  WEBCAM_MODE_BURST
-} WebcamMode;
+  CAMERA_MODE_PHOTO,
+  CAMERA_MODE_VIDEO,
+  CAMERA_MODE_BURST
+} CameraMode;
 
 typedef enum
 {
@@ -91,8 +91,8 @@ typedef struct
   char *startup_hal_dev_udi;
   char *video_filename;
 
-  CheeseWebcam *webcam;
-  WebcamMode webcam_mode;
+  CheeseCamera *camera;
+  CameraMode camera_mode;
   CheeseGConf *gconf;
   CheeseFileUtil *fileutil;
 
@@ -465,7 +465,7 @@ cheese_window_fullscreen_leave_notify_cb (GtkWidget        *widget,
 }
 
 static void
-cheese_window_photo_saved_cb (CheeseWebcam *webcam, CheeseWindow *cheese_window)
+cheese_window_photo_saved_cb (CheeseCamera *camera, CheeseWindow *cheese_window)
 {
   gdk_threads_enter ();
   if (!cheese_window->is_bursting)
@@ -480,7 +480,7 @@ cheese_window_photo_saved_cb (CheeseWebcam *webcam, CheeseWindow *cheese_window)
 }
 
 static void
-cheese_window_video_saved_cb (CheeseWebcam *webcam, CheeseWindow *cheese_window)
+cheese_window_video_saved_cb (CheeseCamera *camera, CheeseWindow *cheese_window)
 {
   gdk_threads_enter ();
 
@@ -497,7 +497,7 @@ cheese_window_video_saved_cb (CheeseWebcam *webcam, CheeseWindow *cheese_window)
 static void
 cheese_window_cmd_close (GtkWidget *widget, CheeseWindow *cheese_window)
 {
-  g_object_unref (cheese_window->webcam);
+  g_object_unref (cheese_window->camera);
   g_object_unref (cheese_window->actions_main);
   g_object_unref (cheese_window->actions_account_photo);
   g_object_unref (cheese_window->actions_countdown);
@@ -1098,7 +1098,7 @@ cheese_window_cmd_about (GtkAction *action, CheeseWindow *cheese_window)
   gtk_show_about_dialog (GTK_WINDOW (cheese_window->window),
                          "version", VERSION,
                          "copyright", "Copyright \xc2\xa9 2007 - 2009\n daniel g. siegel <dgsiegel gnome org>",
-                         "comments", _("Take photos and videos with your webcam, with fun graphical effects"),
+                         "comments", _("Take photos and videos with your camera, with fun graphical effects"),
                          "authors", authors,
                          "translator-credits", translators,
                          "artists", artists,
@@ -1225,11 +1225,11 @@ cheese_window_effect_button_pressed_cb (GtkWidget *widget, CheeseWindow *cheese_
     gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_effects), _("_Effects"));
     gtk_widget_set_sensitive (cheese_window->take_picture, TRUE);
     gtk_widget_set_sensitive (cheese_window->take_picture_fullscreen, TRUE);
-    if (cheese_window->webcam_mode == WEBCAM_MODE_PHOTO)
+    if (cheese_window->camera_mode == CAMERA_MODE_PHOTO)
     {
       gtk_action_group_set_sensitive (cheese_window->actions_photo, TRUE);
     }
-    else if (cheese_window->webcam_mode == WEBCAM_MODE_BURST)
+    else if (cheese_window->camera_mode == CAMERA_MODE_BURST)
     {
       gtk_action_group_set_sensitive (cheese_window->actions_burst, TRUE);
     }
@@ -1237,7 +1237,7 @@ cheese_window_effect_button_pressed_cb (GtkWidget *widget, CheeseWindow *cheese_
     {
       gtk_action_group_set_sensitive (cheese_window->actions_video, TRUE);
     }
-    cheese_webcam_set_effect (cheese_window->webcam,
+    cheese_camera_set_effect (cheese_window->camera,
                               cheese_effect_chooser_get_selection (CHEESE_EFFECT_CHOOSER (cheese_window->effect_chooser)));
     g_object_set (cheese_window->gconf, "gconf_prop_selected_effects",
                   cheese_effect_chooser_get_selection_string (CHEESE_EFFECT_CHOOSER (cheese_window->effect_chooser)),
@@ -1272,7 +1272,7 @@ cheese_window_countdown_picture_cb (gpointer data)
   char         *shutter_filename;
   char         *photo_filename;
 
-  if (cheese_window->webcam_mode == WEBCAM_MODE_BURST)
+  if (cheese_window->camera_mode == CAMERA_MODE_BURST)
   {
     photo_filename = cheese_fileutil_get_new_media_filename (cheese_window->fileutil, CHEESE_MEDIA_MODE_BURST);
   }
@@ -1281,7 +1281,7 @@ cheese_window_countdown_picture_cb (gpointer data)
     photo_filename = cheese_fileutil_get_new_media_filename (cheese_window->fileutil, CHEESE_MEDIA_MODE_PHOTO);
   }
 
-  if (cheese_webcam_take_photo (cheese_window->webcam, photo_filename))
+  if (cheese_camera_take_photo (cheese_window->camera, photo_filename))
   {
     cheese_flash_fire (cheese_window->flash);
     shutter_filename = audio_play_get_filename (cheese_window);
@@ -1338,7 +1338,7 @@ cheese_window_stop_recording (CheeseWindow *cheese_window)
     gtk_image_set_from_stock (GTK_IMAGE (cheese_window->image_take_photo_fullscreen),
                               GTK_STOCK_MEDIA_RECORD, GTK_ICON_SIZE_BUTTON);
 
-    cheese_webcam_stop_video_recording (cheese_window->webcam);
+    cheese_camera_stop_video_recording (cheese_window->camera);
     cheese_window->recording = FALSE;
   }
 }
@@ -1361,7 +1361,7 @@ cheese_window_escape_key_cb (CheeseWindow *cheese_window,
   cheese_countdown_cancel ((CheeseCountdown *) cheese_window->countdown);
   cheese_countdown_cancel ((CheeseCountdown *) cheese_window->countdown_fullscreen);
 
-  if (cheese_window->webcam_mode == WEBCAM_MODE_PHOTO)
+  if (cheese_window->camera_mode == CAMERA_MODE_PHOTO)
   {
     gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook_bar), 0);
     gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->fullscreen_bar), 0);
@@ -1369,7 +1369,7 @@ cheese_window_escape_key_cb (CheeseWindow *cheese_window,
     gtk_widget_set_sensitive (cheese_window->take_picture, TRUE);
     gtk_widget_set_sensitive (cheese_window->take_picture_fullscreen, TRUE);
   }
-  else if (cheese_window->webcam_mode == WEBCAM_MODE_BURST)
+  else if (cheese_window->camera_mode == CAMERA_MODE_BURST)
   {
     cheese_window->repeat_count = 0;
     cheese_window->is_bursting  = FALSE;
@@ -1397,7 +1397,7 @@ cheese_window_take_photo (gpointer data)
   CheeseWindow *cheese_window = (CheeseWindow *) data;
 
   /* return if burst mode was cancelled */
-  if (cheese_window->webcam_mode == WEBCAM_MODE_BURST &&
+  if (cheese_window->camera_mode == CAMERA_MODE_BURST &&
       !cheese_window->is_bursting && cheese_window->repeat_count <= 0)
   {
     return FALSE;
@@ -1438,7 +1438,7 @@ cheese_window_take_photo (gpointer data)
   gtk_widget_set_sensitive (cheese_window->take_picture, FALSE);
   gtk_widget_set_sensitive (cheese_window->take_picture_fullscreen, FALSE);
 
-  if (cheese_window->webcam_mode == WEBCAM_MODE_BURST)
+  if (cheese_window->camera_mode == CAMERA_MODE_BURST)
   {
     guint    repeat_delay = 1000;
     gboolean countdown    = FALSE;
@@ -1475,9 +1475,9 @@ cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_
 {
   char *str;
 
-  switch (cheese_window->webcam_mode)
+  switch (cheese_window->camera_mode)
   {
-    case WEBCAM_MODE_BURST:
+    case CAMERA_MODE_BURST:
 
       /* ignore keybindings and other while bursting */
       if (cheese_window->is_bursting)
@@ -1488,10 +1488,10 @@ cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_
       gtk_action_group_set_sensitive (cheese_window->actions_toggle, FALSE);
       g_object_get (cheese_window->gconf, "gconf_prop_burst_repeat", &cheese_window->repeat_count, NULL); /* reset burst counter */
       cheese_fileutil_reset_burst (cheese_window->fileutil); /* reset filename counter */
-    case WEBCAM_MODE_PHOTO:
+    case CAMERA_MODE_PHOTO:
       cheese_window_take_photo (cheese_window);
       break;
-    case WEBCAM_MODE_VIDEO:
+    case CAMERA_MODE_VIDEO:
       if (!cheese_window->recording)
       {
         gtk_action_group_set_sensitive (cheese_window->actions_effects, FALSE);
@@ -1508,8 +1508,8 @@ cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_
                                   GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_BUTTON);
 
         cheese_window->video_filename = cheese_fileutil_get_new_media_filename (cheese_window->fileutil,
-                                                                                WEBCAM_MODE_VIDEO);
-        cheese_webcam_start_video_recording (cheese_window->webcam, cheese_window->video_filename);
+                                                                                CAMERA_MODE_VIDEO);
+        cheese_camera_start_video_recording (cheese_window->camera, cheese_window->video_filename);
 
         cheese_window->recording = TRUE;
       }
@@ -1528,7 +1528,7 @@ static void
 cheese_window_preferences_cb (GtkAction *action, CheeseWindow *cheese_window)
 {
   cheese_prefs_dialog_run (cheese_window->window, cheese_window->gconf,
-                           cheese_window->webcam);
+                           cheese_window->camera);
 }
 
 static const GtkActionEntry action_entries_main[] = {
@@ -1622,7 +1622,7 @@ cheese_window_activate_radio_action (GtkAction *action, GtkRadioAction *current,
 
   if (strcmp (gtk_action_get_name (GTK_ACTION (current)), "Photo") == 0)
   {
-    cheese_window->webcam_mode = WEBCAM_MODE_PHOTO;
+    cheese_window->camera_mode = CAMERA_MODE_PHOTO;
 
     str = g_strconcat ("<b>", _("_Take a Photo"), "</b>", NULL);
     gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), g_strdup (str));
@@ -1635,7 +1635,7 @@ cheese_window_activate_radio_action (GtkAction *action, GtkRadioAction *current,
   }
   else if (strcmp (gtk_action_get_name (GTK_ACTION (current)), "Burst") == 0)
   {
-    cheese_window->webcam_mode = WEBCAM_MODE_BURST;
+    cheese_window->camera_mode = CAMERA_MODE_BURST;
 
     str = g_strconcat ("<b>", _("_Take multiple Photos"), "</b>", NULL);
     gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), g_strdup (str));
@@ -1648,7 +1648,7 @@ cheese_window_activate_radio_action (GtkAction *action, GtkRadioAction *current,
   }
   else
   {
-    cheese_window->webcam_mode = WEBCAM_MODE_VIDEO;
+    cheese_window->camera_mode = CAMERA_MODE_VIDEO;
 
     str = g_strconcat ("<b>", _("_Start recording"), "</b>", NULL);
     gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), g_strdup (str));
@@ -2032,7 +2032,7 @@ cheese_window_create_window (CheeseWindow *cheese_window)
 void
 setup_camera (CheeseWindow *cheese_window)
 {
-  char      *webcam_device = NULL;
+  char      *camera_device = NULL;
   int        x_resolution;
   int        y_resolution;
   gdouble    brightness;
@@ -2046,7 +2046,7 @@ setup_camera (CheeseWindow *cheese_window)
   g_object_get (cheese_window->gconf,
                 "gconf_prop_x_resolution", &x_resolution,
                 "gconf_prop_y_resolution", &y_resolution,
-                "gconf_prop_webcam", &webcam_device,
+                "gconf_prop_webcam", &camera_device,
                 "gconf_prop_brightness", &brightness,
                 "gconf_prop_contrast", &contrast,
                 "gconf_prop_saturation", &saturation,
@@ -2054,15 +2054,15 @@ setup_camera (CheeseWindow *cheese_window)
                 NULL);
 
   gdk_threads_enter ();
-  cheese_window->webcam = cheese_webcam_new (cheese_window->screen,
-                                             webcam_device, x_resolution,
+  cheese_window->camera = cheese_camera_new (cheese_window->screen,
+                                             camera_device, x_resolution,
                                              y_resolution);
   gdk_threads_leave ();
 
-  g_free (webcam_device);
+  g_free (camera_device);
 
   error = NULL;
-  cheese_webcam_setup (cheese_window->webcam, cheese_window->startup_hal_dev_udi, &error);
+  cheese_camera_setup (cheese_window->camera, cheese_window->startup_hal_dev_udi, &error);
   if (error != NULL)
   {
     GtkWidget *dialog;
@@ -2094,24 +2094,24 @@ setup_camera (CheeseWindow *cheese_window)
     return;
   }
 
-  g_signal_connect (cheese_window->webcam, "photo-saved",
+  g_signal_connect (cheese_window->camera, "photo-saved",
                     G_CALLBACK (cheese_window_photo_saved_cb), cheese_window);
-  g_signal_connect (cheese_window->webcam, "video-saved",
+  g_signal_connect (cheese_window->camera, "video-saved",
                     G_CALLBACK (cheese_window_video_saved_cb), cheese_window);
 
-  cheese_webcam_set_effect (cheese_window->webcam,
+  cheese_camera_set_effect (cheese_window->camera,
                             cheese_effect_chooser_get_selection (CHEESE_EFFECT_CHOOSER (cheese_window->effect_chooser)));
 
-  cheese_webcam_set_balance_property (cheese_window->webcam, "brightness", brightness);
-  cheese_webcam_set_balance_property (cheese_window->webcam, "contrast", contrast);
-  cheese_webcam_set_balance_property (cheese_window->webcam, "saturation", saturation);
-  cheese_webcam_set_balance_property (cheese_window->webcam, "hue", hue);
+  cheese_camera_set_balance_property (cheese_window->camera, "brightness", brightness);
+  cheese_camera_set_balance_property (cheese_window->camera, "contrast", contrast);
+  cheese_camera_set_balance_property (cheese_window->camera, "saturation", saturation);
+  cheese_camera_set_balance_property (cheese_window->camera, "hue", hue);
 
-  cheese_webcam_play (cheese_window->webcam);
+  cheese_camera_play (cheese_window->camera);
   gdk_threads_enter ();
   gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook), 0);
   ephy_spinner_stop (EPHY_SPINNER (cheese_window->throbber));
-  if (cheese_webcam_get_num_webcam_devices (cheese_window->webcam) == 0)
+  if (cheese_camera_get_num_camera_devices (cheese_window->camera) == 0)
   {
     info_bar = cheese_no_camera_info_bar_new ();
 
@@ -2159,7 +2159,7 @@ cheese_window_init (char *hal_dev_udi, CheeseDbus *dbus_server, gboolean startup
 
   gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook), 2);
 
-  cheese_window->webcam_mode = WEBCAM_MODE_PHOTO;
+  cheese_window->camera_mode = CAMERA_MODE_PHOTO;
   cheese_window->recording   = FALSE;
 
   g_object_get (cheese_window->gconf,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]