(not yet enabled) teletext subtitle support
authorFelix Domke <tmbinc@elitedvb.net>
Fri, 2 Jun 2006 17:26:57 +0000 (17:26 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Fri, 2 Jun 2006 17:26:57 +0000 (17:26 +0000)
lib/service/servicedvb.cpp
lib/service/servicedvb.h

index 9cfe707..de4f84e 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,36 @@ void eDVBServicePlay::cutlistToCuesheet()
        m_cue->commitSpans();
 }
 
+RESULT eDVBServicePlay::enableSubtitles(eWidget *parent, int index)
+{
+       if (m_subtitle_widget)
+               disableSubtitles(parent);
+       
+       m_subtitle_widget = new eSubtitleWidget(parent);
+       m_subtitle_widget->resize(parent->size()); /* full size */
+
+       return 0;
+}
+
+RESULT eDVBServicePlay::disableSubtitles(eWidget *parent)
+{
+       delete m_subtitle_widget;
+       m_subtitle_widget = 0;
+       return 0;
+}
+
+RESULT eDVBServicePlay::getSubtitleList(PyList *list)
+{
+       return -1;
+}
+
+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");
index da30732..85653ca 100644 (file)
@@ -66,12 +66,14 @@ public:
        PyObject *getFrontendData(bool);
 };
 
+class eSubtitleWidget; 
+
 class eDVBServicePlay: public eDVBServiceBase,
                public iPlayableService, public iPauseableService, 
                public iSeekableService, public Object, public iServiceInformation, 
                public iAudioTrackSelection, public iAudioChannelSelection,
                public iSubserviceList, public iTimeshiftService,
-               public iCueSheet
+               public iCueSheet, public iSubtitleOutput
 {
 DECLARE_REF(eDVBServicePlay);
 public:
@@ -92,6 +94,7 @@ public:
        RESULT subServices(ePtr<iSubserviceList> &ptr);
        RESULT timeshift(ePtr<iTimeshiftService> &ptr);
        RESULT cueSheet(ePtr<iCueSheet> &ptr);
+       RESULT subtitle(ePtr<iSubtitleOutput> &ptr);
 
                // iPauseableService
        RESULT pause();
@@ -138,6 +141,11 @@ public:
        void setCutList(PyObject *);
        void setCutListEnable(int enable);
        
+               // iSubtitleOutput
+       RESULT enableSubtitles(eWidget *parent, int index);
+       RESULT disableSubtitles(eWidget *parent);
+       SWIG_VOID(RESULT) getSubtitleList(PyList *list);
+
 private:
        friend class eServiceFactoryDVB;
        eServiceReference m_reference;
@@ -212,7 +220,11 @@ private:
        void cutlistToCuesheet();
        
                /* teletext subtitles */
+       void newSubtitlePage(const eDVBTeletextSubtitlePage &p);
+       ePtr<eConnection> m_new_subtitle_page_connection;
+       
        ePtr<eDVBTeletextParser> m_teletext_parser;
+       eSubtitleWidget *m_subtitle_widget;
 };
 
 #endif