X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb%2Fteletext.h;h=7c62afb9e45212f5f7ce91fa7b6cd57072ba2ff4;hp=a73783ae794eb18947a87aa455804ee111221734;hb=2d3c6126e0c8e2949d9a918ba8f2005d2ee28150;hpb=1b4a78cabb83b92a621a8c81108c264957e54a0c diff --git a/lib/dvb/teletext.h b/lib/dvb/teletext.h index a73783a..7c62afb 100644 --- a/lib/dvb/teletext.h +++ b/lib/dvb/teletext.h @@ -4,14 +4,20 @@ #include #include #include +#include #include +#include struct eDVBTeletextSubtitlePageElement { gRGB m_color; std::string m_text; - eDVBTeletextSubtitlePageElement(const gRGB &color, const std::string &text) - : m_color(color), m_text(text) + eRect m_area; + + int m_source_line; + + eDVBTeletextSubtitlePageElement(const gRGB &color, const std::string &text, int source_line) + : m_color(color), m_text(text), m_source_line(source_line) { } }; @@ -19,9 +25,11 @@ struct eDVBTeletextSubtitlePageElement struct eDVBTeletextSubtitlePage { pts_t m_pts; + int m_have_pts; int m_timeout; /* in pts */ std::vector m_elements; + void clearLine(int line) { for (unsigned int i = 0; i < m_elements.size(); ) if (m_elements[i].m_source_line == line) m_elements.erase(m_elements.begin() + i); else ++i; } void clear() { m_elements.clear(); } }; @@ -32,10 +40,12 @@ public: eDVBTeletextParser(iDVBDemux *demux); virtual ~eDVBTeletextParser(); int start(int pid); - void setPage(int page); - + void setPageAndMagazine(int page, int magazine); + void setMagazine(int magazine); void connectNewPage(const Slot1 &slot, ePtr &connection); + std::set m_found_subtitle_pages; private: + std::map m_modifications; void processPESPacket(__u8 *pkt, int len); ePtr m_pes_reader; @@ -43,18 +53,19 @@ private: eDVBTeletextSubtitlePage m_subtitle_page; - int m_M, m_Y, m_X, m_S1, m_S2, m_S3, m_S4, m_C; - - int m_page_M, m_page_X, m_page_open; - + int m_C, m_Y, m_pid, m_page_M, m_page_X, m_page_open, m_double_height, m_box_open; + int m_X28_0_valid, m_X28_t1, m_X28_t2; + int m_M29_0_valid, m_M29_t1, m_M29_t2; + void handlePageStart(); void handleLine(unsigned char *line, int len); - void handlePageEnd(); + void handlePageEnd(int have_pts, const pts_t &pts); std::string m_subtitle_text; int m_subtitle_color; + int m_current_source_line; - void addSubtitleString(int color, const std::string &string); + void addSubtitleString(int color, std::string string, int source_line); void sendSubtitlePage();