summaryrefslogtreecommitdiff
path: root/extensions/audio-video-properties
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2019-02-12 13:39:01 +0100
committerCarlos Soriano <csoriano1618+gnome@gmail.com>2019-02-13 10:17:54 +0000
commitf826da0fb2fb34d71a5755a78f7bffc3404641df (patch)
tree3be4ddf3343e6f16f5f5666df6670fdfe1960488 /extensions/audio-video-properties
parent76c287a184c4d942b64641b724858312f97a01a5 (diff)
downloadnautilus-f826da0fb2fb34d71a5755a78f7bffc3404641df.tar.gz
audio-video-properties: Add decoder disabler helper
(Re-)add a helper to disable decoders that require windowing environments to even be used while gathering metadata.
Diffstat (limited to 'extensions/audio-video-properties')
-rw-r--r--extensions/audio-video-properties/meson.build2
-rw-r--r--extensions/audio-video-properties/totem-gst-helpers.c97
-rw-r--r--extensions/audio-video-properties/totem-gst-helpers.h53
3 files changed, 152 insertions, 0 deletions
diff --git a/extensions/audio-video-properties/meson.build b/extensions/audio-video-properties/meson.build
index 4ac5cd87d..0b8dcdc7f 100644
--- a/extensions/audio-video-properties/meson.build
+++ b/extensions/audio-video-properties/meson.build
@@ -11,6 +11,7 @@ libtotem_properties_page_sources = files(
'totem-properties-main.c',
'totem-properties-view.c',
'bacon-video-widget-properties.c',
+ 'totem-gst-helpers.c',
) + resources
libtotem_properties_page_deps = [
@@ -35,6 +36,7 @@ test_properties_page_sources = files(
'totem-properties-main.c',
'totem-properties-view.c',
'bacon-video-widget-properties.c',
+ 'totem-gst-helpers.c',
'test-properties-page.c'
) + resources
diff --git a/extensions/audio-video-properties/totem-gst-helpers.c b/extensions/audio-video-properties/totem-gst-helpers.c
new file mode 100644
index 000000000..93b81398c
--- /dev/null
+++ b/extensions/audio-video-properties/totem-gst-helpers.c
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2003-2007 the GStreamer project
+ * Julien Moutte <julien@moutte.net>
+ * Ronald Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2005-2008 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2009 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * Copyright © 2009 Christian Persch
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include "totem-gst-helpers.h"
+
+#include <gst/tag/tag.h>
+#include <gst/video/video-format.h>
+
+void
+totem_gst_message_print (GstMessage *msg,
+ GstElement *play,
+ const char *filename)
+{
+ GError *err = NULL;
+ char *dbg = NULL;
+
+ g_return_if_fail (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ERROR);
+
+ if (play != NULL) {
+ g_return_if_fail (filename != NULL);
+
+ GST_DEBUG_BIN_TO_DOT_FILE (GST_BIN_CAST (play),
+ GST_DEBUG_GRAPH_SHOW_ALL ^ GST_DEBUG_GRAPH_SHOW_NON_DEFAULT_PARAMS,
+ filename);
+ }
+
+ gst_message_parse_error (msg, &err, &dbg);
+ if (err) {
+ char *uri;
+
+ g_object_get (play, "uri", &uri, NULL);
+ GST_ERROR ("message = %s", GST_STR_NULL (err->message));
+ GST_ERROR ("domain = %d (%s)", err->domain,
+ GST_STR_NULL (g_quark_to_string (err->domain)));
+ GST_ERROR ("code = %d", err->code);
+ GST_ERROR ("debug = %s", GST_STR_NULL (dbg));
+ GST_ERROR ("source = %" GST_PTR_FORMAT, msg->src);
+ GST_ERROR ("uri = %s", GST_STR_NULL (uri));
+ g_free (uri);
+
+ g_error_free (err);
+ }
+ g_free (dbg);
+}
+
+/* Disable decoders that require a display environment to work,
+ * and that might cause crashes */
+void
+totem_gst_disable_display_decoders (void)
+{
+ GstRegistry *registry;
+ const char *blacklisted_plugins[] = {
+ "bmcdec",
+ "vaapi",
+ "video4linux2"
+ };
+ guint i;
+
+ /* Disable the vaapi plugin as it will not work with the
+ * fakesink we use:
+ * See: https://bugzilla.gnome.org/show_bug.cgi?id=700186 and
+ * https://bugzilla.gnome.org/show_bug.cgi?id=749605 */
+ registry = gst_registry_get ();
+
+ for (i = 0; i < G_N_ELEMENTS (blacklisted_plugins); i++) {
+ GstPlugin *plugin =
+ gst_registry_find_plugin (registry,
+ blacklisted_plugins[i]);
+ if (plugin)
+ gst_registry_remove_plugin (registry, plugin);
+ }
+}
+
+/*
+ * vim: sw=2 ts=8 cindent noai bs=2
+ */
diff --git a/extensions/audio-video-properties/totem-gst-helpers.h b/extensions/audio-video-properties/totem-gst-helpers.h
new file mode 100644
index 000000000..edeeb1da6
--- /dev/null
+++ b/extensions/audio-video-properties/totem-gst-helpers.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2001,2002,2003,2004,2005 Bastien Nocera <hadess@hadess.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#ifndef HAVE_TOTEM_GST_HELPERS_H
+#define HAVE_TOTEM_GST_HELPERS_H
+
+#define GST_USE_UNSTABLE_API 1
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+/* GstPlayFlags flags from playbin */
+typedef enum {
+ GST_PLAY_FLAG_VIDEO = (1 << 0),
+ GST_PLAY_FLAG_AUDIO = (1 << 1),
+ GST_PLAY_FLAG_TEXT = (1 << 2),
+ GST_PLAY_FLAG_VIS = (1 << 3),
+ GST_PLAY_FLAG_SOFT_VOLUME = (1 << 4),
+ GST_PLAY_FLAG_NATIVE_AUDIO = (1 << 5),
+ GST_PLAY_FLAG_NATIVE_VIDEO = (1 << 6),
+ GST_PLAY_FLAG_DOWNLOAD = (1 << 7),
+ GST_PLAY_FLAG_BUFFERING = (1 << 8),
+ GST_PLAY_FLAG_DEINTERLACE = (1 << 9),
+ GST_PLAY_FLAG_SOFT_COLORBALANCE = (1 << 10),
+ GST_PLAY_FLAG_FORCE_FILTERS = (1 << 11),
+} GstPlayFlags;
+
+void totem_gst_message_print (GstMessage *msg,
+ GstElement *play,
+ const char *filename);
+
+void totem_gst_disable_display_decoders (void);
+
+G_END_DECLS
+
+#endif /* HAVE_TOTEM_GST_HELPERS_H */