X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/6f8827d31a18d8cbd1d8eb44f4911adc226bc321..337572d8d61c37c2121a96ec7ab79e191eaa2e29:/lib/service/servicemp3.cpp diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index d3957012..bbcb3b5c 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -284,9 +284,14 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp int ret = read(fd, tmp, 128*1024); close(fd); if ( ret == -1 ) // this is a "REAL" VCD + { source = gst_element_factory_make ("vcdsrc", "vcd-source"); if (source) + { g_object_set (G_OBJECT (source), "device", "/dev/cdroms/cdrom0", NULL); + eDebug("servicemp3: this is a 'REAL' video cd... we use vcdsrc !"); + } + } } if ( !source && !sourceinfo.is_streaming ) { @@ -491,7 +496,7 @@ eServiceMP3::eServiceMP3(const char *filename): m_filename(filename), m_pump(eAp if ( sourceinfo.containertype == ctVCD && gst_bin_get_by_name(GST_BIN(m_gst_pipeline),"file-source") ) { - eDebug("this is a fake video cd... we use filesrc ! cdxaparse !"); + eDebug("servicemp3: this is a fake video cd... we use filesrc ! cdxaparse !"); GstElement *cdxaparse = gst_element_factory_make("cdxaparse", "cdxaparse"); gst_bin_add(GST_BIN(m_gst_pipeline), cdxaparse); gst_element_link(source, cdxaparse); @@ -1042,11 +1047,21 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg) gst_message_parse_error (msg, &err, &debug); g_free (debug); - eWarning("Gstreamer error: %s (%i)", err->message, err->code ); - if ( err->domain == GST_STREAM_ERROR && err->code == GST_STREAM_ERROR_CODEC_NOT_FOUND ) + eWarning("Gstreamer error: %s (%i) from %s", err->message, err->code, sourceName ); + if ( err->domain == GST_STREAM_ERROR ) { - if ( g_strrstr(sourceName, "videosink") ) + if ( err->code == GST_STREAM_ERROR_CODEC_NOT_FOUND && g_strrstr(sourceName, "videosink") ) m_event((iPlayableService*)this, evUser+11); + else if ( err->code == GST_STREAM_ERROR_FAILED && g_strrstr(sourceName, "file-source") ) + { + eWarning("error in tag parsing, linking mp3parse directly to file-sink, bypassing id3demux..."); + GstElement *source = gst_bin_get_by_name(GST_BIN(m_gst_pipeline),"file-source"); + GstElement *parser = gst_bin_get_by_name(GST_BIN(m_gst_pipeline),"audiosink"); + gst_element_set_state(m_gst_pipeline, GST_STATE_NULL); + gst_element_unlink(source, gst_bin_get_by_name(GST_BIN(m_gst_pipeline),"id3demux")); + gst_element_link(source, parser); + gst_element_set_state (m_gst_pipeline, GST_STATE_PLAYING); + } } g_error_free(err); break;