fix typo
[enigma2.git] / lib / service / servicedvb.cpp
index 9cfe7073055a2aecf1191e4778c436b960914a38..f67ea96b65827f8c17b05bf3186945d3f7acff22 100644 (file)
@@ -17,6 +17,9 @@
 #include <lib/dvb/tstools.h>
 #include <lib/python/python.h>
 
+               /* for subtitles */
+#include <lib/gui/esubtitle.h>
+
 #include <sys/vfs.h>
 
 #include <byteswap.h>
@@ -24,6 +27,8 @@
 
 #include <dvbsi++/event_information_section.h>
 
+// #define INTERNAL_TELETEXT
+
 #ifndef BYTE_ORDER
 #error no byte order defined!
 #endif
@@ -639,10 +644,13 @@ eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *serv
 
        m_cuesheet_changed = 0;
        m_cutlist_enabled = 1;
+       
+       m_subtitle_widget = 0;
 }
 
 eDVBServicePlay::~eDVBServicePlay()
 {
+       delete m_subtitle_widget;
 }
 
 void eDVBServicePlay::gotNewEvent()
@@ -1053,6 +1061,12 @@ RESULT eDVBServicePlay::cueSheet(ePtr<iCueSheet> &ptr)
        return -1;
 }
 
+RESULT eDVBServicePlay::subtitle(ePtr<iSubtitleOutput> &ptr)
+{
+       ptr = this;
+       return 0;
+}
+
 RESULT eDVBServicePlay::getName(std::string &name)
 {
        if (m_is_pvr)
@@ -1277,6 +1291,7 @@ RESULT eDVBServicePlay::selectChannel(int i)
                if (m_decoder)
                        m_decoder->setAudioChannel(i);
        }
+       return 0;
 }
 
 int eDVBServiceBase::getFrontendInfo(int w)
@@ -1655,6 +1670,7 @@ void eDVBServicePlay::updateDecoder()
                        m_cue->setDecodingDemux(m_decode_demux, m_decoder);
 #ifdef INTERNAL_TELETEXT
                m_teletext_parser = new eDVBTeletextParser(m_decode_demux);
+               m_teletext_parser->connectNewPage(slot(*this, &eDVBServicePlay::newSubtitlePage), m_new_subtitle_page_connection);
 #endif
        }
 
@@ -1827,6 +1843,64 @@ void eDVBServicePlay::cutlistToCuesheet()
        m_cue->commitSpans();
 }
 
+RESULT eDVBServicePlay::enableSubtitles(eWidget *parent, PyObject *entry)
+{
+       if (m_subtitle_widget)
+               disableSubtitles(parent);
+       
+       if (!m_teletext_parser)
+               return -1;
+       
+       if (!PyInt_Check(entry))
+               return -1;
+       
+       m_subtitle_widget = new eSubtitleWidget(parent);
+       m_subtitle_widget->resize(parent->size()); /* full size */
+       
+       int page = PyInt_AsLong(entry);
+       
+       m_teletext_parser->setPage(page);
+
+       return 0;
+}
+
+RESULT eDVBServicePlay::disableSubtitles(eWidget *parent)
+{
+       delete m_subtitle_widget;
+       m_subtitle_widget = 0;
+       return 0;
+}
+
+PyObject *eDVBServicePlay::getSubtitleList()
+{
+       if (!m_teletext_parser)
+       {
+               Py_INCREF(Py_None);
+               return Py_None;
+       }
+       
+       PyObject *l = PyList_New(0);
+       
+       for (std::set<int>::iterator i(m_teletext_parser->m_found_subtitle_pages.begin()); i != m_teletext_parser->m_found_subtitle_pages.end(); ++i)
+       {
+               PyObject *tuple = PyTuple_New(2);
+               char desc[20];
+               sprintf(desc, "Page %x", *i);
+               PyTuple_SetItem(tuple, 0, PyString_FromString(desc));
+               PyTuple_SetItem(tuple, 1, PyInt_FromLong(*i));
+               PyList_Append(l, tuple);
+       }
+       
+       return l;
+}
+
+void eDVBServicePlay::newSubtitlePage(const eDVBTeletextSubtitlePage &page)
+{
+       eDebug("new subtitle page received!");
+       if (m_subtitle_widget)
+               m_subtitle_widget->addPage(page);
+}
+
 DEFINE_REF(eDVBServicePlay)
 
 eAutoInitPtr<eServiceFactoryDVB> init_eServiceFactoryDVB(eAutoInitNumbers::service+1, "eServiceFactoryDVB");