From dc5b3144665e827fccf38fcab1c167e6dacdac7a Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 2 Jun 2006 17:26:57 +0000 Subject: [PATCH] (not yet enabled) teletext subtitle support --- lib/service/servicedvb.cpp | 46 ++++++++++++++++++++++++++++++++++++++ lib/service/servicedvb.h | 14 +++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 9cfe7073..de4f84ee 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -17,6 +17,9 @@ #include #include + /* for subtitles */ +#include + #include #include @@ -24,6 +27,8 @@ #include +// #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 &ptr) return -1; } +RESULT eDVBServicePlay::subtitle(ePtr &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 init_eServiceFactoryDVB(eAutoInitNumbers::service+1, "eServiceFactoryDVB"); diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h index da307324..85653caa 100644 --- a/lib/service/servicedvb.h +++ b/lib/service/servicedvb.h @@ -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 &ptr); RESULT timeshift(ePtr &ptr); RESULT cueSheet(ePtr &ptr); + RESULT subtitle(ePtr &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 m_new_subtitle_page_connection; + ePtr m_teletext_parser; + eSubtitleWidget *m_subtitle_widget; }; #endif -- 2.30.2