aboutsummaryrefslogtreecommitdiff
path: root/lib/service/servicedvb.cpp
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-11-01 14:33:57 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2006-11-01 14:33:57 +0000
commit95c570d26ce81e3dd1e0610ff6c5c0b34d75ba5a (patch)
treeceaecf5c729fdcda66120b62d96adcbdf0994522 /lib/service/servicedvb.cpp
parentc2502ea9d3d2886882e8fd27912e416bfc933567 (diff)
downloadenigma2-95c570d26ce81e3dd1e0610ff6c5c0b34d75ba5a.tar.gz
enigma2-95c570d26ce81e3dd1e0610ff6c5c0b34d75ba5a.zip
store subtitle data in service cache and reenable subtitles on next zap to
the same service
Diffstat (limited to 'lib/service/servicedvb.cpp')
-rw-r--r--lib/service/servicedvb.cpp43
1 files changed, 41 insertions, 2 deletions
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index e6a21439..5a6ea0cd 100644
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -2013,7 +2013,7 @@ RESULT eDVBServicePlay::enableSubtitles(eWidget *parent, PyObject *tuple)
if (type == 1) // teletext subtitles
{
- int page, magazine;
+ int page, magazine, pid;
if (tuplesize < 4)
goto error_out;
@@ -2023,7 +2023,11 @@ RESULT eDVBServicePlay::enableSubtitles(eWidget *parent, PyObject *tuple)
return -1;
}
- // PyTuple_GET_ITEM(tuple, 1); //we dont need pid yet
+ entry = PyTuple_GET_ITEM(tuple, 1);
+ if (!PyInt_Check(entry))
+ goto error_out;
+ pid = PyInt_AsLong(entry);
+
entry = PyTuple_GET_ITEM(tuple, 2);
if (!PyInt_Check(entry))
goto error_out;
@@ -2037,6 +2041,8 @@ RESULT eDVBServicePlay::enableSubtitles(eWidget *parent, PyObject *tuple)
m_subtitle_widget = new eSubtitleWidget(parent);
m_subtitle_widget->resize(parent->size()); /* full size */
m_teletext_parser->setPageAndMagazine(page, magazine);
+ if (m_dvb_service)
+ m_dvb_service->setCacheEntry(eDVBService::cSUBTITLE,((pid&0xFFFF)<<16)|((page&0xFF)<<8)|(magazine&0xFF));
}
else if (type == 0)
{
@@ -2067,6 +2073,8 @@ RESULT eDVBServicePlay::enableSubtitles(eWidget *parent, PyObject *tuple)
m_subtitle_widget = new eSubtitleWidget(parent);
m_subtitle_widget->resize(parent->size()); /* full size */
m_subtitle_parser->start(pid, composition_page_id, ancillary_page_id);
+ if (m_dvb_service)
+ m_dvb_service->setCacheEntry(eDVBService::cSUBTITLE, ((pid&0xFFFF)<<16)|((composition_page_id&0xFF)<<8)|(ancillary_page_id&0xFF));
}
else
goto error_out;
@@ -2092,9 +2100,40 @@ RESULT eDVBServicePlay::disableSubtitles(eWidget *parent)
m_teletext_parser->setPageAndMagazine(0,0);
m_subtitle_pages.clear();
}
+ if (m_dvb_service)
+ m_dvb_service->setCacheEntry(eDVBService::cSUBTITLE, -1);
return 0;
}
+PyObject *eDVBServicePlay::getCachedSubtitle()
+{
+ if (m_dvb_service)
+ {
+ int tmp = m_dvb_service->getCacheEntry(eDVBService::cSUBTITLE);
+ if (tmp != -1)
+ {
+ unsigned int data = (unsigned int)tmp;
+ int pid = (data&0xFFFF0000)>>16;
+ PyObject *tuple = PyTuple_New(4);
+ eDVBServicePMTHandler::program program;
+ eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
+ if (!h.getProgramInfo(program))
+ {
+ if (program.textPid==pid) // teletext
+ PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(1)); // type teletext
+ else
+ PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(0)); // type dvb
+ PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong((data&0xFFFF0000)>>16)); // pid
+ PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong((data&0xFF00)>>8)); // composition_page / page
+ PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong(data&0xFF)); // ancillary_page / magazine
+ return tuple;
+ }
+ }
+ }
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
PyObject *eDVBServicePlay::getSubtitleList()
{
if (!m_teletext_parser)