diff options
author | kwm <kwm@FreeBSD.org> | 2010-05-11 05:19:08 +0800 |
---|---|---|
committer | kwm <kwm@FreeBSD.org> | 2010-05-11 05:19:08 +0800 |
commit | 6a2a890c5cd397f9f0287409c2aa0244d50f3573 (patch) | |
tree | fc02bcba8bfa155b5cf452d6bafe1cb06aca4848 /multimedia/cheese | |
parent | 0e415a93a0424a4b284c88c39b19d93d80b66c8a (diff) | |
download | freebsd-ports-gnome-6a2a890c5cd397f9f0287409c2aa0244d50f3573.tar.gz freebsd-ports-gnome-6a2a890c5cd397f9f0287409c2aa0244d50f3573.tar.zst freebsd-ports-gnome-6a2a890c5cd397f9f0287409c2aa0244d50f3573.zip |
Presenting GNOME 2.30.1 for FreeBSD. The offical release notes for this
release can be found at http://library.gnome.org/misc/release-notes/2.30/ .
This release brings initial PackageKit support, Upower (replaces power
management part of hal), cuse4bsd integration with HAL and cheese, and a
faster Evolution.
Sadly GNOME 2.30.x will be the last release with FreeBSD 6.X support. This
will also be the last of the 2.x releases. The next release will be the
highly-anticipated GNOME 3.0 which will bring with it a new UI experience.
Currently, there are a few bugs with GNOME 2.30 that may be of note for our
users. Be sure to consult the UPGRADING note or the 2.30 upgrade FAQ at
http://www.freebsd.org/gnome/docs/faq230.html for specific upgrading
instructions, and the up-to-date list of known issues.
This release features commits by avl, ahze, bland, marcus, mezz, and myself.
The FreeBSD GNOME Team would like to thank Anders F Bjorklund for doing the
initual packagekit porting.
And the following contributors & testers for there help with this release:
Eric L. Chen
Vladimir Grebenschikov
Sergio de Almeida Lenzi
DomiX
walder
crsd
Kevin Oberman
Michal Varga
Pavel Plesov
Bapt
kevin
and ITetcu for two exp-run
PR: ports/143852
ports/145347
ports/144980
ports/145830
ports/145511
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 |