This patch fixes the squealing at the start of certain podcasts (I think it was trying to play the id3v* tag). I sent it to the podboy author, but I never heard back when I sent the last patch.

Ben
Index: podboy/libplayer.py
===================================================================
--- podboy/libplayer.py	(revision 221)
+++ podboy/libplayer.py	(working copy)
@@ -58,7 +58,8 @@
 
         # MP3
         self.decoders.append(gst.element_factory_make("mad", "decode-mp3"))
-        self.demuxers.append(None)
+        self.demuxers.append(gst.element_factory_make("id3demux", "demux-id3"))
+        self.demuxers[MediaTypes.MP3].connect("pad-added", self.mp3_pad_added_cb)
 
         # OGG
         self.decoders.append(gst.element_factory_make("vorbisdec", "decode-ogg"))
@@ -103,12 +104,13 @@
             if self.media_type == MediaTypes.OGG:
                 self.pipeline.remove(self.decoders[MediaTypes.OGG], self.demuxers[MediaTypes.OGG])
             elif self.media_type == MediaTypes.MP3:
-                self.pipeline.remove(self.decoders[MediaTypes.MP3])
+                self.pipeline.remove(self.decoders[MediaTypes.MP3], self.demuxers[MediaTypes.MP3])
 
         # Next, build the correct pipeline
         if media_type == MediaTypes.MP3:
-            self.pipeline.add(self.source, self.decoders[MediaTypes.MP3], *self.elements[output_type])
-            gst.element_link_many(self.source, self.decoders[MediaTypes.MP3], *self.elements[output_type])
+            self.pipeline.add(self.source, self.demuxers[MediaTypes.MP3], self.decoders[MediaTypes.MP3], *self.elements[output_type])
+            gst.element_link_many(self.source, self.demuxers[MediaTypes.MP3])
+            gst.element_link_many(self.decoders[MediaTypes.MP3], *self.elements[output_type])
         elif media_type == MediaTypes.OGG:
             self.pipeline.add(
                 self.source, self.demuxers[MediaTypes.OGG], self.decoders[MediaTypes.OGG], *self.elements[output_type])
@@ -123,6 +125,11 @@
         if adec_pad and not adec_pad.is_linked():
             pad.link(adec_pad)
 
+    def mp3_pad_added_cb(self, demuxer, pad):                                   
+        adec_pad = self.decoders[MediaTypes.MP3].get_pad("sink")                
+        if adec_pad and not adec_pad.is_linked():                               
+            pad.link(adec_pad)                                                  
+
     def get_bus(self):
         """
         Returns the GStreamer bus attached to the player.
_______________________________________________
Shr-devel mailing list
Shr-devel@lists.shr-project.org
http://lists.shr-project.org/mailman/listinfo/shr-devel

Reply via email to