diff options
Diffstat (limited to 'multimedia/cheese/files')
-rw-r--r-- | multimedia/cheese/files/patch-configure | 214 | ||||
-rw-r--r-- | multimedia/cheese/files/patch-libcheese_cheese-camera-device-monitor.c | 438 |
2 files changed, 0 insertions, 652 deletions
diff --git a/multimedia/cheese/files/patch-configure b/multimedia/cheese/files/patch-configure deleted file mode 100644 index 8befb947b..000000000 --- a/multimedia/cheese/files/patch-configure +++ /dev/null @@ -1,214 +0,0 @@ ---- configure.orig 2010-04-27 17:32:36.000000000 +0200 -+++ configure 2010-04-27 17:32:36.000000000 +0200 -@@ -756,8 +756,8 @@ HAVE_XTEST_FALSE - HAVE_XTEST_TRUE - XTEST_LIBS - OS_LINUX --UDEV_LIBS --UDEV_CFLAGS -+HAL_LIBS -+HAL_CFLAGS - HAVE_GNOME_DOC_UTILS_FALSE - HAVE_GNOME_DOC_UTILS_TRUE - DISTCHECK_CONFIGURE_FLAGS -@@ -975,8 +975,8 @@ LIBS - CPPFLAGS - CPP - PKG_CONFIG --UDEV_CFLAGS --UDEV_LIBS -+HAL_CFLAGS -+HAL_LIBS - CHEESE_CFLAGS - CHEESE_LIBS' - -@@ -1646,8 +1646,8 @@ Some influential environment variables: - you have headers in a nonstandard directory <include dir> - CPP C preprocessor - PKG_CONFIG path to pkg-config utility -- UDEV_CFLAGS C compiler flags for UDEV, overriding pkg-config -- UDEV_LIBS linker flags for UDEV, overriding pkg-config -+ HAL_CFLAGS C compiler flags for HAL, overriding pkg-config -+ HAL_LIBS linker flags for HAL, overriding pkg-config - CHEESE_CFLAGS - C compiler flags for CHEESE, overriding pkg-config - CHEESE_LIBS linker flags for CHEESE, overriding pkg-config -@@ -13843,38 +13843,38 @@ LIBRSVG_REQUIRED=2.18.0 - # Check for udev - #******************************************************************************* - --UDEV_PKG= -+HAL_PKG= - - pkg_failed=no --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for UDEV" >&5 --$as_echo_n "checking for UDEV... " >&6; } -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for HAL" >&5 -+$as_echo_n "checking for HAL... " >&6; } - --if test -n "$UDEV_CFLAGS"; then -- pkg_cv_UDEV_CFLAGS="$UDEV_CFLAGS" -+if test -n "$HAL_CFLAGS"; then -+ pkg_cv_HAL_CFLAGS="$HAL_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ -- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gudev-1.0\""; } >&5 -- ($PKG_CONFIG --exists --print-errors "gudev-1.0") 2>&5 -+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"hal\""; } >&5 -+ ($PKG_CONFIG --exists --print-errors "hal") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then -- pkg_cv_UDEV_CFLAGS=`$PKG_CONFIG --cflags "gudev-1.0" 2>/dev/null` -+ pkg_cv_HAL_CFLAGS=`$PKG_CONFIG --cflags "hal" 2>/dev/null` - else - pkg_failed=yes - fi - else - pkg_failed=untried - fi --if test -n "$UDEV_LIBS"; then -- pkg_cv_UDEV_LIBS="$UDEV_LIBS" -+if test -n "$HAL_LIBS"; then -+ pkg_cv_HAL_LIBS="$HAL_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ -- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gudev-1.0\""; } >&5 -- ($PKG_CONFIG --exists --print-errors "gudev-1.0") 2>&5 -+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"hal\""; } >&5 -+ ($PKG_CONFIG --exists --print-errors "hal") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then -- pkg_cv_UDEV_LIBS=`$PKG_CONFIG --libs "gudev-1.0" 2>/dev/null` -+ pkg_cv_HAL_LIBS=`$PKG_CONFIG --libs "hal" 2>/dev/null` - else - pkg_failed=yes - fi -@@ -13892,27 +13892,27 @@ else - _pkg_short_errors_supported=no - fi - if test $_pkg_short_errors_supported = yes; then -- UDEV_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gudev-1.0" 2>&1` -+ HAL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "hal" 2>&1` - else -- UDEV_PKG_ERRORS=`$PKG_CONFIG --print-errors "gudev-1.0" 2>&1` -+ HAL_PKG_ERRORS=`$PKG_CONFIG --print-errors "hal" 2>&1` - fi - # Put the nasty error message in config.log where it belongs -- echo "$UDEV_PKG_ERRORS" >&5 -+ echo "$HAL_PKG_ERRORS" >&5 - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 - $as_echo "no" >&6; } -- UDEV_PKG= -+ HAL_PKG= - elif test $pkg_failed = untried; then -- UDEV_PKG= -+ HAL_PKG= - else -- UDEV_CFLAGS=$pkg_cv_UDEV_CFLAGS -- UDEV_LIBS=$pkg_cv_UDEV_LIBS -+ HAL_CFLAGS=$pkg_cv_HAL_CFLAGS -+ HAL_LIBS=$pkg_cv_HAL_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 - $as_echo "yes" >&6; } - --$as_echo "#define HAVE_UDEV 1" >>confdefs.h -+$as_echo "#define HAVE_HAL 1" >>confdefs.h - -- UDEV_PKG=gudev-1.0 -+ HAL_PKG=hal - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking operating system" >&5 -@@ -13925,7 +13925,7 @@ $as_echo "#define OS_LINUX /**/" >>confd - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: Linux" >&5 - $as_echo "Linux" >&6; } -- if test x$UDEV_PKG = "x" ; then -+ if test x$HAL_PKG = "x" ; then - as_fn_error "libgudev is required under Linux and not installed" "$LINENO" 5 - fi - ;; -@@ -14034,7 +14034,7 @@ if test -n "$CHEESE_CFLAGS"; then - dbus-glib-1 >= \$DBUS_GLIB_REQUIRED \\ - pangocairo >= \$PANGOCAIRO_REQUIRED \\ - librsvg-2.0 >= \$LIBRSVG_REQUIRED -- libcanberra-gtk \$UDEV_PKG\""; } >&5 -+ libcanberra-gtk \$HAL_PKG\""; } >&5 - ($PKG_CONFIG --exists --print-errors "\ - glib-2.0 >= $GLIB_REQUIRED \ - gobject-2.0 >= $GOBJECT_REQUIRED \ -@@ -14050,7 +14050,7 @@ if test -n "$CHEESE_CFLAGS"; then - dbus-glib-1 >= $DBUS_GLIB_REQUIRED \ - pangocairo >= $PANGOCAIRO_REQUIRED \ - librsvg-2.0 >= $LIBRSVG_REQUIRED -- libcanberra-gtk $UDEV_PKG") 2>&5 -+ libcanberra-gtk $HAL_PKG") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then -@@ -14069,7 +14069,7 @@ if test -n "$CHEESE_CFLAGS"; then - dbus-glib-1 >= $DBUS_GLIB_REQUIRED \ - pangocairo >= $PANGOCAIRO_REQUIRED \ - librsvg-2.0 >= $LIBRSVG_REQUIRED -- libcanberra-gtk $UDEV_PKG" 2>/dev/null` -+ libcanberra-gtk $HAL_PKG" 2>/dev/null` - else - pkg_failed=yes - fi -@@ -14095,7 +14095,7 @@ if test -n "$CHEESE_LIBS"; then - dbus-glib-1 >= \$DBUS_GLIB_REQUIRED \\ - pangocairo >= \$PANGOCAIRO_REQUIRED \\ - librsvg-2.0 >= \$LIBRSVG_REQUIRED -- libcanberra-gtk \$UDEV_PKG\""; } >&5 -+ libcanberra-gtk \$HAL_PKG\""; } >&5 - ($PKG_CONFIG --exists --print-errors "\ - glib-2.0 >= $GLIB_REQUIRED \ - gobject-2.0 >= $GOBJECT_REQUIRED \ -@@ -14111,7 +14111,7 @@ if test -n "$CHEESE_LIBS"; then - dbus-glib-1 >= $DBUS_GLIB_REQUIRED \ - pangocairo >= $PANGOCAIRO_REQUIRED \ - librsvg-2.0 >= $LIBRSVG_REQUIRED -- libcanberra-gtk $UDEV_PKG") 2>&5 -+ libcanberra-gtk $HAL_PKG") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then -@@ -14130,7 +14130,7 @@ if test -n "$CHEESE_LIBS"; then - dbus-glib-1 >= $DBUS_GLIB_REQUIRED \ - pangocairo >= $PANGOCAIRO_REQUIRED \ - librsvg-2.0 >= $LIBRSVG_REQUIRED -- libcanberra-gtk $UDEV_PKG" 2>/dev/null` -+ libcanberra-gtk $HAL_PKG" 2>/dev/null` - else - pkg_failed=yes - fi -@@ -14163,7 +14163,7 @@ fi - dbus-glib-1 >= $DBUS_GLIB_REQUIRED \ - pangocairo >= $PANGOCAIRO_REQUIRED \ - librsvg-2.0 >= $LIBRSVG_REQUIRED -- libcanberra-gtk $UDEV_PKG" 2>&1` -+ libcanberra-gtk $HAL_PKG" 2>&1` - else - CHEESE_PKG_ERRORS=`$PKG_CONFIG --print-errors "\ - glib-2.0 >= $GLIB_REQUIRED \ -@@ -14180,7 +14180,7 @@ fi - dbus-glib-1 >= $DBUS_GLIB_REQUIRED \ - pangocairo >= $PANGOCAIRO_REQUIRED \ - librsvg-2.0 >= $LIBRSVG_REQUIRED -- libcanberra-gtk $UDEV_PKG" 2>&1` -+ libcanberra-gtk $HAL_PKG" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$CHEESE_PKG_ERRORS" >&5 -@@ -14200,7 +14200,7 @@ fi - dbus-glib-1 >= $DBUS_GLIB_REQUIRED \ - pangocairo >= $PANGOCAIRO_REQUIRED \ - librsvg-2.0 >= $LIBRSVG_REQUIRED -- libcanberra-gtk $UDEV_PKG) were not met: -+ libcanberra-gtk $HAL_PKG) were not met: - - $CHEESE_PKG_ERRORS - diff --git a/multimedia/cheese/files/patch-libcheese_cheese-camera-device-monitor.c b/multimedia/cheese/files/patch-libcheese_cheese-camera-device-monitor.c deleted file mode 100644 index 8604c2377..000000000 --- a/multimedia/cheese/files/patch-libcheese_cheese-camera-device-monitor.c +++ /dev/null @@ -1,438 +0,0 @@ ---- libcheese/cheese-camera-device-monitor.c.orig 2010-08-16 23:00:43.000000000 +0200 -+++ libcheese/cheese-camera-device-monitor.c 2010-08-18 09:51:48.000000000 +0200 -@@ -24,24 +24,11 @@ - #endif - - #include <glib-object.h> -+#include <glib/gstdio.h> - #include <dbus/dbus-glib-lowlevel.h> -+#include <libhal.h> - #include <string.h> -- --#ifdef HAVE_UDEV -- #define G_UDEV_API_IS_SUBJECT_TO_CHANGE 1 -- #include <gudev/gudev.h> --#else -- #include <fcntl.h> -- #include <unistd.h> -- #include <sys/ioctl.h> -- #if USE_SYS_VIDEOIO_H > 0 -- #include <sys/types.h> -- #include <sys/videoio.h> -- #elif defined (__sun) -- #include <sys/types.h> -- #include <sys/videodev2.h> -- #endif /* USE_SYS_VIDEOIO_H */ --#endif -+#include <unistd.h> - - #include "cheese-camera-device-monitor.h" - #include "cheese-marshal.h" -@@ -54,9 +41,9 @@ - * #CheeseCameraDeviceMonitor provides a basic interface for - * video4linux device enumeration and hotplugging. - * -- * It uses either GUdev or some platform specific code to list video -+ * It uses either HAL or some platform specific code to list video - * devices. It is also capable (right now in linux only, with the -- * udev backend) to monitor device plugging and emit a -+ * hal backend) to monitor device plugging and emit a - * CheeseCameraDeviceMonitor::added or - * CheeseCameraDeviceMonitor::removed signal when an event happens. - */ -@@ -80,11 +67,9 @@ enum CheeseCameraDeviceMonitorError - - typedef struct - { --#ifdef HAVE_UDEV -- GUdevClient *client; --#else -+ DBusConnection *connection; -+ LibHalContext *hal_ctx; - guint filler; --#endif /* HAVE_UDEV */ - } CheeseCameraDeviceMonitorPrivate; - - enum -@@ -102,111 +87,77 @@ cheese_camera_device_monitor_error_quark - return g_quark_from_static_string ("cheese-camera-error-quark"); - } - --#ifdef HAVE_UDEV --static void --cheese_camera_device_monitor_added (CheeseCameraDeviceMonitor *monitor, -- GUdevDevice *udevice) -+cheese_camera_device_monitor_handle_udi (CheeseCameraDeviceMonitor *monitor, -+ const char *udi) - { -- const char *device_file; -- const char *product_name; -- const char *vendor; -- const char *product; -- const char *bus; -- gint vendor_id = 0; -- gint product_id = 0; -+ CheeseCameraDeviceMonitorPrivate *priv = CHEESE_CAMERA_DEVICE_MONITOR_GET_PRIVATE (monitor); -+ char *device_file; -+ char *product_name; -+ char *capstr; - gint v4l_version = 0; -+ DBusError error; - -- const gchar *devpath = g_udev_device_get_property (udevice, "DEVPATH"); -+ GST_INFO ("Checking hal device '%s'", udi); - -- GST_INFO ("Checking udev device '%s'", devpath); -+ dbus_error_init (&error); - -- bus = g_udev_device_get_property (udevice, "ID_BUS"); -- if (g_strcmp0 (bus, "usb") == 0) -- { -- vendor = g_udev_device_get_property (udevice, "ID_VENDOR_ID"); -- if (vendor != NULL) -- vendor_id = g_ascii_strtoll (vendor, NULL, 16); -- product = g_udev_device_get_property (udevice, "ID_MODEL_ID"); -- if (product != NULL) -- product_id = g_ascii_strtoll (product, NULL, 16); -- if (vendor_id == 0 || product_id == 0) -- { -- GST_WARNING ("Error getting vendor and product id"); -- } -- else -- { -- GST_INFO ("Found device %04x:%04x, getting capabilities...", vendor_id, product_id); -- } -- } -- else -+ product_name = libhal_device_get_property_string (priv->hal_ctx, udi, "info.product", &error); -+ if (dbus_error_is_set (&error)) - { -- GST_INFO ("Not an usb device, skipping vendor and model id retrieval"); -+ GST_WARNING ("error getting product name: %s: %s", error.name, error.message); -+ dbus_error_free (&error); -+ return; - } - -- device_file = g_udev_device_get_device_file (udevice); -- if (device_file == NULL) -+ device_file = libhal_device_get_property_string (priv->hal_ctx, udi, "video4linux.device", &error); -+ if (dbus_error_is_set (&error)) - { -- GST_WARNING ("Error getting V4L device"); -- return; -+ GST_WARNING ("error getting V4L device for %s: %s: %s", udi, error.name, error.message); -+ dbus_error_free (&error); -+ libhal_free_string (product_name); - } - -- /* vbi devices support capture capability too, but cannot be used, -- * so detect them by device name */ -- if (strstr (device_file, "vbi")) -+ if (g_access (device_file, (R_OK | W_OK)) == -1) - { -- GST_INFO ("Skipping vbi device: %s", device_file); -+ GST_WARNING ("Device %s does not have proper permissions. Permissions must be 0666", device_file); -+ libhal_free_string (product_name); -+ libhal_free_string (device_file); - return; - } - -- v4l_version = g_udev_device_get_property_as_int (udevice, "ID_V4L_VERSION"); -- if (v4l_version == 2 || v4l_version == 1) -+ capstr = libhal_device_get_property_string (priv->hal_ctx, udi, "video4linux.version", &error); -+ if (dbus_error_is_set (&error)) - { -- const char *caps; -- -- caps = g_udev_device_get_property (udevice, "ID_V4L_CAPABILITIES"); -- if (caps == NULL || strstr (caps, ":capture:") == NULL) -- { -- GST_WARNING ("Device %s seems to not have the capture capability, (radio tuner?)" -- "Removing it from device list.", device_file); -- return; -- } -- product_name = g_udev_device_get_property (udevice, "ID_V4L_PRODUCT"); -- } -- else if (v4l_version == 0) -- { -- GST_ERROR ("Fix your udev installation to include v4l_id, ignoring %s", device_file); -+ GST_WARNING ("error getting V4L version for %s: %s: %s", udi, error.name, error.message); -+ dbus_error_free (&error); -+ libhal_free_string (product_name); -+ libhal_free_string (device_file); - return; - } -- else -- { -- g_assert_not_reached (); -- } -+ -+ v4l_version = atoi (capstr); -+ libhal_free_string (capstr); - - g_signal_emit (monitor, monitor_signals[ADDED], 0, -- devpath, -+ udi, - device_file, - product_name, - v4l_version); - } - - static void --cheese_camera_device_monitor_removed (CheeseCameraDeviceMonitor *monitor, -- GUdevDevice *udevice) --{ -- g_signal_emit (monitor, monitor_signals[REMOVED], 0, -- g_udev_device_get_property (udevice, "DEVPATH")); --} -+cheese_camera_device_monitor_removed (LibHalContext *ctx, -+ const char *udi) -+ { -+ CheeseCameraDeviceMonitor *monitor; -+ void *data; - --static void --cheese_camera_device_monitor_uevent_cb (GUdevClient *client, -- const gchar *action, -- GUdevDevice *udevice, -- CheeseCameraDeviceMonitor *monitor) --{ -- if (g_str_equal (action, "remove")) -- cheese_camera_device_monitor_removed (monitor, udevice); -- else if (g_str_equal (action, "add")) -- cheese_camera_device_monitor_added (monitor, udevice); -+ data = libhal_ctx_get_user_data (ctx); -+ g_assert (data); -+ -+ monitor = CHEESE_CAMERA_DEVICE_MONITOR (data); -+ -+ g_signal_emit (monitor, monitor_signals[REMOVED], 0, udi); - } - - /** -@@ -222,115 +173,85 @@ void - cheese_camera_device_monitor_coldplug (CheeseCameraDeviceMonitor *monitor) - { - CheeseCameraDeviceMonitorPrivate *priv = CHEESE_CAMERA_DEVICE_MONITOR_GET_PRIVATE (monitor); -- GList *devices, *l; -- gint i = 0; -+ int i; -+ int num_udis = 0; -+ char **udis; -+ DBusError error; - -- if (priv->client == NULL) -- return; -+ GST_INFO ("Probing devices with HAL..."); - -- GST_INFO ("Probing devices with udev..."); -+ if (priv->hal_ctx == NULL) -+ return; - -- devices = g_udev_client_query_by_subsystem (priv->client, "video4linux"); -+ dbus_error_init (&error); - -- /* Initialize camera structures */ -- for (l = devices; l != NULL; l = l->next) -+ udis = libhal_find_device_by_capability (priv->hal_ctx, "video4linux", &num_udis, &error); -+ -+ if (dbus_error_is_set (&error)) - { -- cheese_camera_device_monitor_added (monitor, l->data); -- g_object_unref (l->data); -- i++; -+ GST_WARNING ("libhal_find_device_by_capability: %s: %s", error.name, error.message); -+ dbus_error_free (&error); -+ return; - } -- g_list_free (devices); -+ -+ /* Initialize camera structures */ -+ for (i = 0; i < num_udis; i++) -+ cheese_camera_device_monitor_handle_udi (monitor, udis[i]); -+ libhal_free_string_array (udis); - - if (i == 0) GST_WARNING ("No device found"); - } - --#else /* HAVE_UDEV */ --void --cheese_camera_device_monitor_coldplug (CheeseCameraDeviceMonitor *monitor) -+static void -+cheese_camera_device_monitor_added (LibHalContext *ctx, const char *udi) - { -- #if 0 -- CheeseCameraDeviceMonitorPrivate *priv = CHEESE_CAMERA_DEVICE_MONITOR_GET_PRIVATE (monitor); -- struct v4l2_capability v2cap; -- struct video_capability v1cap; -- int fd, ok; -- -- if ((fd = open (device_path, O_RDONLY | O_NONBLOCK)) < 0) -- { -- g_warning ("Failed to open %s: %s", device_path, strerror (errno)); -- return; -- } -- ok = ioctl (fd, VIDIOC_QUERYCAP, &v2cap); -- if (ok < 0) -- { -- ok = ioctl (fd, VIDIOCGCAP, &v1cap); -- if (ok < 0) -- { -- g_warning ("Error while probing v4l capabilities for %s: %s", -- device_path, strerror (errno)); -- close (fd); -- return; -- } -- g_print ("Detected v4l device: %s\n", v1cap.name); -- g_print ("Device type: %d\n", v1cap.type); -- gstreamer_src = "v4lsrc"; -- product_name = v1cap.name; -- } -- else -- { -- guint cap = v2cap.capabilities; -- g_print ("Detected v4l2 device: %s\n", v2cap.card); -- g_print ("Driver: %s, version: %d\n", v2cap.driver, v2cap.version); -- -- /* g_print ("Bus info: %s\n", v2cap.bus_info); */ /* Doesn't seem anything useful */ -- g_print ("Capabilities: 0x%08X\n", v2cap.capabilities); -- if (!(cap & V4L2_CAP_VIDEO_CAPTURE)) -- { -- g_print ("Device %s seems to not have the capture capability, (radio tuner?)\n" -- "Removing it from device list.\n", device_path); -- close (fd); -- return; -- } -- gstreamer_src = "v4l2src"; -- product_name = (char *) v2cap.card; -- } -- close (fd); -+ CheeseCameraDeviceMonitor *monitor; -+ char **caps; -+ guint i; -+ void *data; - -- GList *devices, *l; -+ data = libhal_ctx_get_user_data (ctx); -+ g_assert (data); - -- g_print ("Probing devices with udev...\n"); -+ monitor = CHEESE_CAMERA_DEVICE_MONITOR (data); - -- if (priv->client == NULL) -+ caps = libhal_device_get_property_strlist (ctx, udi, "info.capabilities", NULL); -+ if (caps == NULL) - return; - -- devices = g_udev_client_query_by_subsystem (priv->client, "video4linux"); -- -- /* Initialize camera structures */ -- for (l = devices; l != NULL; l = l->next) -+ for (i = 0; caps[i] != NULL; i++) - { -- cheese_camera_device_monitor_added (monitor, l->data); -- g_object_unref (l->data); -+ if (g_strcmp0 (caps[i], "video4linux") == 0) -+ { -+ cheese_camera_device_monitor_handle_udi (monitor, udi); -+ break; -+ } - } -- g_list_free (devices); -- #endif --} - --#endif /* HAVE_UDEV */ -+ libhal_free_string_array (caps); -+} - - static void - cheese_camera_device_monitor_finalize (GObject *object) - { --#ifdef HAVE_UDEV - CheeseCameraDeviceMonitor *monitor; - - monitor = CHEESE_CAMERA_DEVICE_MONITOR (object); - CheeseCameraDeviceMonitorPrivate *priv = CHEESE_CAMERA_DEVICE_MONITOR_GET_PRIVATE (monitor); - -- if (priv->client != NULL) -+ if (priv->connection != NULL) - { -- g_object_unref (priv->client); -- priv->client = NULL; -+ dbus_connection_unref (priv->connection); -+ priv->connection = NULL; - } --#endif /* HAVE_UDEV */ -+ if (priv->hal_ctx != NULL) -+ { -+ libhal_ctx_set_device_added (priv->hal_ctx, NULL); -+ libhal_ctx_set_device_removed (priv->hal_ctx, NULL); -+ libhal_ctx_free (priv->hal_ctx); -+ priv->hal_ctx = NULL; -+ } -+ - G_OBJECT_CLASS (cheese_camera_device_monitor_parent_class)->finalize (object); - } - -@@ -385,14 +306,52 @@ cheese_camera_device_monitor_class_init - static void - cheese_camera_device_monitor_init (CheeseCameraDeviceMonitor *monitor) - { --#ifdef HAVE_UDEV -- CheeseCameraDeviceMonitorPrivate *priv = CHEESE_CAMERA_DEVICE_MONITOR_GET_PRIVATE (monitor); -- const gchar *const subsystems[] = {"video4linux", NULL}; -- -- priv->client = g_udev_client_new (subsystems); -- g_signal_connect (G_OBJECT (priv->client), "uevent", -- G_CALLBACK (cheese_camera_device_monitor_uevent_cb), monitor); --#endif /* HAVE_UDEV */ -+ CheeseCameraDeviceMonitorPrivate *priv = CHEESE_CAMERA_DEVICE_MONITOR_GET_PRIVATE (monitor); -+ LibHalContext *hal_ctx; -+ DBusError error; -+ -+ dbus_error_init (&error); -+ -+ priv->connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error); -+ dbus_connection_set_exit_on_disconnect (priv->connection, FALSE); -+ -+ hal_ctx = libhal_ctx_new (); -+ if (hal_ctx == NULL) -+ { -+ GST_WARNING ("Could not create libhal context"); -+ dbus_error_free (&error); -+ return; -+ } -+ -+ if (!libhal_ctx_set_dbus_connection (hal_ctx, priv->connection)) -+ { -+ GST_WARNING ("libhal_ctx_set_dbus_connection: %s: %s", error.name, error.message); -+ dbus_error_free (&error); -+ return; -+ } -+ -+ if (!libhal_ctx_init (hal_ctx, &error)) -+ { -+ if (dbus_error_is_set (&error)) -+ { -+ GST_WARNING ("libhal_ctx_init: %s: %s", error.name, error.message); -+ dbus_error_free (&error); -+ } -+ GST_WARNING ("Could not initialise connection to hald.\n" -+ "Normally this means the HAL daemon (hald) is not running or not ready"); -+ return; -+ } -+ -+ dbus_connection_setup_with_g_main (priv->connection, NULL); -+ -+ if (!libhal_ctx_set_user_data (hal_ctx, monitor)) -+ GST_WARNING ("Failed to set user data on HAL context"); -+ if (!libhal_ctx_set_device_added (hal_ctx, cheese_camera_device_monitor_added)) -+ GST_WARNING ("Failed to connect to device added signal from HAL"); -+ if (!libhal_ctx_set_device_removed (hal_ctx, cheese_camera_device_monitor_removed)) -+ GST_WARNING ("Failed to connect to device removed signal from HAL"); -+ -+ priv->hal_ctx = hal_ctx; - } - - /** |