[totem] backend: added audio converters



commit b8f8c66c8c634e689e81a83d80c624aca3a98888
Author: Carlos Rafael Giani <dv pseudoterminal org>
Date:   Fri Nov 2 23:35:20 2012 +0100

    backend: added audio converters
    
    This makes the backend more robust in case either playbin's internal
    decodebin does not produce supported audio formats, or the audio sink
    cannot playback with the produced audio format.
    
    Signed-off-by: Carlos Rafael Giani <dv pseudoterminal org>
    
    https://bugzilla.gnome.org/show_bug.cgi?id=687483

 src/backend/bacon-video-widget.c |   19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)
---
diff --git a/src/backend/bacon-video-widget.c b/src/backend/bacon-video-widget.c
index e017645..dc727d9 100644
--- a/src/backend/bacon-video-widget.c
+++ b/src/backend/bacon-video-widget.c
@@ -5947,7 +5947,7 @@ bacon_video_widget_initable_init (GInitable     *initable,
   gchar *version_str;
   GstPlayFlags flags;
   ClutterConstraint *constraint;
-  GstElement *audio_bin;
+  GstElement *audio_bin, *audio_converter;
   GstPad *audio_pad;
 
   bvw = BACON_VIDEO_WIDGET (initable);
@@ -5967,11 +5967,13 @@ bacon_video_widget_initable_init (GInitable     *initable,
 
   /* Instantiate all the fallible plugins */
   bvw->priv->play = element_make_or_warn ("playbin", "play");
+  audio_converter = element_make_or_warn ("audioconvert", "audio-converter");
   bvw->priv->audio_pitchcontrol = element_make_or_warn ("scaletempo", "scaletempo");
   video_sink = element_make_or_warn ("cluttersink", "video-sink");
   audio_sink = element_make_or_warn ("autoaudiosink", "audio-sink");
 
   if (!bvw->priv->play ||
+      !audio_converter ||
       !bvw->priv->audio_pitchcontrol ||
       !video_sink ||
       !audio_sink) {
@@ -5979,6 +5981,8 @@ bacon_video_widget_initable_init (GInitable     *initable,
       g_object_ref_sink (video_sink);
     if (audio_sink)
       g_object_ref_sink (audio_sink);
+    if (audio_converter)
+      g_object_ref_sink (audio_converter);
     g_set_error_literal (error, BVW_ERROR, BVW_ERROR_PLUGIN_LOAD,
 			 _("Some necessary plug-ins are missing. "
 			   "Make sure that the program is correctly installed."));
@@ -6062,14 +6066,17 @@ bacon_video_widget_initable_init (GInitable     *initable,
   bvw->priv->audio_capsfilter =
     gst_element_factory_make ("capsfilter", "audiofilter");
   audio_bin = gst_bin_new ("audiosinkbin");
-  gst_bin_add_many (GST_BIN (audio_bin), bvw->priv->audio_capsfilter,
-		    bvw->priv->audio_pitchcontrol, audio_sink, NULL);
+  gst_bin_add_many (GST_BIN (audio_bin), audio_converter,
+                    bvw->priv->audio_capsfilter,
+                    bvw->priv->audio_pitchcontrol, audio_sink, NULL);
+  gst_element_link_pads (audio_converter, "src",
+                         bvw->priv->audio_capsfilter, "sink");
   gst_element_link_pads (bvw->priv->audio_capsfilter, "src",
-			 bvw->priv->audio_pitchcontrol, "sink");
+                         bvw->priv->audio_pitchcontrol, "sink");
   gst_element_link_pads (bvw->priv->audio_pitchcontrol, "src",
-			 audio_sink, "sink");
+                         audio_sink, "sink");
 
-  audio_pad = gst_element_get_static_pad (bvw->priv->audio_capsfilter, "sink");
+  audio_pad = gst_element_get_static_pad (audio_converter, "sink");
   gst_element_add_pad (audio_bin, gst_ghost_pad_new ("sink", audio_pad));
   gst_object_unref (audio_pad);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]