finally implement proper clipping for texts
[enigma2.git] / lib / dvb / teletext.h
1 #ifndef __lib_dvb_teletext_h
2 #define __lib_dvb_teletext_h
3
4 #include <lib/base/object.h>
5 #include <lib/dvb/idvb.h>
6 #include <lib/dvb/pesparse.h>
7 #include <lib/gdi/gpixmap.h>
8
9 struct eDVBTeletextSubtitlePageElement
10 {
11         gRGB m_color;
12         std::string m_text;
13         eDVBTeletextSubtitlePageElement(const gRGB &color, const std::string &text)
14                 : m_color(color), m_text(text)
15         {
16         }
17 };
18
19 struct eDVBTeletextSubtitlePage
20 {
21         pts_t m_pts;
22         int m_timeout; /* in pts */
23         std::vector<eDVBTeletextSubtitlePageElement> m_elements;
24         
25         void clear() { m_elements.clear(); }
26 };
27
28 class eDVBTeletextParser: public iObject, public ePESParser, public Object
29 {
30         DECLARE_REF(eDVBTeletextParser);
31 public:
32         eDVBTeletextParser(iDVBDemux *demux);
33         virtual ~eDVBTeletextParser();
34         int start(int pid);
35         void setPage(int page);
36         
37 private:
38         void processPESPacket(__u8 *pkt, int len);
39         
40         ePtr<iDVBPESReader> m_pes_reader;
41         ePtr<eConnection> m_read_connection;
42         
43         eDVBTeletextSubtitlePage m_subtitle_page;
44         
45         int m_M, m_Y, m_X, m_S1, m_S2, m_S3, m_S4, m_C;
46         
47         int m_page_M, m_page_X, m_page_open;
48         
49         void handlePageStart();
50         void handleLine(unsigned char *line, int len);
51         void handlePageEnd();
52         
53         std::string m_subtitle_text;
54         int m_subtitle_color;
55         
56         void addSubtitleString(int color, const std::string &string);
57         
58         void sendSubtitlePage();
59 };
60
61 #endif