aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/dvb/teletext.cpp2
-rw-r--r--lib/python/Plugins/Extensions/MediaPlayer/plugin.py2
-rw-r--r--lib/python/Screens/InfoBarGenerics.py26
-rw-r--r--lib/python/Screens/Subtitles.py4
-rw-r--r--lib/service/servicedvb.cpp18
-rw-r--r--lib/service/servicemp3.cpp18
-rw-r--r--lib/service/servicemp3.h5
7 files changed, 42 insertions, 33 deletions
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;
}
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():
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()
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=
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index bd15bcdc..c256213d 100644
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -2826,18 +2826,22 @@ 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 (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);
diff = 0;
}
-// if (diff > 900000)
-// {
-// eDebug("[invalid]");
-// diff = 0;
-// }
-
+ if (abs(diff) > 1800000)
+ {
+ eDebug("[invalid]... immediate show!");
+ diff = 0;
+ }
if ((diff/90)<20)
{
if (type == TELETEXT)
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<iPlayableService> &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<iServiceInformation>&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<eTimer> 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<void,iPlayableService*,int> m_event;
enum
{