From 1b4a78cabb83b92a621a8c81108c264957e54a0c Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 2 Jun 2006 17:11:06 +0000 Subject: [PATCH] get notified on new page, color decoding --- lib/dvb/teletext.cpp | 16 +++++++++++++--- lib/dvb/teletext.h | 3 +++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/dvb/teletext.cpp b/lib/dvb/teletext.cpp index 17020bb3..6f8886eb 100644 --- a/lib/dvb/teletext.cpp +++ b/lib/dvb/teletext.cpp @@ -166,8 +166,11 @@ int eDVBTeletextParser::start(int pid) void eDVBTeletextParser::handlePageStart() { - if (m_C & (1<<4)) /* erase flag set */ - m_subtitle_page.clear(); +// if (m_C & (1<<4)) /* erase flag set */ + + /* we are always erasing the page, + even when the erase flag is not set. */ + m_subtitle_page.clear(); } void eDVBTeletextParser::handleLine(unsigned char *data, int len) @@ -221,11 +224,17 @@ void eDVBTeletextParser::setPage(int page) m_page_X = page & 0xFF; /* page number */ } +void eDVBTeletextParser::connectNewPage(const Slot1 &slot, ePtr &connection) +{ + connection = new eConnection(this, m_new_subtitle_page.connect(slot)); +} + void eDVBTeletextParser::addSubtitleString(int color, const std::string &string) { + gRGB rgbcol((color & 1) ? 255 : 128, (color & 2) ? 255 : 128, (color & 4) ? 255 : 128); if ((color != m_subtitle_color) && !m_subtitle_text.empty()) { - m_subtitle_page.m_elements.push_back(eDVBTeletextSubtitlePageElement(gRGB(0, 0xff, 0), m_subtitle_text)); + m_subtitle_page.m_elements.push_back(eDVBTeletextSubtitlePageElement(rgbcol, m_subtitle_text)); m_subtitle_text = ""; } else if (!m_subtitle_text.empty() && m_subtitle_text[m_subtitle_text.size()-1] != ' ') m_subtitle_text += " "; @@ -239,4 +248,5 @@ void eDVBTeletextParser::sendSubtitlePage() eDebug("subtitle page:"); for (unsigned int i = 0; i < m_subtitle_page.m_elements.size(); ++i) eDebug("%s", m_subtitle_page.m_elements[i].m_text.c_str()); + m_new_subtitle_page(m_subtitle_page); } diff --git a/lib/dvb/teletext.h b/lib/dvb/teletext.h index 5b4a9703..a73783ae 100644 --- a/lib/dvb/teletext.h +++ b/lib/dvb/teletext.h @@ -34,6 +34,7 @@ public: int start(int pid); void setPage(int page); + void connectNewPage(const Slot1 &slot, ePtr &connection); private: void processPESPacket(__u8 *pkt, int len); @@ -56,6 +57,8 @@ private: void addSubtitleString(int color, const std::string &string); void sendSubtitlePage(); + + Signal1 m_new_subtitle_page; }; #endif -- 2.30.2