X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/11e416ae02c53daa3841096e9792804f3d0e51dd..9a47cf98658ea064ce5cb7ddbd5f22d4ecbc36ac:/lib/service/servicemp3.cpp diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index e33425d4..73a12430 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -17,6 +17,12 @@ /* for subtitles */ #include +#ifndef GST_SEEK_FLAG_SKIP +#warning Compiling for legacy gstreamer, things will break +#define GST_SEEK_FLAG_SKIP 0 +#define GST_TAG_HOMEPAGE "" +#endif + // eServiceFactoryMP3 eServiceFactoryMP3::eServiceFactoryMP3() @@ -354,7 +360,7 @@ RESULT eServiceMP3::connectEvent(const Slot2 &event, RESULT eServiceMP3::start() { - assert(m_state == stIdle); + ASSERT(m_state == stIdle); m_state = stRunning; if (m_gst_playbin) @@ -368,7 +374,7 @@ RESULT eServiceMP3::start() RESULT eServiceMP3::stop() { - assert(m_state != stIdle); + ASSERT(m_state != stIdle); if (m_state == stStopped) return -1; eDebug("eServiceMP3::stop %s", m_filename.c_str()); @@ -427,7 +433,7 @@ void eServiceMP3::seekTimeoutCB() // iPausableService RESULT eServiceMP3::pause() { - if (!m_gst_playbin) + if (!m_gst_playbin || m_state != stRunning) return -1; GstStateChangeReturn res = gst_element_set_state(m_gst_playbin, GST_STATE_PAUSED); if (res == GST_STATE_CHANGE_ASYNC) @@ -441,7 +447,8 @@ RESULT eServiceMP3::pause() RESULT eServiceMP3::unpause() { - if (!m_gst_playbin) + m_subtitle_pages.clear(); + if (!m_gst_playbin || m_state != stRunning) return -1; GstStateChangeReturn res; @@ -476,6 +483,8 @@ RESULT eServiceMP3::getLength(pts_t &pts) RESULT eServiceMP3::seekTo(pts_t to) { + m_subtitle_pages.clear(); + if (!m_gst_playbin) return -1; @@ -600,7 +609,7 @@ RESULT eServiceMP3::getName(std::string &name) int eServiceMP3::getInfo(int w) { - gchar *tag = 0; + const gchar *tag = 0; switch (w) { @@ -699,9 +708,9 @@ int eServiceMP3::getInfo(int w) std::string eServiceMP3::getInfoString(int w) { - if ( !m_stream_tags ) + if ( !m_stream_tags && w < sUser && w > 26 ) return ""; - gchar *tag = 0; + const gchar *tag = 0; switch (w) { case sTagTitle: @@ -797,7 +806,6 @@ std::string eServiceMP3::getInfoString(int w) case sTagChannelMode: tag = "channel-mode"; break; - case sUser+12: return m_error_message; default: @@ -817,7 +825,7 @@ std::string eServiceMP3::getInfoString(int w) PyObject *eServiceMP3::getInfoObject(int w) { - gchar *tag = 0; + const gchar *tag = 0; bool isBuffer = false; switch (w) { @@ -1036,7 +1044,7 @@ void eServiceMP3::gstBusCall(GstBus *bus, GstMessage *msg) GstTagList *tags, *result; gst_message_parse_tag(msg, &tags); - result = gst_tag_list_merge(m_stream_tags, tags, GST_TAG_MERGE_PREPEND); + result = gst_tag_list_merge(m_stream_tags, tags, GST_TAG_MERGE_REPLACE); if (result) { if (m_stream_tags) @@ -1125,6 +1133,7 @@ eDebug("AUDIO STRUCT=%s", g_type); g_free (g_lang); // g_free (g_type); } + m_event((iPlayableService*)this, evUpdatedEventInfo); } case GST_MESSAGE_ELEMENT: { @@ -1277,7 +1286,7 @@ void eServiceMP3::pushSubtitles() GstElement *appsink = gst_bin_get_by_name(GST_BIN(m_gst_playbin),"subtitle_sink"); GstClock *clock; clock = gst_element_get_clock (appsink); - do + while ( !m_subtitle_pages.empty() ) { page = m_subtitle_pages.front(); @@ -1296,7 +1305,7 @@ void eServiceMP3::pushSubtitles() m_subtitle_widget->setPage(page); m_subtitle_pages.pop_front(); } - } while ( !m_subtitle_pages.empty() ); + } ; gst_object_unref (clock); } @@ -1330,6 +1339,7 @@ RESULT eServiceMP3::enableSubtitles(eWidget *parent, ePyObject tuple) g_object_get (G_OBJECT (m_gst_playbin), "current-text", &text_pid, NULL); eDebug ("eServiceMP3::switched to subtitle stream %i", text_pid); + m_subtitle_pages.clear(); return 0; @@ -1342,6 +1352,7 @@ error_out: RESULT eServiceMP3::disableSubtitles(eWidget *parent) { eDebug("eServiceMP3::disableSubtitles"); + m_subtitle_pages.clear(); delete m_subtitle_widget; m_subtitle_widget = 0; return 0;