fix (S)VCD playback by adding cdxa-unwrapper element
authorAndreas Frisch <andreas.frisch@multimedia-labs.de>
Sun, 12 Oct 2008 09:26:23 +0000 (09:26 +0000)
committerAndreas Frisch <andreas.frisch@multimedia-labs.de>
Sun, 12 Oct 2008 09:26:23 +0000 (09:26 +0000)
lib/python/Plugins/Extensions/MediaPlayer/plugin.py
lib/service/servicemp3.cpp

index 25491b67c767ce7124dac47f5ba9e5ac3d6e9271..6495e992b3a3f58b3d553e7b12aaf22e15b531ed 100644 (file)
@@ -64,7 +64,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB
                self.addPlaylistParser(PlaylistIOInternal, "e2pls")
 
                # 'None' is magic to start at the list of mountpoints
                self.addPlaylistParser(PlaylistIOInternal, "e2pls")
 
                # 'None' is magic to start at the list of mountpoints
-               self.filelist = FileList(None, matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|mkv)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
+               self.filelist = FileList(None, matchingPattern = "(?i)^.*\.(mp3|ogg|ts|wav|wave|m3u|pls|e2pls|mpg|vob|avi|mkv|dat)", useServiceRef = True, additionalExtensions = "4098:m3u 4098:e2pls 4098:pls")
                self["filelist"] = self.filelist
 
                self.playlist = MyPlayList()
                self["filelist"] = self.filelist
 
                self.playlist = MyPlayList()
index 76495826c9389ab1536be6dc8a11afd972c9c21b..3c17750d6ee3d05f3ecf06f36d559a3e7a78b2ae 100644 (file)
@@ -34,6 +34,7 @@ eServiceFactoryMP3::eServiceFactoryMP3()
                extensions.push_back("wave");
                extensions.push_back("mkv");
                extensions.push_back("avi");
                extensions.push_back("wave");
                extensions.push_back("mkv");
                extensions.push_back("avi");
+               extensions.push_back("dat");
                sc->addServiceFactory(eServiceFactoryMP3::id, this, extensions);
        }
 
                sc->addServiceFactory(eServiceFactoryMP3::id, this, extensions);
        }
 
@@ -203,8 +204,9 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp
        int is_video = is_mpeg_ps || is_mpeg_ts || is_matroska || is_avi;
        int is_streaming = !strncmp(filename, "http://", 7);
        int is_AudioCD = !(strncmp(filename, "/autofs/", 8) || strncmp(filename+strlen(filename)-13, "/track-", 7) || strcasecmp(ext, ".wav"));
        int is_video = is_mpeg_ps || is_mpeg_ts || is_matroska || is_avi;
        int is_streaming = !strncmp(filename, "http://", 7);
        int is_AudioCD = !(strncmp(filename, "/autofs/", 8) || strncmp(filename+strlen(filename)-13, "/track-", 7) || strcasecmp(ext, ".wav"));
+       int is_VCD = !strcasecmp(ext, ".dat");
        
        
-       eDebug("filename: %s, is_mpeg_ps: %d, is_mpeg_ts: %d, is_video: %d, is_streaming: %d, is_mp3: %d, is_matroska: %d, is_avi: %d, is_AudioCD: %d", filename, is_mpeg_ps, is_mpeg_ts, is_video, is_streaming, is_mp3, is_matroska, is_avi, is_AudioCD);
+       eDebug("filename: %s, is_mpeg_ps: %d, is_mpeg_ts: %d, is_video: %d, is_streaming: %d, is_mp3: %d, is_matroska: %d, is_avi: %d, is_AudioCD: %d, is_VCD: %d", filename, is_mpeg_ps, is_mpeg_ts, is_video, is_streaming, is_mp3, is_matroska, is_avi, is_AudioCD, is_VCD);
        
        int is_audio = !is_video;
 
        
        int is_audio = !is_video;
 
@@ -392,7 +394,16 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp
                                gst_bin_add(GST_BIN(m_gst_pipeline), switch_audio);
                                gst_element_link(switch_audio, queue_audio);
                        }
                                gst_bin_add(GST_BIN(m_gst_pipeline), switch_audio);
                                gst_element_link(switch_audio, queue_audio);
                        }
-                       gst_element_link(source, videodemux);
+
+                       if (is_VCD)
+                       {
+                               GstElement *cdxaparse = gst_element_factory_make("cdxaparse", "cdxaparse");
+                               gst_bin_add(GST_BIN(m_gst_pipeline), cdxaparse);
+                               gst_element_link(source, cdxaparse);
+                               gst_element_link(cdxaparse, videodemux);
+                       }
+                       else
+                               gst_element_link(source, videodemux);
                        gst_element_link(queue_audio, audio);
                        gst_element_link(queue_video, video);
                        g_signal_connect(videodemux, "pad-added", G_CALLBACK (gstCBpadAdded), this);
                        gst_element_link(queue_audio, audio);
                        gst_element_link(queue_video, video);
                        g_signal_connect(videodemux, "pad-added", G_CALLBACK (gstCBpadAdded), this);
@@ -845,7 +856,7 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg)
 
        source = GST_MESSAGE_SRC(msg);
        sourceName = gst_object_get_name(source);
 
        source = GST_MESSAGE_SRC(msg);
        sourceName = gst_object_get_name(source);
-
+#ifdef 0
        if (gst_message_get_structure(msg))
        {
                gchar *string = gst_structure_to_string(gst_message_get_structure(msg));
        if (gst_message_get_structure(msg))
        {
                gchar *string = gst_structure_to_string(gst_message_get_structure(msg));
@@ -854,7 +865,7 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg)
        }
        else
                eDebug("gst_message from %s: %s (without structure)", sourceName, GST_MESSAGE_TYPE_NAME(msg));
        }
        else
                eDebug("gst_message from %s: %s (without structure)", sourceName, GST_MESSAGE_TYPE_NAME(msg));
-
+#endif
        switch (GST_MESSAGE_TYPE (msg))
        {
        case GST_MESSAGE_EOS:
        switch (GST_MESSAGE_TYPE (msg))
        {
        case GST_MESSAGE_EOS: