7f0ad371b5
Copy from multimedia:xine/xine-lib based on submit request 30112 from user lnussel OBS-URL: https://build.opensuse.org/request/show/30112 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/xine-lib?expand=0&rev=28
274 lines
9.4 KiB
Diff
274 lines
9.4 KiB
Diff
Index: xine-lib-1.1.17/configure.ac
|
|
===================================================================
|
|
--- xine-lib-1.1.17.orig/configure.ac
|
|
+++ xine-lib-1.1.17/configure.ac
|
|
@@ -2613,6 +2613,28 @@ fi
|
|
|
|
AM_CONDITIONAL(HAVE_W32DLL, test "x$enable_w32dll" != "xno")
|
|
|
|
+dnl ---------------------------------------------
|
|
+dnl let distro override plugin install helper path
|
|
+dnl ---------------------------------------------
|
|
+AC_ARG_WITH(install-plugins-helper,
|
|
+ AC_HELP_STRING([--with-install-plugins-helper],
|
|
+ [specify path of helper script to call to install plugins]),
|
|
+ [
|
|
+ case "${withval}" in
|
|
+ yes) AC_MSG_ERROR(bad value ${withval} for --with-install-plugins-helper) ;;
|
|
+ no) AC_MSG_ERROR(bad value ${withval} for --with-install-plugins-helper) ;;
|
|
+ *) XINE_INSTALL_PLUGINS_HELPER="${withval}" ;;
|
|
+ esac
|
|
+ ],
|
|
+ [
|
|
+ dnl Default value
|
|
+ XINE_INSTALL_PLUGINS_HELPER="`makeexpand "${libexecdir}/xine-install-plugins-helper"`"
|
|
+ ]
|
|
+)
|
|
+AC_MSG_NOTICE(Using $XINE_INSTALL_PLUGINS_HELPER as plugin install helper)
|
|
+AC_DEFINE_UNQUOTED(XINE_INSTALL_PLUGINS_HELPER, "$XINE_INSTALL_PLUGINS_HELPER",
|
|
+ [plugin install helper script])
|
|
+AC_SUBST(XINE_INSTALL_PLUGINS_HELPER)
|
|
|
|
dnl ---------------------------------------------
|
|
dnl some include paths ( !!! DO NOT REMOVE !!! )
|
|
Index: xine-lib-1.1.17/src/xine-engine/audio_decoder.c
|
|
===================================================================
|
|
--- xine-lib-1.1.17.orig/src/xine-engine/audio_decoder.c
|
|
+++ xine-lib-1.1.17/src/xine-engine/audio_decoder.c
|
|
@@ -41,6 +41,7 @@
|
|
|
|
#include "xine_internal.h"
|
|
#include "xineutils.h"
|
|
+#include "install_plugins_helper.h"
|
|
|
|
static void *audio_decoder_loop (void *stream_gen) {
|
|
|
|
@@ -341,6 +342,10 @@ static void *audio_decoder_loop (void *s
|
|
|
|
_x_stream_info_set(stream, XINE_STREAM_INFO_AUDIO_HANDLED,
|
|
(stream->audio_decoder_plugin != NULL));
|
|
+
|
|
+ if(buf->type != buftype_unknown && !stream->audio_decoder_plugin)
|
|
+ _x_install_plugins_helper(stream,"decoder-audio", buf->type, _x_buf_audio_name( buf->type ));
|
|
+
|
|
}
|
|
|
|
if (audio_type != stream->audio_type) {
|
|
Index: xine-lib-1.1.17/src/xine-engine/install_plugins_helper.c
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ xine-lib-1.1.17/src/xine-engine/install_plugins_helper.c
|
|
@@ -0,0 +1,106 @@
|
|
+/*
|
|
+ * Copyright (C) 2007 Sascha Sommer
|
|
+ *
|
|
+ * This file is part of xine, a free video player.
|
|
+ *
|
|
+ * xine 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.
|
|
+ *
|
|
+ * xine 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
|
+ *
|
|
+ * helper functions to query the internet for additional plugins
|
|
+ */
|
|
+
|
|
+#ifdef HAVE_CONFIG_H
|
|
+#include "config.h"
|
|
+#endif
|
|
+#include <stdio.h>
|
|
+#include <unistd.h>
|
|
+#include <sys/wait.h>
|
|
+
|
|
+#include "install_plugins_helper.h"
|
|
+
|
|
+#define PROCNAME_LEN 100
|
|
+
|
|
+static const char *
|
|
+get_helper(xine_stream_t *stream)
|
|
+{
|
|
+ const char *helper;
|
|
+
|
|
+ helper = getenv("XINE_INSTALL_PLUGINS_HELPER");
|
|
+ if (helper == NULL)
|
|
+ helper = XINE_INSTALL_PLUGINS_HELPER;
|
|
+
|
|
+ xine_log (stream->xine, XINE_LOG_MSG,
|
|
+ _("Using plugin install helper '%s'"), helper);
|
|
+
|
|
+ return helper;
|
|
+}
|
|
+
|
|
+static void
|
|
+get_procname(char* procname, size_t len)
|
|
+{
|
|
+ char name[100];
|
|
+ FILE* fp;
|
|
+ size_t pos = 0;
|
|
+ snprintf(name, sizeof(name), "/proc/%u/cmdline", getpid());
|
|
+
|
|
+ fp = fopen(name,"rb");
|
|
+ if(fp){
|
|
+ while(fp && !feof(fp) && pos < sizeof(name)-1){
|
|
+ procname[pos] = fgetc(fp);
|
|
+ if(procname[pos] == ' ') /* ignore arguments */
|
|
+ break;
|
|
+ if(procname[pos] == '/') /* ignore the path to the executable */
|
|
+ pos = 0;
|
|
+ else
|
|
+ ++pos;
|
|
+ }
|
|
+ fclose(fp);
|
|
+ }
|
|
+ procname[pos] = '\0';
|
|
+}
|
|
+
|
|
+
|
|
+void _x_install_plugins_helper(xine_stream_t* stream,char* plugin_type, uint32_t id, char* plugin_desc)
|
|
+{
|
|
+ xine_cfg_entry_t cfgentry;
|
|
+ char* helper = get_helper(stream);
|
|
+ FILE* fp;
|
|
+
|
|
+ if(helper && xine_config_lookup_entry(stream->xine, "media.plugins_helper", &cfgentry) && cfgentry.num_value
|
|
+ && (fp = fopen(helper,"rb") )) {
|
|
+ char procname[PROCNAME_LEN];
|
|
+// char* procname = getenv("_"); /* might deliver /opt/kde3/bin/start_kdeinit_wrapper etc... */
|
|
+ pid_t pid;
|
|
+ fclose(fp);
|
|
+ get_procname(procname,PROCNAME_LEN);
|
|
+ pid = fork();
|
|
+ if(pid == 0) {
|
|
+ size_t len = 5 + strlen(XINE_VERSION) + 1 + strlen(procname) + 1 + strlen(plugin_desc) + 1 + strlen(plugin_type) + 1 + 100 + 1;
|
|
+ char* str = calloc(1,len + 1);
|
|
+ if(str){
|
|
+ snprintf(str,len,"xine|%s|%s|%s|%s=%u",XINE_VERSION,procname,plugin_desc,plugin_type,id);
|
|
+ if(execl(helper,"xine-install-plugins-helper",str, NULL) == -1)
|
|
+ xine_log(stream->xine, XINE_LOG_MSG,
|
|
+ _("Couldn't start plugins_helper"));
|
|
+ free(str);
|
|
+ }
|
|
+ }else if(pid < 0){
|
|
+ xine_log(stream->xine, XINE_LOG_MSG,
|
|
+ _("Couldn't fork"));
|
|
+ }else{
|
|
+ waitpid(pid, NULL, 0);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
Index: xine-lib-1.1.17/src/xine-engine/install_plugins_helper.h
|
|
===================================================================
|
|
--- /dev/null
|
|
+++ xine-lib-1.1.17/src/xine-engine/install_plugins_helper.h
|
|
@@ -0,0 +1,35 @@
|
|
+/*
|
|
+ * Copyright (C) 2007 Sascha Sommer
|
|
+ *
|
|
+ * This file is part of xine, a free video player.
|
|
+ *
|
|
+ * xine 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.
|
|
+ *
|
|
+ * xine 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
|
+ *
|
|
+ * helper functions to query the internet for additional codecs
|
|
+ */
|
|
+
|
|
+#ifndef PLUGINS_HELPER_H
|
|
+#define PLUGINS_HELPER_H
|
|
+
|
|
+#include <inttypes.h>
|
|
+#include "xine_internal.h"
|
|
+
|
|
+/*
|
|
+ * execute install plugins helper
|
|
+ */
|
|
+void _x_install_plugins_helper(xine_stream_t *stream, char* plugin_type, uint32_t type, char* plugin_desc) XINE_PROTECTED;
|
|
+
|
|
+
|
|
+#endif
|
|
Index: xine-lib-1.1.17/src/xine-engine/Makefile.am
|
|
===================================================================
|
|
--- xine-lib-1.1.17.orig/src/xine-engine/Makefile.am
|
|
+++ xine-lib-1.1.17/src/xine-engine/Makefile.am
|
|
@@ -19,7 +19,7 @@ libxine_la_SOURCES = xine.c metronom.c c
|
|
video_overlay.c osd.c scratch.c demux.c vo_scale.c \
|
|
xine_interface.c post.c tvmode.c broadcaster.c io_helper.c \
|
|
input_rip.c input_cache.c info_helper.c refcounter.c \
|
|
- alphablend.c
|
|
+ alphablend.c install_plugins_helper.c
|
|
|
|
# FIXME: these are currently unused:
|
|
EXTRA_DIST = lrb.c lrb.h accel_xvmc.h
|
|
@@ -39,7 +39,8 @@ xineinclude_HEADERS = buffer.h metronom
|
|
audio_out.h resample.h video_out.h xine_internal.h spu_decoder.h \
|
|
video_overlay.h osd.h scratch.h xine_plugin.h xineintl.h \
|
|
plugin_catalog.h audio_decoder.h video_decoder.h post.h \
|
|
- io_helper.h broadcaster.h info_helper.h refcounter.h alphablend.h
|
|
+ io_helper.h broadcaster.h info_helper.h refcounter.h alphablend.h \
|
|
+ install_plugins_helper.h
|
|
|
|
noinst_HEADERS = bswap.h ffmpeg_bswap.h
|
|
|
|
Index: xine-lib-1.1.17/src/xine-engine/video_decoder.c
|
|
===================================================================
|
|
--- xine-lib-1.1.17.orig/src/xine-engine/video_decoder.c
|
|
+++ xine-lib-1.1.17/src/xine-engine/video_decoder.c
|
|
@@ -37,6 +37,7 @@
|
|
|
|
#include "xine_internal.h"
|
|
#include "xineutils.h"
|
|
+#include "install_plugins_helper.h"
|
|
#include <sched.h>
|
|
|
|
#define SPU_SLEEP_INTERVAL (90000/2)
|
|
@@ -376,6 +377,10 @@ static void *video_decoder_loop (void *s
|
|
stream->video_decoder_plugin = _x_get_video_decoder (stream, streamtype);
|
|
|
|
_x_stream_info_set(stream, XINE_STREAM_INFO_VIDEO_HANDLED, (stream->video_decoder_plugin != NULL));
|
|
+ if(buf->type != buftype_unknown && !stream->video_decoder_plugin)
|
|
+ _x_install_plugins_helper(stream,"decoder-video", buf->type, _x_buf_video_name( buf->type ));
|
|
+
|
|
+
|
|
}
|
|
|
|
if (stream->video_decoder_plugin)
|
|
Index: xine-lib-1.1.17/src/xine-engine/xine.c
|
|
===================================================================
|
|
--- xine-lib-1.1.17.orig/src/xine-engine/xine.c
|
|
+++ xine-lib-1.1.17/src/xine-engine/xine.c
|
|
@@ -1809,6 +1809,15 @@ void xine_init (xine_t *this) {
|
|
0, NULL, this);
|
|
|
|
/*
|
|
+ * enable/disable option for the plugins helper
|
|
+ */
|
|
+ this->config->register_bool(this->config,
|
|
+ "media.plugins_helper", 1,
|
|
+ _("Run plugins helper"),
|
|
+ _("Searches the internet for missing plugins"),
|
|
+ 0, NULL, this);
|
|
+
|
|
+ /*
|
|
* keep track of all opened streams
|
|
*/
|
|
this->streams = xine_list_new();
|