From 64017303b692e478a3d693a7d9e36fa075d1056a Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Mon, 5 Jun 2006 21:22:21 +0000 Subject: [PATCH] fix some bugs, collect subtitle pages --- lib/dvb/teletext.cpp | 20 +++++++++++++++----- lib/dvb/teletext.h | 2 ++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/dvb/teletext.cpp b/lib/dvb/teletext.cpp index 6f8886eb..0fa98094 100644 --- a/lib/dvb/teletext.cpp +++ b/lib/dvb/teletext.cpp @@ -107,7 +107,8 @@ void eDVBTeletextParser::processPESPacket(__u8 *pkt, int len) m_M = magazine_and_packet_address & 7; m_Y = magazine_and_packet_address >> 3; -// eDebug("line %d, framing code: %02x, M=%02x, Y=%02x", line_offset, framing_code, M, Y); + +// eDebug("line %d, framing code: %02x, M=%02x, Y=%02x", line_offset, framing_code, m_M, m_Y); if (m_Y == 0) /* page header */ { @@ -129,8 +130,10 @@ void eDVBTeletextParser::processPESPacket(__u8 *pkt, int len) m_C |= decode_hamming_84(data + 6) << 7; m_C |= decode_hamming_84(data + 7) << 11; + int serial_mode = m_C & (1<<11); + /* page on the same magazine? end current page. */ - if ((m_M == m_page_M) && (m_page_open)) + if ((serial_mode || (m_M == m_page_M)) && (m_page_open)) { handlePageEnd(); m_page_open = 0; @@ -138,6 +141,9 @@ void eDVBTeletextParser::processPESPacket(__u8 *pkt, int len) m_X = decode_hamming_84(data+1) * 0x10 + decode_hamming_84(data); + if (m_C & (1<<6)) + m_found_subtitle_pages.insert((m_M << 8) | m_X); + /* correct page on correct magazine? open page. */ if ((m_M == m_page_M) && (m_X == m_page_X)) { @@ -178,10 +184,11 @@ void eDVBTeletextParser::handleLine(unsigned char *data, int len) if (!m_Y) /* first line is page header, we don't need that. */ return; - int last_was_white = 1, color = -1; + int last_was_white = 1, color = 7; /* start with whitespace. start with color=white. (that's unrelated.) */ std::string text; +// eDebug("handle subtitle line: %d len", len); for (int i=0; i= 0x20)) { @@ -209,11 +216,13 @@ void eDVBTeletextParser::handleLine(unsigned char *data, int len) } } } + eDebug(""); addSubtitleString(color, text); } void eDVBTeletextParser::handlePageEnd() { + eDebug("handle page end"); addSubtitleString(-1, ""); /* end last line */ sendSubtitlePage(); /* send assembled subtitle page to display */ } @@ -231,6 +240,7 @@ void eDVBTeletextParser::connectNewPage(const Slot1 &slot, ePtr &connection); + + std::set m_found_subtitle_pages; private: void processPESPacket(__u8 *pkt, int len); -- 2.30.2