diff options
Diffstat (limited to 'multimedia/cheese')
-rw-r--r-- | multimedia/cheese/Makefile | 12 | ||||
-rw-r--r-- | multimedia/cheese/distinfo | 6 | ||||
-rw-r--r-- | multimedia/cheese/files/patch-configure | 225 | ||||
-rw-r--r-- | multimedia/cheese/files/patch-libcheese_cheese-camera-device-monitor.c | 436 | ||||
-rw-r--r-- | multimedia/cheese/files/patch-src_cheese-webcam.c | 40 | ||||
-rw-r--r-- | multimedia/cheese/pkg-plist | 60 |
6 files changed, 718 insertions, 61 deletions
diff --git a/multimedia/cheese/Makefile b/multimedia/cheese/Makefile index 3e45d97937c2..ea3c7fd8b705 100644 --- a/multimedia/cheese/Makefile +++ b/multimedia/cheese/Makefile @@ -3,12 +3,12 @@ # Whom: FreeBSD GNOME Team <gnome@FreeBSD.org> # # $FreeBSD$ -# $MCom: ports/multimedia/cheese/Makefile,v 1.44 2009/10/19 20:24:12 kwm Exp $ +# $MCom: ports/multimedia/cheese/Makefile,v 1.55 2010/04/17 22:01:34 marcus Exp $ # PORTNAME= cheese -PORTVERSION= 2.28.1 -PORTREVISION= 2 +PORTVERSION= 2.30.0 +PORTREVISION= 3 CATEGORIES= multimedia gnome MASTER_SITES= GNOME DIST_SUBDIR= gnome2 @@ -18,15 +18,19 @@ COMMENT= A Photobooth-inspired app for taking pictures and videos from webcam BUILD_DEPENDS= ${LOCALBASE}/include/linux/videodev.h:${PORTSDIR}/multimedia/v4l_compat +LIB_DEPENDS= canberra-gtk.0:${PORTSDIR}/audio/libcanberra \ + hal.1:${PORTSDIR}/sysutils/hal + USE_XORG= xxf86vm USE_BZIP2= yes USE_GMAKE= yes USE_GNOME= gnomehack gnomeprefix intlhack evolutiondataserver librsvg2 \ gnomedocutils gnomedesktop USE_GETTEXT= yes -USE_GSTREAMER= good +USE_GSTREAMER= good v4l2 INSTALLS_OMF= yes INSTALLS_ICONS= yes +USE_LDCONFIG= yes GNU_CONFIGURE= yes CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \ LDFLAGS="-L${LOCALBASE}/lib" diff --git a/multimedia/cheese/distinfo b/multimedia/cheese/distinfo index 0700030e84f3..6a244150f7d0 100644 --- a/multimedia/cheese/distinfo +++ b/multimedia/cheese/distinfo @@ -1,3 +1,3 @@ -MD5 (gnome2/cheese-2.28.1.tar.bz2) = 9accb0d6fa3f1f7644bade886c6078c3 -SHA256 (gnome2/cheese-2.28.1.tar.bz2) = a1a2bb43c161829cbd1f87753abf26ed6d5fb79cd1ab9723dd65865d33950df4 -SIZE (gnome2/cheese-2.28.1.tar.bz2) = 4852259 +MD5 (gnome2/cheese-2.30.0.tar.bz2) = bdcd6f220749ec7ec1a7d4b4726cac78 +SHA256 (gnome2/cheese-2.30.0.tar.bz2) = 7eab2c736abc1a333eb3dd7fb5c888c08f2dc0f34443b5801a7dfc581101aab9 +SIZE (gnome2/cheese-2.30.0.tar.bz2) = 5275469 diff --git a/multimedia/cheese/files/patch-configure b/multimedia/cheese/files/patch-configure new file mode 100644 index 000000000000..f0bc10f9740d --- /dev/null +++ b/multimedia/cheese/files/patch-configure @@ -0,0 +1,225 @@ +--- configure.orig 2010-04-16 22:54:43.000000000 -0400 ++++ configure 2010-04-16 22:56:36.000000000 -0400 +@@ -800,8 +800,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 +@@ -1008,8 +1008,8 @@ LIBS + CPPFLAGS + CPP + PKG_CONFIG +-UDEV_CFLAGS +-UDEV_LIBS ++HAL_CFLAGS ++HAL_LIBS + CHEESE_CFLAGS + CHEESE_LIBS' + +@@ -1688,8 +1688,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 +@@ -15729,38 +15729,38 @@ LIBRSVG_REQUIRED=2.18.0 + # Check for udev + #******************************************************************************* + +-UDEV_PKG= ++HAL_PKG= + + pkg_failed=no +-{ $as_echo "$as_me:$LINENO: checking for UDEV" >&5 +-$as_echo_n "checking for UDEV... " >&6; } ++{ $as_echo "$as_me:$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:$LINENO: \$PKG_CONFIG --exists --print-errors \"gudev-1.0\"") >&5 +- ($PKG_CONFIG --exists --print-errors "gudev-1.0") 2>&5 ++ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"hal\"") >&5 ++ ($PKG_CONFIG --exists --print-errors "hal") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; 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:$LINENO: \$PKG_CONFIG --exists --print-errors \"gudev-1.0\"") >&5 +- ($PKG_CONFIG --exists --print-errors "gudev-1.0") 2>&5 ++ { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"hal\"") >&5 ++ ($PKG_CONFIG --exists --print-errors "hal") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; 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 +@@ -15778,29 +15778,29 @@ 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:$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:$LINENO: result: yes" >&5 + $as_echo "yes" >&6; } + + cat >>confdefs.h <<\_ACEOF +-#define HAVE_UDEV 1 ++#define HAVE_HAL 1 + _ACEOF + +- UDEV_PKG=gudev-1.0 ++ HAL_PKG=hal + fi + + { $as_echo "$as_me:$LINENO: checking operating system" >&5 +@@ -15815,7 +15815,7 @@ _ACEOF + + { $as_echo "$as_me:$LINENO: result: Linux" >&5 + $as_echo "Linux" >&6; } +- if test x$UDEV_PKG = "x" ; then ++ if test x$HAL_PKG = "x" ; then + { { $as_echo "$as_me:$LINENO: error: libgudev is required under Linux and not installed" >&5 + $as_echo "$as_me: error: libgudev is required under Linux and not installed" >&2;} + { (exit 1); exit 1; }; } +@@ -16213,7 +16213,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 \ +@@ -16229,7 +16229,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:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +@@ -16248,7 +16248,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 +@@ -16274,7 +16274,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 \ +@@ -16290,7 +16290,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:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then +@@ -16309,7 +16309,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 +@@ -16342,7 +16342,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 \ +@@ -16359,7 +16359,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 +@@ -16379,7 +16379,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 + +@@ -16405,7 +16405,7 @@ $as_echo "$as_me: error: Package require + 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 new file mode 100644 index 000000000000..05da52bbd4f6 --- /dev/null +++ b/multimedia/cheese/files/patch-libcheese_cheese-camera-device-monitor.c @@ -0,0 +1,436 @@ +--- libcheese/cheese-camera-device-monitor.c.orig 2010-03-29 16:27:42.000000000 -0400 ++++ libcheese/cheese-camera-device-monitor.c 2010-04-17 17:57:57.000000000 -0400 +@@ -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,79 @@ 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 (vendor, 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"); ++ GST_WARNING ("error getting V4L device for %s: %s: %s", udi, error.name, error.message); ++ dbus_error_free (&error); ++ libhal_free_string (product_name); + return; + } + +- /* 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) ++cheese_camera_device_monitor_removed (LibHalContext *ctx, ++ const char *udi) + { +- g_signal_emit (monitor, monitor_signals[REMOVED], 0, +- g_udev_device_get_property (udevice, "DEVPATH")); +-} ++ 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 +175,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) ++ GST_INFO ("Probing devices with HAL..."); ++ ++ if (priv->hal_ctx == NULL) + return; + +- GST_INFO ("Probing devices with udev..."); ++ dbus_error_init (&error); + +- devices = g_udev_client_query_by_subsystem (priv->client, "video4linux"); ++ udis = libhal_find_device_by_capability (priv->hal_ctx, "video4linux", &num_udis, &error); + +- /* Initialize camera structures */ +- for (l = devices; l != NULL; l = l->next) ++ 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 +308,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; + } + + /** diff --git a/multimedia/cheese/files/patch-src_cheese-webcam.c b/multimedia/cheese/files/patch-src_cheese-webcam.c deleted file mode 100644 index a0b5afd21161..000000000000 --- a/multimedia/cheese/files/patch-src_cheese-webcam.c +++ /dev/null @@ -1,40 +0,0 @@ ---- src/cheese-webcam.c.orig 2008-09-09 11:59:18.000000000 -0400 -+++ src/cheese-webcam.c 2008-09-09 12:01:14.000000000 -0400 -@@ -301,7 +301,9 @@ cheese_webcam_get_video_devices_from_hal - { - char *device; - char *gstreamer_src, *product_name; -+#ifdef VIDIOC_QUERYCAP - struct v4l2_capability v2cap; -+#endif - struct video_capability v1cap; - - device = libhal_device_get_property_string (hal_ctx, udis[i], "video4linux.device", &error); -@@ -327,7 +329,11 @@ cheese_webcam_get_video_devices_from_hal - libhal_free_string (device); - continue; - } -+#ifdef VIDIOC_QUERYCAP - ok = ioctl (fd, VIDIOC_QUERYCAP, &v2cap); -+#else -+ ok = -1; -+#endif - if (ok < 0) - { - ok = ioctl (fd, VIDIOCGCAP, &v1cap); -@@ -346,6 +352,7 @@ cheese_webcam_get_video_devices_from_hal - } - else - { -+#ifdef VIDIOC_QUERYCAP - guint cap = v2cap.capabilities; - g_print ("Detected v4l2 device: %s\n", v2cap.card); - g_print ("Driver: %s, version: %d\n", v2cap.driver, v2cap.version); -@@ -361,6 +368,7 @@ cheese_webcam_get_video_devices_from_hal - } - gstreamer_src = "v4l2src"; - product_name = (char *) v2cap.card; -+#endif - } - - priv->webcam_devices[priv->num_webcam_devices].hal_udi = g_strdup (udis[i]); diff --git a/multimedia/cheese/pkg-plist b/multimedia/cheese/pkg-plist index 361917ff7467..53ee71925ee2 100644 --- a/multimedia/cheese/pkg-plist +++ b/multimedia/cheese/pkg-plist @@ -1,4 +1,12 @@ bin/cheese +include/cheese/cheese-avatar-chooser.h +include/cheese/cheese-camera-device-monitor.h +include/cheese/cheese-widget.h +lib/libcheese-gtk.a +lib/libcheese-gtk.la +lib/libcheese-gtk.so +lib/libcheese-gtk.so.18 +libdata/pkgconfig/cheese-gtk.pc libexec/cheese/cheese-bugreport.sh share/applications/cheese.desktop %%DATADIR%%/cheese-prefs.ui @@ -32,25 +40,35 @@ share/applications/cheese.desktop %%DATADIR%%/icons/hicolor/48x48/actions/browse-webcam-effects.png %%DATADIR%%/icons/hicolor/48x48/actions/cheese-take-burst.png %%DATADIR%%/icons/hicolor/48x48/actions/cheese-take-photo.png +%%DATADIR%%/icons/hicolor/scalable/actions/browse-webcam-effects.svg %%DATADIR%%/icons/hicolor/scalable/actions/cheese-take-burst.svg %%DATADIR%%/icons/hicolor/scalable/actions/cheese-take-photo.svg -%%DATADIR%%/icons/hicolor/scalable/actions/browse-webcam-effects.svg %%DATADIR%%/pixmaps/camera-icon.svg %%DATADIR%%/pixmaps/cheese-1.svg %%DATADIR%%/pixmaps/cheese-2.svg %%DATADIR%%/pixmaps/cheese-3.svg %%DATADIR%%/pixmaps/thumbnail-frame.png -%%DATADIR%%/sounds/shutter0.ogg -%%DATADIR%%/sounds/shutter1.ogg -%%DATADIR%%/sounds/shutter2.ogg -%%DATADIR%%/sounds/shutter3.ogg -%%DATADIR%%/sounds/shutter4.ogg share/dbus-1/services/org.gnome.Cheese.service -%%PORTDOCS%%%%DOCSDIR%%/AUTHORS -%%PORTDOCS%%%%DOCSDIR%%/COPYING -%%PORTDOCS%%%%DOCSDIR%%/ChangeLog -%%PORTDOCS%%%%DOCSDIR%%/NEWS -%%PORTDOCS%%%%DOCSDIR%%/README +%%DOCSDIR%%/AUTHORS +%%DOCSDIR%%/COPYING +%%DOCSDIR%%/ChangeLog +%%DOCSDIR%%/CheeseAvatarChooser.html +%%DOCSDIR%%/CheeseCameraDeviceMonitor.html +%%DOCSDIR%%/CheeseWidget.html +%%DOCSDIR%%/NEWS +%%DOCSDIR%%/README +%%DOCSDIR%%/api-index-full.html +%%DOCSDIR%%/ch01.html +%%DOCSDIR%%/cheese.devhelp +%%DOCSDIR%%/cheese.devhelp2 +%%DOCSDIR%%/home.png +%%DOCSDIR%%/index.html +%%DOCSDIR%%/index.sgml +%%DOCSDIR%%/left.png +%%DOCSDIR%%/object-tree.html +%%DOCSDIR%%/right.png +%%DOCSDIR%%/style.css +%%DOCSDIR%%/up.png share/gnome/help/cheese/C/cheese.xml share/gnome/help/cheese/C/figures/cheese-effects.jpg share/gnome/help/cheese/C/figures/cheese-fullscreen.jpg @@ -66,6 +84,13 @@ share/gnome/help/cheese/ca/figures/cheese-main.jpg share/gnome/help/cheese/ca/figures/cheese-preferences.jpg share/gnome/help/cheese/ca/figures/cheese-share.jpg share/gnome/help/cheese/ca/figures/cheese-wide.jpg +share/gnome/help/cheese/cs/cheese.xml +share/gnome/help/cheese/cs/figures/cheese-effects.jpg +share/gnome/help/cheese/cs/figures/cheese-fullscreen.jpg +share/gnome/help/cheese/cs/figures/cheese-main.jpg +share/gnome/help/cheese/cs/figures/cheese-preferences.jpg +share/gnome/help/cheese/cs/figures/cheese-share.jpg +share/gnome/help/cheese/cs/figures/cheese-wide.jpg share/gnome/help/cheese/de/cheese.xml share/gnome/help/cheese/de/figures/cheese-effects.jpg share/gnome/help/cheese/de/figures/cheese-fullscreen.jpg @@ -180,6 +205,7 @@ share/locale/da/LC_MESSAGES/cheese.mo share/locale/de/LC_MESSAGES/cheese.mo share/locale/dz/LC_MESSAGES/cheese.mo share/locale/el/LC_MESSAGES/cheese.mo +share/locale/en@shaw/LC_MESSAGES/cheese.mo share/locale/en_GB/LC_MESSAGES/cheese.mo share/locale/es/LC_MESSAGES/cheese.mo share/locale/et/LC_MESSAGES/cheese.mo @@ -205,6 +231,7 @@ share/locale/mk/LC_MESSAGES/cheese.mo share/locale/ml/LC_MESSAGES/cheese.mo share/locale/mr/LC_MESSAGES/cheese.mo share/locale/nb/LC_MESSAGES/cheese.mo +share/locale/nds/LC_MESSAGES/cheese.mo share/locale/nl/LC_MESSAGES/cheese.mo share/locale/nn/LC_MESSAGES/cheese.mo share/locale/oc/LC_MESSAGES/cheese.mo @@ -232,6 +259,7 @@ share/locale/zh_HK/LC_MESSAGES/cheese.mo share/locale/zh_TW/LC_MESSAGES/cheese.mo share/omf/cheese/cheese-C.omf share/omf/cheese/cheese-ca.omf +share/omf/cheese/cheese-cs.omf share/omf/cheese/cheese-de.omf share/omf/cheese/cheese-el.omf share/omf/cheese/cheese-en_GB.omf @@ -274,13 +302,14 @@ share/omf/cheese/cheese-zh_CN.omf @dirrm share/gnome/help/cheese/el @dirrm share/gnome/help/cheese/de/figures @dirrm share/gnome/help/cheese/de +@dirrm share/gnome/help/cheese/cs/figures +@dirrm share/gnome/help/cheese/cs @dirrm share/gnome/help/cheese/ca/figures @dirrm share/gnome/help/cheese/ca @dirrm share/gnome/help/cheese/C/figures @dirrm share/gnome/help/cheese/C @dirrm share/gnome/help/cheese %%PORTDOCS%%@dirrm %%DOCSDIR%% -@dirrm %%DATADIR%%/sounds @dirrm %%DATADIR%%/pixmaps @dirrm %%DATADIR%%/icons/hicolor/scalable/actions @dirrm %%DATADIR%%/icons/hicolor/scalable @@ -300,6 +329,7 @@ share/omf/cheese/cheese-zh_CN.omf @dirrm %%DATADIR%% @dirrmtry share/applications @dirrm libexec/cheese +@dirrm include/cheese @dirrmtry share/locale/zh_HK/LC_MESSAGES @dirrmtry share/locale/zh_HK @dirrmtry share/locale/te/LC_MESSAGES @@ -310,12 +340,16 @@ share/omf/cheese/cheese-zh_CN.omf @dirrmtry share/locale/ps @dirrmtry share/locale/oc/LC_MESSAGES @dirrmtry share/locale/oc +@dirrmtry share/locale/nds/LC_MESSAGES +@dirrmtry share/locale/nds @dirrmtry share/locale/mr/LC_MESSAGES @dirrmtry share/locale/mr @dirrmtry share/locale/mai/LC_MESSAGES @dirrmtry share/locale/mai @dirrmtry share/locale/ku/LC_MESSAGES @dirrmtry share/locale/ku +@dirrmtry share/locale/en@shaw/LC_MESSAGES +@dirrmtry share/locale/en@shaw @dirrmtry share/locale/dz/LC_MESSAGES @dirrmtry share/locale/dz @dirrmtry share/locale/ca@valencia/LC_MESSAGES @@ -324,8 +358,6 @@ share/omf/cheese/cheese-zh_CN.omf @dirrmtry share/locale/bn_IN @dirrmtry share/locale/be@latin/LC_MESSAGES @dirrmtry share/locale/be@latin -@dirrmtry share/locale/be/LC_MESSAGES -@dirrmtry share/locale/be @dirrmtry share/locale/ast/LC_MESSAGES @dirrmtry share/locale/ast @dirrmtry share/locale/as/LC_MESSAGES |