summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPacho Ramos <pacho@gentoo.org>2021-08-25 15:27:12 +0200
committerPacho Ramos <pacho@gentoo.org>2021-08-25 15:27:12 +0200
commit80b26c2a7326cf9babddc39f0526de0eb3a0742b (patch)
tree7a0a780a6c5056c33eb72898166b4e3ccd6621cc /media-video
parentapp-accessibility/caribou: Apply more fixes from Fedora (diff)
downloadgentoo-80b26c2a7326cf9babddc39f0526de0eb3a0742b.tar.gz
gentoo-80b26c2a7326cf9babddc39f0526de0eb3a0742b.tar.bz2
gentoo-80b26c2a7326cf9babddc39f0526de0eb3a0742b.zip
media-video/cheese: Apply fixes from Fedora
Important fixes to get support for latest vala and solve important memory leaks Closes: https://bugs.gentoo.org/667350 Package-Manager: Portage-3.0.22, Repoman-3.0.3 Signed-off-by: Pacho Ramos <pacho@gentoo.org>
Diffstat (limited to 'media-video')
-rw-r--r--media-video/cheese/cheese-3.38.0-r1.ebuild97
-rw-r--r--media-video/cheese/files/cheese-3.38.0-Fix-infinite-loop-if-thumbnailer-is-not-available.patch88
-rw-r--r--media-video/cheese/files/cheese-3.38.0-vala-genericarray.patch177
3 files changed, 362 insertions, 0 deletions
diff --git a/media-video/cheese/cheese-3.38.0-r1.ebuild b/media-video/cheese/cheese-3.38.0-r1.ebuild
new file mode 100644
index 000000000000..9b233fac2198
--- /dev/null
+++ b/media-video/cheese/cheese-3.38.0-r1.ebuild
@@ -0,0 +1,97 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit gnome.org gnome2-utils meson vala virtualx xdg
+
+DESCRIPTION="A cheesy program to take pictures and videos from your webcam"
+HOMEPAGE="https://wiki.gnome.org/Apps/Cheese"
+
+LICENSE="GPL-2+"
+SLOT="0/8" # subslot = libcheese soname version
+KEYWORDS="~amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+IUSE="gtk-doc +introspection test"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+ >=media-libs/clutter-1.13.2:1.0[introspection?]
+ media-libs/clutter-gst:3.0
+ >=media-libs/clutter-gtk-0.91.8:1.0
+ x11-libs/gdk-pixbuf:2[jpeg,introspection?]
+ >=dev-libs/glib-2.39.90:2
+ >=gnome-base/gnome-desktop-2.91.6:3=
+ >=media-libs/gstreamer-1.4:1.0[introspection?]
+ >=media-libs/gst-plugins-base-1.4:1.0[ogg,pango,theora,vorbis]
+ >=media-libs/gst-plugins-bad-1.4:1.0
+ >=x11-libs/gtk+-3.13.4:3
+ >=media-libs/libcanberra-0.26[gtk3]
+ x11-libs/libX11
+ sys-apps/dbus
+ media-video/gnome-video-effects
+ introspection? ( >=dev-libs/gobject-introspection-1.56:= )
+
+ media-libs/cogl:1.0=[introspection?]
+
+"
+RDEPEND="${DEPEND}
+ >=media-libs/gst-plugins-good-1.4:1.0
+
+ >=media-plugins/gst-plugins-jpeg-1.4:1.0
+ >=media-plugins/gst-plugins-v4l2-1.4:1.0
+ >=media-plugins/gst-plugins-vpx-1.4:1.0
+"
+
+BDEPEND="
+ gtk-doc? ( dev-util/gtk-doc )
+ dev-libs/libxslt
+ app-text/docbook-xml-dtd:4.3
+ dev-util/itstool
+ dev-libs/appstream-glib
+ dev-libs/libxml2:2
+ dev-util/glib-utils
+ >=sys-devel/gettext-0.19.8
+ virtual/pkgconfig
+ x11-base/xorg-proto
+ test? ( x11-libs/libXtst )
+ $(vala_depend)
+"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-buildfix.patch
+ "${FILESDIR}"/${P}-Fix-infinite-loop-if-thumbnailer-is-not-available.patch
+ "${FILESDIR}"/${P}-vala-genericarray.patch
+)
+
+src_prepare() {
+ xdg_src_prepare
+ vala_src_prepare
+}
+
+src_configure() {
+ local emesonargs=(
+ $(meson_use gtk-doc gtk_doc)
+ $(meson_use introspection)
+ $(meson_use test tests)
+ -Dman=true
+ )
+
+ meson_src_configure
+
+ # Hack: version.xml is not generated if gtk-doc is not enabled
+ echo ${PV} > docs/reference/version.xml
+}
+
+src_test() {
+ virtx meson_src_test
+}
+
+pkg_postinst() {
+ xdg_pkg_postinst
+ gnome2_schemas_update
+}
+
+pkg_postrm() {
+ xdg_pkg_postrm
+ gnome2_schemas_update
+}
diff --git a/media-video/cheese/files/cheese-3.38.0-Fix-infinite-loop-if-thumbnailer-is-not-available.patch b/media-video/cheese/files/cheese-3.38.0-Fix-infinite-loop-if-thumbnailer-is-not-available.patch
new file mode 100644
index 000000000000..5a27eb6e7844
--- /dev/null
+++ b/media-video/cheese/files/cheese-3.38.0-Fix-infinite-loop-if-thumbnailer-is-not-available.patch
@@ -0,0 +1,88 @@
+From e7046d564a6f76c1af8f5640ac9c569e07284ec0 Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Fri, 18 Sep 2020 12:06:45 +0200
+Subject: [PATCH] Fix infinite loop if thumbnailer is not available
+
+The code in cheese_thumb_view_idle_append_item() in
+src/thumbview/cheese-thumb-view.c didn't pop the list of items to
+thumbnail if thumbnailing failed.
+
+ #0 0x00007f4a60e55314 in open64 () at /lib64/libc.so.6
+ #1 0x00007f4a60de6386 in _IO_file_open () at /lib64/libc.so.6
+ #2 0x00007f4a60de655a in __GI__IO_file_fopen () at /lib64/libc.so.6
+ #3 0x00007f4a60dd9aad in __fopen_internal () at /lib64/libc.so.6
+ #4 0x00007f4a6157a43f in gdk_pixbuf_new_from_file () at /lib64/libgdk_pixbuf-2.0.so.0
+ #5 0x00007f4a61e84b3a in gnome_desktop_thumbnail_factory_lookup () at /lib64/libgnome-desktop-3.so.19
+ #6 0x000055cef476046f in cheese_thumb_view_idle_append_item ()
+ #7 0x00007f4a6124f47b in g_idle_dispatch () at /lib64/libglib-2.0.so.0
+ #8 0x00007f4a612537af in g_main_context_dispatch () at /lib64/libglib-2.0.so.0
+ #9 0x00007f4a61253b38 in g_main_context_iterate.constprop () at /lib64/libglib-2.0.so.0
+ #10 0x00007f4a61253c03 in g_main_context_iteration () at /lib64/libglib-2.0.so.0
+ #11 0x00007f4a6146a7ca in g_application_run () at /lib64/libgio-2.0.so.0
+ #12 0x000055cef4758547 in _vala_main ()
+ #13 0x00007f4a60d8a042 in __libc_start_main () at /lib64/libc.so.6
+ #14 0x000055cef47554be in _start ()
+
+ #0 0x00007f4a60ec562d in __strlen_avx2 () at /lib64/libc.so.6
+ #1 0x00007f4a61275de8 in g_str_has_suffix () at /lib64/libglib-2.0.so.0
+ #2 0x00007f4a618c0072 in icon_name_is_symbolic () at /lib64/libgtk-3.so.0
+ #3 0x00007f4a618c00b1 in theme_dir_get_icon_suffix () at /lib64/libgtk-3.so.0
+ #4 0x00007f4a618c32ed in theme_lookup_icon () at /lib64/libgtk-3.so.0
+ #5 0x00007f4a618c3adf in real_choose_icon () at /lib64/libgtk-3.so.0
+ #6 0x00007f4a618c4762 in gtk_icon_theme_lookup_icon_for_scale () at /lib64/libgtk-3.so.0
+ #7 0x00007f4a618c5105 in gtk_icon_theme_load_icon_for_scale () at /lib64/libgtk-3.so.0
+ #8 0x000055cef47605c9 in cheese_thumb_view_idle_append_item ()
+ #9 0x00007f4a6124f47b in g_idle_dispatch () at /lib64/libglib-2.0.so.0
+ #10 0x00007f4a612537af in g_main_context_dispatch () at /lib64/libglib-2.0.so.0
+ #11 0x00007f4a61253b38 in g_main_context_iterate.constprop () at /lib64/libglib-2.0.so.0
+ #12 0x00007f4a61253c03 in g_main_context_iteration () at /lib64/libglib-2.0.so.0
+ #13 0x00007f4a6146a7d8 in g_application_run () at /lib64/libgio-2.0.so.0
+ #14 0x000055cef4758547 in _vala_main ()
+ #15 0x00007f4a60d8a042 in __libc_start_main () at /lib64/libc.so.6
+ #16 0x000055cef47554be in _start ()
+
+Closes: #81
+---
+ src/thumbview/cheese-thumb-view.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/thumbview/cheese-thumb-view.c b/src/thumbview/cheese-thumb-view.c
+index 1d2d88f5..232fd4b6 100644
+--- a/src/thumbview/cheese-thumb-view.c
++++ b/src/thumbview/cheese-thumb-view.c
+@@ -92,7 +92,7 @@ GtkWidget * cheese_thumb_view_new (void);
+ static gboolean
+ cheese_thumb_view_idle_append_item (gpointer data)
+ {
+- CheeseThumbViewIdleData *item = g_queue_peek_head (data);
++ CheeseThumbViewIdleData *item = g_queue_pop_head (data);
+ CheeseThumbView *thumb_view;
+ CheeseThumbViewPrivate *priv;
+
+@@ -119,6 +119,7 @@ cheese_thumb_view_idle_append_item (gpointer data)
+ if (!info)
+ {
+ g_warning ("Invalid filename\n");
++ g_slice_free (CheeseThumbViewIdleData, item);
+ return TRUE;
+ }
+ g_file_info_get_modification_time (info, &mtime);
+@@ -167,6 +168,7 @@ cheese_thumb_view_idle_append_item (gpointer data)
+ if (error)
+ {
+ g_warning ("%s", error->message);
++ g_slice_free (CheeseThumbViewIdleData, item);
+ return TRUE;
+ }
+ }
+@@ -183,7 +185,6 @@ cheese_thumb_view_idle_append_item (gpointer data)
+ g_object_unref (pixbuf);
+ g_object_unref (file);
+ g_slice_free (CheeseThumbViewIdleData, item);
+- g_queue_pop_head (data);
+
+ return TRUE;
+ }
+--
+2.28.0
+
diff --git a/media-video/cheese/files/cheese-3.38.0-vala-genericarray.patch b/media-video/cheese/files/cheese-3.38.0-vala-genericarray.patch
new file mode 100644
index 000000000000..dcbd1c1b2c5c
--- /dev/null
+++ b/media-video/cheese/files/cheese-3.38.0-vala-genericarray.patch
@@ -0,0 +1,177 @@
+From 7cf6268e54620bbbe5e6e61800c50fb0cb4bea57 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Corentin=20No=C3=ABl?= <corentin@elementary.io>
+Date: Fri, 16 Oct 2020 19:56:26 +0200
+Subject: [PATCH] Change GLib.PtrArray into GLib.GenericArray
+
+This is the vala-friendly way of handling GPtrArray.
+Fix several memory leaks on the go and unnecessary reference increase.
+---
+ src/cheese-preferences.vala | 26 ++++++++++++--------------
+ src/cheese-window.vala | 22 +++++++++++-----------
+ src/vapi/cheese-common.vapi | 2 +-
+ 3 files changed, 24 insertions(+), 26 deletions(-)
+
+diff --git a/src/cheese-preferences.vala b/src/cheese-preferences.vala
+index f56af7e0..80a92431 100644
+--- a/src/cheese-preferences.vala
++++ b/src/cheese-preferences.vala
+@@ -100,7 +100,7 @@ public PreferencesDialog (Cheese.Camera camera)
+ */
+ private void initialize_camera_devices ()
+ {
+- unowned GLib.PtrArray devices = camera.get_camera_devices ();
++ GLib.GenericArray<unowned Cheese.CameraDevice> devices = camera.get_camera_devices ();
+ camera_model = new Gtk.ListStore (2, typeof (string), typeof (Cheese.CameraDevice));
+
+ source_combo.model = camera_model;
+@@ -357,13 +357,13 @@ public PreferencesDialog (Cheese.Camera camera)
+ */
+ private void on_camera_update_num_camera_devices ()
+ {
+- unowned GLib.PtrArray devices = camera.get_camera_devices ();
+- Cheese.CameraDevice dev;
++ GLib.GenericArray<unowned Cheese.CameraDevice> devices = camera.get_camera_devices ();
++ unowned Cheese.CameraDevice dev;
+
+ // Add (if) / Remove (else) a camera device.
+- if (devices.len > camera_model.iter_n_children (null))
++ if (devices.length > camera_model.iter_n_children (null))
+ {
+- dev = (Cheese.CameraDevice) devices.index (devices.len - 1);
++ dev = devices.get (devices.length - 1);
+ add_camera_device(dev);
+ }
+ else
+@@ -382,12 +382,11 @@ public PreferencesDialog (Cheese.Camera camera)
+ bool device_removed = false;
+ devices.foreach ((device) =>
+ {
+- var old_device = (Cheese.CameraDevice) device;
+ Cheese.CameraDevice new_device;
+ camera_model.get (iter, 1, out new_device, -1);
+
+ // Found the device that was removed.
+- if (old_device != new_device)
++ if (device != new_device)
+ {
+ remove_camera_device (iter, new_device, active_device);
+ device_removed = true;
+@@ -418,17 +417,16 @@ public PreferencesDialog (Cheese.Camera camera)
+ *
+ * @param device a Cheese.CameraDevice to add to the device combo box model
+ */
+- private void add_camera_device (void *device)
++ private void add_camera_device (Cheese.CameraDevice device)
+ {
+ TreeIter iter;
+- Cheese.CameraDevice dev = (Cheese.CameraDevice) device;
+
+ camera_model.append (out iter);
+ camera_model.set (iter,
+- 0, dev.get_name (),
+- 1, dev);
++ 0, device.get_name (),
++ 1, device);
+
+- if (camera.get_selected_device () == dev)
++ if (camera.get_selected_device () == device)
+ source_combo.set_active_iter (iter);
+
+ if (camera_model.iter_n_children (null) > 1)
+@@ -445,12 +443,12 @@ public PreferencesDialog (Cheese.Camera camera)
+ private void remove_camera_device (TreeIter iter, Cheese.CameraDevice device_node,
+ Cheese.CameraDevice active_device_node)
+ {
+- unowned GLib.PtrArray devices = camera.get_camera_devices ();
++ GLib.GenericArray<unowned Cheese.CameraDevice> devices = camera.get_camera_devices ();
+
+ // Check if the camera that we want to remove, is the active one
+ if (device_node == active_device_node)
+ {
+- if (devices.len > 0)
++ if (devices.length > 0)
+ set_new_available_camera_device (iter);
+ else
+ this.hide ();
+diff --git a/src/cheese-window.vala b/src/cheese-window.vala
+index ff069808..cc119b68 100644
+--- a/src/cheese-window.vala
++++ b/src/cheese-window.vala
+@@ -1216,9 +1216,9 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+ */
+ public void on_switch_camera_clicked ()
+ {
+- Cheese.CameraDevice selected;
+- Cheese.CameraDevice next = null;
+- GLib.PtrArray cameras;
++ unowned Cheese.CameraDevice selected;
++ unowned Cheese.CameraDevice next = null;
++ GLib.GenericArray<unowned Cheese.CameraDevice> cameras;
+ uint i;
+
+ if (camera == null)
+@@ -1235,9 +1235,9 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+
+ cameras = camera.get_camera_devices ();
+
+- for (i = 0; i < cameras.len; i++)
++ for (i = 0; i < cameras.length; i++)
+ {
+- next = (Cheese.CameraDevice )cameras.index (i);
++ next = cameras.get (i);
+
+ if (next == selected)
+ {
+@@ -1245,13 +1245,13 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+ }
+ }
+
+- if (i + 1 < cameras.len)
++ if (i + 1 < cameras.length)
+ {
+- next = (Cheese.CameraDevice )cameras.index (i + 1);
++ next = cameras.get (i + 1);
+ }
+ else
+ {
+- next = (Cheese.CameraDevice )cameras.index (0);
++ next = cameras.get (0);
+ }
+
+ if (next == selected)
+@@ -1269,8 +1269,8 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+ */
+ public void set_switch_camera_button_state ()
+ {
+- Cheese.CameraDevice selected;
+- GLib.PtrArray cameras;
++ unowned Cheese.CameraDevice selected;
++ GLib.GenericArray<unowned Cheese.CameraDevice> cameras;
+
+ if (camera == null)
+ {
+@@ -1288,7 +1288,7 @@ public class Cheese.MainWindow : Gtk.ApplicationWindow
+
+ cameras = camera.get_camera_devices ();
+
+- if (cameras.len > 1)
++ if (cameras.length > 1)
+ {
+ switch_camera_button.set_visible (true);
+ return;
+diff --git a/src/vapi/cheese-common.vapi b/src/vapi/cheese-common.vapi
+index 6517cdfc..e4ae7ad3 100644
+--- a/src/vapi/cheese-common.vapi
++++ b/src/vapi/cheese-common.vapi
+@@ -35,7 +35,7 @@ namespace Cheese
+ [CCode (has_construct_function = false)]
+ public Camera (Clutter.Actor video_texture, string camera_device_node, int x_resolution, int y_resolution);
+ public bool get_balance_property_range (string property, double min, double max, double def);
+- public unowned GLib.PtrArray get_camera_devices ();
++ public GLib.GenericArray<unowned Cheese.CameraDevice> get_camera_devices ();
+ public unowned Cheese.VideoFormat get_current_video_format ();
+ public int get_num_camera_devices ();
+ public unowned Cheese.CameraDevice get_selected_device ();
+--
+GitLab
+