gnash-commit
[Top][All Lists]
Advanced

[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 {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]