Files
main/multimedia/video/gstreamer/files/wrapper-plugins.patch
T
2015-06-19 13:38:15 +03:00

180 lines
6.1 KiB
Diff

diff -Nur gstreamer-0.10.32.4-old//gst/gstplugin.c gstreamer-0.10.32.4/gst/gstplugin.c
--- gstreamer-0.10.32.4-old//gst/gstplugin.c 2011-05-03 10:00:04.763000288 +0300
+++ gstreamer-0.10.32.4/gst/gstplugin.c 2011-05-03 10:02:15.244000278 +0300
@@ -68,6 +68,8 @@
#include <gst/gst.h>
+#include <glob.h>
+
#define GST_CAT_DEFAULT GST_CAT_PLUGIN_LOADING
static guint _num_static_plugins; /* 0 */
@@ -753,6 +755,74 @@
goto return_error;
}
+ /* Workarounds for all known plugins that might have changed features
+ * although the plugin timestamp didn't change */
+
+ /* GnomeVFS */
+ if (g_str_has_suffix (filename, "/libgstgnomevfs.so")) {
+ struct stat tmp_status;
+
+ if (!g_stat (LIBDIR "/gnome-vfs-2.0/modules", &tmp_status)) {
+ file_status.st_mtime = MAX (file_status.st_mtime, tmp_status.st_mtime);
+ }
+ }
+
+ /* LADSPA */
+ if (g_str_has_suffix (filename, "/libgstladspa.so")) {
+ struct stat tmp_status;
+
+ if (!g_stat (LIBDIR "/ladspa", &tmp_status)) {
+ file_status.st_mtime = MAX (file_status.st_mtime, tmp_status.st_mtime);
+ }
+ }
+
+ /* libvisual */
+ if (g_str_has_suffix (filename, "/libgstlibvisual.so")) {
+ struct stat tmp_status;
+
+ if (!g_stat (LIBDIR "/libvisual-0.4", &tmp_status)) {
+ GDir *dir;
+ const gchar *file;
+
+ file_status.st_mtime = MAX (file_status.st_mtime, tmp_status.st_mtime);
+ dir = g_dir_open (LIBDIR "/libvisual-0.4", 0, NULL);
+ if (dir) {
+ while ((file = g_dir_read_name (dir))) {
+ gchar *filename = g_strdup_printf (LIBDIR "/libvisual-0.4/%s", file);
+
+ if (!g_stat (filename, &tmp_status)) {
+ file_status.st_mtime =
+ MAX (file_status.st_mtime, tmp_status.st_mtime);
+ }
+ g_free (filename);
+ }
+ g_dir_close (dir);
+ }
+ }
+ }
+
+ /* FFMPEG */
+ if (g_str_has_suffix (filename, "/libgstffmpeg.so") ||
+ g_str_has_suffix (filename, "/libgstpostproc.so")) {
+ struct stat tmp_status;
+ glob_t gl = { 0, };
+ int i;
+
+ glob (LIBDIR "/libavcodec.so.*.*", GLOB_NOSORT, NULL, &gl);
+ glob (LIBDIR "/libavutil.so.*.*", GLOB_APPEND | GLOB_NOSORT, NULL, &gl);
+ glob (LIBDIR "/libavformat.so.*.*", GLOB_APPEND | GLOB_NOSORT, NULL, &gl);
+ glob (LIBDIR "/libpostproc.so.*.*", GLOB_APPEND | GLOB_NOSORT, NULL, &gl);
+ glob (LIBDIR "/libswscale.so.*.*", GLOB_APPEND | GLOB_NOSORT, NULL, &gl);
+
+ for (i = 0; i < gl.gl_pathc; i++) {
+ if (!g_stat (gl.gl_pathv[i], &tmp_status)) {
+ file_status.st_mtime = MAX (file_status.st_mtime, tmp_status.st_mtime);
+ }
+ }
+
+ globfree (&gl);
+ }
+
flags = G_MODULE_BIND_LOCAL;
/* libgstpython.so is the gst-python plugin loader. It needs to be loaded with
* G_MODULE_BIND_LAZY.
diff -Nur gstreamer-0.10.32.4-old//gst/gstregistry.c gstreamer-0.10.32.4/gst/gstregistry.c
--- gstreamer-0.10.32.4-old//gst/gstregistry.c 2011-05-03 10:00:04.770000288 +0300
+++ gstreamer-0.10.32.4/gst/gstregistry.c 2011-05-03 10:00:25.707000262 +0300
@@ -142,6 +142,8 @@
extern HMODULE _priv_gst_dll_handle;
#endif
+#include <glob.h>
+
#define GST_CAT_DEFAULT GST_CAT_REGISTRY
struct _GstRegistryPrivate
@@ -1203,6 +1205,79 @@
* update the plugin to ensure the registry cache will reflect up
* to date information */
+ /* Workarounds for all known plugins that might have changed features
+ * although the plugin timestamp didn't change */
+
+ /* GnomeVFS */
+ if (g_str_has_suffix (filename, "/libgstgnomevfs.so")) {
+ struct stat tmp_status;
+
+ if (!g_stat (LIBDIR "/gnome-vfs-2.0/modules", &tmp_status)) {
+ file_status.st_mtime =
+ MAX (file_status.st_mtime, tmp_status.st_mtime);
+ }
+ }
+
+ /* LADSPA */
+ if (g_str_has_suffix (filename, "/libgstladspa.so")) {
+ struct stat tmp_status;
+
+ if (!g_stat (LIBDIR "/ladspa", &tmp_status)) {
+ file_status.st_mtime =
+ MAX (file_status.st_mtime, tmp_status.st_mtime);
+ }
+ }
+
+ /* libvisual */
+ if (g_str_has_suffix (filename, "/libgstlibvisual.so")) {
+ struct stat tmp_status;
+
+ if (!g_stat (LIBDIR "/libvisual-0.4", &tmp_status)) {
+ GDir *dir;
+ const gchar *file;
+
+ file_status.st_mtime =
+ MAX (file_status.st_mtime, tmp_status.st_mtime);
+ dir = g_dir_open (LIBDIR "/libvisual-0.4", 0, NULL);
+ if (dir) {
+ while ((file = g_dir_read_name (dir))) {
+ gchar *filename =
+ g_strdup_printf (LIBDIR "/libvisual-0.4/%s", file);
+
+ if (!g_stat (filename, &tmp_status)) {
+ file_status.st_mtime =
+ MAX (file_status.st_mtime, tmp_status.st_mtime);
+ }
+ g_free (filename);
+ }
+ g_dir_close (dir);
+ }
+ }
+ }
+
+ /* FFMPEG */
+ if (g_str_has_suffix (filename, "/libgstffmpeg.so") ||
+ g_str_has_suffix (filename, "/libgstpostproc.so")) {
+ struct stat tmp_status;
+ glob_t gl = { 0, };
+ int i;
+
+ glob (LIBDIR "/libavcodec.so.*.*", GLOB_NOSORT, NULL, &gl);
+ glob (LIBDIR "/libavutil.so.*.*", GLOB_APPEND | GLOB_NOSORT, NULL, &gl);
+ glob (LIBDIR "/libavformat.so.*.*", GLOB_APPEND | GLOB_NOSORT, NULL, &gl);
+ glob (LIBDIR "/libpostproc.so.*.*", GLOB_APPEND | GLOB_NOSORT, NULL, &gl);
+ glob (LIBDIR "/libswscale.so.*.*", GLOB_APPEND | GLOB_NOSORT, NULL, &gl);
+
+ for (i = 0; i < gl.gl_pathc; i++) {
+ if (!g_stat (gl.gl_pathv[i], &tmp_status)) {
+ file_status.st_mtime =
+ MAX (file_status.st_mtime, tmp_status.st_mtime);
+ }
+ }
+
+ globfree (&gl);
+ }
+
if (plugin->file_mtime == file_status.st_mtime &&
plugin->file_size == file_status.st_size && !env_vars_changed &&
!(deps_changed = _priv_plugin_deps_files_changed (plugin)) &&