[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog configure.ac server/asobj/NetSt...
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog configure.ac server/asobj/NetSt... |
Date: |
Mon, 18 Jun 2007 19:53:00 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/06/18 19:53:00
Modified files:
. : ChangeLog configure.ac
server/asobj : NetStreamGst.cpp
Log message:
Applied patch by Alexander Sack :
* configure.ac: detect usable pbutils for automatic
installation of
missing codecs.
* server/asobj/NetStreamGst.cpp: try installing missing codecs
as needed.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.3577&r2=1.3578
http://cvs.savannah.gnu.org/viewcvs/gnash/configure.ac?cvsroot=gnash&r1=1.343&r2=1.344
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/NetStreamGst.cpp?cvsroot=gnash&r1=1.54&r2=1.55
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.3577
retrieving revision 1.3578
diff -u -b -r1.3577 -r1.3578
--- ChangeLog 18 Jun 2007 09:33:05 -0000 1.3577
+++ ChangeLog 18 Jun 2007 19:52:59 -0000 1.3578
@@ -1,3 +1,10 @@
+2007-06-18 Alexander Sack <address@hidden>
+
+ * configure.ac: detect usable pbutils for automatic installation of
+ missing codecs.
+ * server/asobj/NetStreamGst.cpp: try installing missing codecs
+ as needed.
+
2007-06-18 Sandro Santilli <address@hidden>
* server/parser/: movie_def_impl.h, movie_definition.h,
Index: configure.ac
===================================================================
RCS file: /sources/gnash/gnash/configure.ac,v
retrieving revision 1.343
retrieving revision 1.344
diff -u -b -r1.343 -r1.344
--- configure.ac 14 Jun 2007 09:43:17 -0000 1.343
+++ configure.ac 18 Jun 2007 19:52:59 -0000 1.344
@@ -15,7 +15,7 @@
dnl Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
dnl
-dnl $Id: configure.ac,v 1.343 2007/06/14 09:43:17 strk Exp $
+dnl $Id: configure.ac,v 1.344 2007/06/18 19:52:59 strk Exp $
AC_PREREQ(2.50)
AC_INIT(gnash, cvs)
@@ -907,6 +907,20 @@
AC_MSG_WARN([No appropriate gstreamer library found, will try using
mad.])
media_handler=mad
fi
+ else
+ AC_MSG_CHECKING([for modern pbutils])
+ save_cflags=$CFLAGS
+ CFLAGS=$GSTREAMER_CFLAGS
+ AC_TRY_COMPILE([#include <gst/pbutils/install-plugins.h>],[void* pointer =
&gst_install_plugins_sync],
+ GSTREAMER_LIBS="$GSTREAMER_LIBS -lgstpbutils-0.10",
+ has_modern_gstpbutils='no')]
+ CFLAGS=$save_cflags
+ if test x$has_modern_gstpbutils = xno; then
+ AC_MSG_RESULT([no {GSTREAMER_CFLAGS=$GSTREAMER_CFLAGS}])
+ else
+ AC_DEFINE([GST_HAS_MODERN_PBUTILS], [], [GStreamer has pbutils with
missing codec install routines installed])
+ AC_MSG_RESULT([ok])
+ fi
fi
fi
Index: server/asobj/NetStreamGst.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/NetStreamGst.cpp,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -b -r1.54 -r1.55
--- server/asobj/NetStreamGst.cpp 4 Jun 2007 20:55:14 -0000 1.54
+++ server/asobj/NetStreamGst.cpp 18 Jun 2007 19:53:00 -0000 1.55
@@ -17,7 +17,7 @@
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
-/* $Id: NetStreamGst.cpp,v 1.54 2007/06/04 20:55:14 strk Exp $ */
+/* $Id: NetStreamGst.cpp,v 1.55 2007/06/18 19:53:00 strk Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -37,6 +37,11 @@
#include "gstgnashsrc.h"
+#ifdef GST_HAS_MODERN_PBUTILS
+#include <gst/pbutils/missing-plugins.h>
+#include <gst/pbutils/install-plugins.h>
+#endif // GST_HAS_MODERN_PBUTILS
+
#include "URL.h"
// Define the following macro to enable debugging traces
@@ -525,6 +530,91 @@
}
+#ifdef GST_HAS_MODERN_PBUTILS
+
+static void
+GstInstallPluginsResultCb (GstInstallPluginsReturn result,
+ gpointer user_data)
+{
+ g_debug("JAU RESULTO MENDO");
+}
+
+
+static gboolean
+NetStreamGst_install_missing_codecs(GList *missing_plugin_details)
+{
+
+ GstInstallPluginsReturn rv;
+ int i,c;
+ gchar **details = g_new0(gchar*, c+1);
+ GstInstallPluginsContext *install_ctx = gst_install_plugins_context_new();
+
+ c=g_list_length(missing_plugin_details);
+
+ for(i=0; i < c; i++)
+ {
+ details[i] = (gchar*) g_list_nth_data(missing_plugin_details, i);
+ }
+
+ rv = gst_install_plugins_sync (details,
+ install_ctx);
+
+ g_strfreev(details);
+
+ switch(rv) {
+ case GST_INSTALL_PLUGINS_SUCCESS:
+ if(!gst_update_registry())
+ g_warning("we failed to update gst registry for new codecs");
+ else
+ return true;
+ break;
+ case GST_INSTALL_PLUGINS_NOT_FOUND:
+ g_debug("gst_install_plugins_sync -> GST_INSTALL_PLUGINS_NOT_FOUND");
+ break;
+ case GST_INSTALL_PLUGINS_ERROR:
+ g_debug("gst_install_plugins_sync -> GST_INSTALL_PLUGINS_ERROR");
+ break;
+ case GST_INSTALL_PLUGINS_PARTIAL_SUCCESS:
+ g_debug("gst_install_plugins_sync -> GST_INSTALL_PLUGINS_PARTIAL_SUCCESS");
+ break;
+ case GST_INSTALL_PLUGINS_USER_ABORT:
+ g_debug("gst_install_plugins_sync -> GST_INSTALL_PLUGINS_USER_ABORT");
+ break;
+ case GST_INSTALL_PLUGINS_CRASHED:
+ g_debug("gst_install_plugins_sync -> GST_INSTALL_PLUGINS_CRASHED");
+ break;
+ case GST_INSTALL_PLUGINS_INVALID:
+ g_warning("gst_install_plugins_sync -> GST_INSTALL_PLUGINS_INVALID");
+ break;
+ default:
+ g_warning("gst_install_plugins_sync -> UNEXPECTED RESULT (undocumented
value)");
+ break;
+ };
+
+ return false;
+}
+
+static GList*
+NetStreamGst_append_missing_codec_to_details (GList *list,
+ GstElement *source,
+ const GstCaps* caps)
+{
+ GstMessage *missing_msg;
+ missing_msg = gst_missing_decoder_message_new(source,
+ caps);
+ gchar* detail =
gst_missing_plugin_message_get_installer_detail(missing_msg);
+
+ if(!detail)
+ {
+ g_warning("missing message details not found. No details added.");
+ return list;
+ }
+
+ return g_list_append(list, detail);
+}
+
+#endif // GST_HAS_MODERN_PBUTILS
+
bool
NetStreamGst::buildFLVVideoPipeline(bool &video)
{
@@ -536,6 +626,8 @@
bool doVideo = video;
+ GList *missing_plugin_details = NULL;
+ retry:
if (videoInfo) {
doVideo = true;
videosource = gst_element_factory_make ("fakesrc", NULL);
@@ -578,13 +670,15 @@
if ( ! videodecoder )
{
log_error("Unable to create videodecoder
'ffdec_flv' element");
- return false;
- }
- // Check if the element was correctly created
- if (!videodecoder) {
- log_error(_("A gstreamer flashvideo (h.263)
decoder element could not be created. You probably need to install
gst-ffmpeg."));
+#ifdef GST_HAS_MODERN_PBUTILS
+ missing_plugin_details =
NetStreamGst_append_missing_codec_to_details
+ (missing_plugin_details,
+ videosource,
+ videonincaps);
+#else // GST_HAS_MODERN_PBUTILS
return false;
+#endif // GST_HAS_MODERN_PBUTILS
}
} else if (videoInfo->codec == VIDEO_CODEC_VP6) {
@@ -597,13 +691,15 @@
if ( ! videodecoder )
{
log_error("Unable to create videodecoder
'ffdec_vp6f' element");
- return false;
- }
- // Check if the element was correctly created
- if (!videodecoder) {
- log_error(_("A gstreamer flashvideo (VP6)
decoder element could not be created! You probably need to install
gst-ffmpeg."));
+#ifdef GST_HAS_MODERN_PBUTILS
+ missing_plugin_details =
NetStreamGst_append_missing_codec_to_details
+ (missing_plugin_details,
+ videosource,
+ videonincaps);
+#else // GST_HAS_MODERN_PBUTILS
return false;
+#endif // GST_HAS_MODERN_PBUTILS
}
} else if (videoInfo->codec == VIDEO_CODEC_SCREENVIDEO) {
@@ -617,7 +713,15 @@
// Check if the element was correctly created
if (!videodecoder) {
log_error(_("A gstreamer flashvideo
(ScreenVideo) decoder element could not be created! You probably need to
install gst-ffmpeg."));
+
+#ifdef GST_HAS_MODERN_PBUTILS
+ missing_plugin_details =
NetStreamGst_append_missing_codec_to_details
+ (missing_plugin_details,
+ videosource,
+ videonincaps);
+#else // GST_HAS_MODERN_PBUTILS
return false;
+#endif // GST_HAS_MODERN_PBUTILS
}
} else {
@@ -625,13 +729,36 @@
return false;
}
+ if(g_list_length(missing_plugin_details) == 0)
+ {
g_object_set (G_OBJECT (videoinputcaps), "caps", videonincaps,
NULL);
gst_caps_unref (videonincaps);
}
- video = doVideo;
+ }
+
+#ifdef GST_HAS_MODERN_PBUTILS
+ if(g_list_length(missing_plugin_details) == 0)
+ {
+ g_debug("no missing plugins found");
+ video = doVideo;
return true;
+ }
+ g_debug("try to install missing plugins (count=%d)",
g_list_length(missing_plugin_details));
+ if(NetStreamGst_install_missing_codecs(missing_plugin_details))
+ {
+ disconnectVideoHandoffSignal();
+ g_list_free(missing_plugin_details);
+ missing_plugin_details = NULL;
+ g_debug("gst_install_plugins_sync -> GST_INSTALL_PLUGINS_SUCCESS ...
one more roundtrip");
+ goto retry;
+ }
+ g_list_free(missing_plugin_details);
+ return false;
+#else // GST_HAS_MODERN_PBUTILS
+ return true;
+#endif // GST_HAS_MODERN_PBUTILS
}
bool
@@ -642,6 +769,10 @@
FLVAudioInfo* audioInfo = m_parser->getAudioInfo();
if (!audioInfo) doSound = false;
+#ifdef GST_HAS_MODERN_PBUTILS
+ GList *missing_plugin_details = NULL;
+ retry:
+#endif
if (doSound) {
#ifdef GNASH_DEBUG
@@ -677,7 +808,6 @@
if (!audiodecoder)
{
log_error(_("A gstreamer mp3-decoder
element could not be created! You probably need to install a mp3-decoder plugin
like gstreamer0.10-mad or gstreamer0.10-fluendo-mp3."));
- return false;
}
}
@@ -695,6 +825,28 @@
"layer", G_TYPE_INT, 3,
"rate", G_TYPE_INT, audioInfo->sampleRate,
"channels", G_TYPE_INT, audioInfo->stereo ? 2 :
1, NULL);
+
+ if(!audiodecoder)
+ {
+#ifdef GST_HAS_MODERN_PBUTILS
+ missing_plugin_details =
NetStreamGst_append_missing_codec_to_details
+ (missing_plugin_details,
+ audiosource,
+ audioincaps);
+
+
if(NetStreamGst_install_missing_codecs(missing_plugin_details))
+ {
+ disconnectAudioHandoffSignal();
+ g_list_free(missing_plugin_details);
+ missing_plugin_details = NULL;
+ g_debug("gst_install_plugins_sync ->
GST_INSTALL_PLUGINS_SUCCESS ... one more roundtrip");
+ goto retry;
+ }
+
+ g_list_free(missing_plugin_details);
+#endif // GST_HAS_MODERN_PBUTILS
+ return false;
+ }
g_object_set (G_OBJECT (audioinputcaps), "caps",
audioincaps, NULL);
gst_caps_unref (audioincaps);
} else {
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog configure.ac server/asobj/NetSt...,
Sandro Santilli <=