From 2f97ea180b96913b356c28e3cf50fbbc318c52b3 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 11 Jun 2009 23:56:04 +0200 Subject: servicemp3.h/cpp: trade service reference to eServiceMP3 and implement getInfo(sServiceref) ... needed for ServiceEventTracker handling --- lib/service/servicemp3.cpp | 18 +++++++++++------- lib/service/servicemp3.h | 5 ++--- 2 files changed, 13 insertions(+), 10 deletions(-) (limited to 'lib') diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index 2ddfe925..77501e75 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -69,7 +69,7 @@ DEFINE_REF(eServiceFactoryMP3) RESULT eServiceFactoryMP3::play(const eServiceReference &ref, ePtr &ptr) { // check resources... - ptr = new eServiceMP3(ref.path.c_str(),ref.getName().c_str()); + ptr = new eServiceMP3(ref); return 0; } @@ -187,7 +187,8 @@ int eStaticServiceMP3Info::getLength(const eServiceReference &ref) // eServiceMP3 -eServiceMP3::eServiceMP3(const char *filename, const char *title): m_filename(filename), m_title(title), m_pump(eApp, 1) +eServiceMP3::eServiceMP3(eServiceReference ref) + :m_ref(ref), m_pump(eApp, 1) { m_seekTimeout = eTimer::create(eApp); m_subtitle_sync_timer = eTimer::create(eApp); @@ -204,7 +205,8 @@ eServiceMP3::eServiceMP3(const char *filename, const char *title): m_filename(fi m_state = stIdle; eDebug("eServiceMP3::construct!"); - + + const char *filename = m_ref.path.c_str(); const char *ext = strrchr(filename, '.'); if (!ext) ext = filename; @@ -379,7 +381,7 @@ RESULT eServiceMP3::stop() ASSERT(m_state != stIdle); if (m_state == stStopped) return -1; - eDebug("eServiceMP3::stop %s", m_filename.c_str()); + eDebug("eServiceMP3::stop %s", m_ref.path.c_str()); gst_element_set_state(m_gst_playbin, GST_STATE_NULL); m_state = stStopped; return 0; @@ -596,15 +598,16 @@ RESULT eServiceMP3::info(ePtr&i) RESULT eServiceMP3::getName(std::string &name) { - if (m_title.empty()) + std::string title = m_ref.getName(); + if (title.empty()) { - name = m_filename; + name = m_ref.path; size_t n = name.rfind('/'); if (n != std::string::npos) name = name.substr(n + 1); } else - name = m_title; + name = title; return 0; } @@ -615,6 +618,7 @@ int eServiceMP3::getInfo(int w) switch (w) { + case sServiceref: return m_ref; case sVideoHeight: return m_height; case sVideoWidth: return m_width; case sFrameRate: return m_framerate; diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h index 1d77483f..ee06064a 100644 --- a/lib/service/servicemp3.h +++ b/lib/service/servicemp3.h @@ -176,11 +176,10 @@ private: ePtr m_seekTimeout; void seekTimeoutCB(); friend class eServiceFactoryMP3; - std::string m_filename; - std::string m_title; + eServiceReference m_ref; int m_buffer_size; bufferInfo m_bufferInfo; - eServiceMP3(const char *filename, const char *title); + eServiceMP3(eServiceReference ref); Signal2 m_event; enum { -- cgit v1.2.3 From d6f965e34c0e482e5579689ee3150788dad3067f Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 11 Jun 2009 23:56:40 +0200 Subject: servicedvb.cpp: skip subtitles when pts difference is bigger than 20seconds --- lib/service/servicedvb.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 52978dc3..a57a813b 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -2824,17 +2824,21 @@ void eDVBServicePlay::checkSubtitleTiming() m_decoder->getPTS(0, pos); eDebug("%lld %lld", pos, show_time); - int diff = show_time - pos; + int diff = show_time - pos; if (diff < 0) { eDebug("[late (%d ms)]", -diff / 90); diff = 0; } -// if (diff > 900000) -// { -// eDebug("[invalid]"); -// diff = 0; -// } + if (abs(diff) > 1800000) + { + eDebug("skip [invalid]"); + if (type == TELETEXT) + m_subtitle_pages.pop_front(); + else + m_dvb_subtitle_pages.pop_front(); + continue; + } if ((diff/90)<20) { -- cgit v1.2.3 From ba61ec0812bb241b10f1201db675f22d1fdf99e9 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 11 Jun 2009 23:57:35 +0200 Subject: Subtitles.py: add possibilty to use this screen with other InfoBarSubtitleSupport instances --- lib/python/Screens/Subtitles.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/python/Screens/Subtitles.py b/lib/python/Screens/Subtitles.py index 86944671..9ba7e0a5 100644 --- a/lib/python/Screens/Subtitles.py +++ b/lib/python/Screens/Subtitles.py @@ -8,7 +8,7 @@ from enigma import iPlayableService from Tools.ISO639 import LanguageCodes class Subtitles(Screen, ConfigListScreen): - def __init__(self, session): + def __init__(self, session, infobar=None): Screen.__init__(self, session) self["actions"] = ActionMap(["SetupActions"], @@ -19,7 +19,7 @@ class Subtitles(Screen, ConfigListScreen): self.list = [] ConfigListScreen.__init__(self, self.list) - self.infobar = self.session.infobar + self.infobar = infobar or self.session.infobar self.fillList() self.__event_tracker = ServiceEventTracker(screen=self, eventmap= -- cgit v1.2.3 From 0efa85535ab64a0697fe415d3750341c516268b8 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 11 Jun 2009 23:57:55 +0200 Subject: InfoBarGenerics.py: some subtitle screen show/hide fixes --- lib/python/Screens/InfoBarGenerics.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'lib') diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 9adaa6db..7f90b976 100644 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -2181,19 +2181,19 @@ class InfoBarSubtitleSupport(object): self.__selected_subtitle = None def __serviceStopped(self): - self.subtitle_window.hide() - self.__subtitles_enabled = False self.cached_subtitle_checked = False + if self.__subtitles_enabled: + self.subtitle_window.hide() + self.__subtitles_enabled = False + self.__selected_subtitle = None def __updatedInfo(self): if not self.cached_subtitle_checked: - subtitle = self.getCurrentServiceSubtitle() self.cached_subtitle_checked = True - self.__selected_subtitle = subtitle and subtitle.getCachedSubtitle() + subtitle = self.getCurrentServiceSubtitle() + self.setSelectedSubtitle(subtitle and subtitle.getCachedSubtitle()) if self.__selected_subtitle: - subtitle.enableSubtitles(self.subtitle_window.instance, self.selected_subtitle) - self.subtitle_window.show() - self.__subtitles_enabled = True + self.setSubtitlesEnable(True) def getCurrentServiceSubtitle(self): service = self.session.nav.getCurrentService() @@ -2201,14 +2201,16 @@ class InfoBarSubtitleSupport(object): def setSubtitlesEnable(self, enable=True): subtitle = self.getCurrentServiceSubtitle() - if enable and self.__selected_subtitle is not None: - if subtitle and not self.__subtitles_enabled: - subtitle.enableSubtitles(self.subtitle_window.instance, self.selected_subtitle) - self.subtitle_window.show() - self.__subtitles_enabled = True + if enable: + if self.__selected_subtitle: + if subtitle and not self.__subtitles_enabled: + subtitle.enableSubtitles(self.subtitle_window.instance, self.selected_subtitle) + self.subtitle_window.show() + self.__subtitles_enabled = True else: if subtitle: subtitle.disableSubtitles(self.subtitle_window.instance) + self.__selected_subtitle = False self.__subtitles_enabled = False self.subtitle_window.hide() -- cgit v1.2.3 From 1c06b6ba897cb3d36b69dc66a69df35f0e16f171 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 11 Jun 2009 23:58:22 +0200 Subject: MediaPlayer/plugin.py: use correct InfoBarSubtitleSupport instance for Subtitle screen --- lib/python/Plugins/Extensions/MediaPlayer/plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py index 71b486a3..42800b5c 100644 --- a/lib/python/Plugins/Extensions/MediaPlayer/plugin.py +++ b/lib/python/Plugins/Extensions/MediaPlayer/plugin.py @@ -901,7 +901,7 @@ class MediaPlayer(Screen, InfoBarBase, InfoBarSeek, InfoBarAudioSelection, InfoB def subtitleSelection(self): from Screens.Subtitles import Subtitles - self.session.open(Subtitles) + self.session.open(Subtitles, self) def hotplugCB(self, dev, media_state): if dev == harddiskmanager.getCD(): -- cgit v1.2.3 From 4c4f22cbb7b9bd766b0fb3f76c4be40497379762 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 12 Jun 2009 00:17:39 +0200 Subject: teletext.cpp: invert have_pts --- lib/dvb/teletext.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/dvb/teletext.cpp b/lib/dvb/teletext.cpp index 7e1411b2..381d3372 100644 --- a/lib/dvb/teletext.cpp +++ b/lib/dvb/teletext.cpp @@ -287,7 +287,7 @@ void eDVBTeletextParser::processPESPacket(__u8 *pkt, int len) if ((serial_mode || M == m_page_M) && m_page_open) { eDebug("Page End %d %lld", !have_pts, pts); - handlePageEnd(have_pts, pts); + handlePageEnd(!have_pts, pts); m_page_open = 0; } -- cgit v1.2.3 From 2d03f14ca12ee50e2dac8b97b1a54e681dc86cef Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 12 Jun 2009 00:18:44 +0200 Subject: lib/service/servicedvb.cpp: immediate show ttx subtitles instead of skip them when pts difference is to big also immediate show ttx subtitles without pts in pes packet --- lib/service/servicedvb.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index a57a813b..c97980fd 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -2825,6 +2825,11 @@ void eDVBServicePlay::checkSubtitleTiming() eDebug("%lld %lld", pos, show_time); int diff = show_time - pos; + if (type == TELETEXT && !page.m_have_pts) + { + eDebug("ttx subtitle page without pts... immediate show"); + diff = 0; + } if (diff < 0) { eDebug("[late (%d ms)]", -diff / 90); @@ -2832,14 +2837,9 @@ void eDVBServicePlay::checkSubtitleTiming() } if (abs(diff) > 1800000) { - eDebug("skip [invalid]"); - if (type == TELETEXT) - m_subtitle_pages.pop_front(); - else - m_dvb_subtitle_pages.pop_front(); - continue; + eDebug("[invalid]... immediate show!"); + diff = 0; } - if ((diff/90)<20) { if (type == TELETEXT) -- cgit v1.2.3