a73783ae794eb18947a87aa455804ee111221734
[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         void connectNewPage(const Slot1<void,const eDVBTeletextSubtitlePage &> &slot, ePtr<eConnection> &connection);
38 private:
39         void processPESPacket(__u8 *pkt, int len);
40         
41         ePtr<iDVBPESReader> m_pes_reader;
42         ePtr<eConnection> m_read_connection;
43         
44         eDVBTeletextSubtitlePage m_subtitle_page;
45         
46         int m_M, m_Y, m_X, m_S1, m_S2, m_S3, m_S4, m_C;
47         
48         int m_page_M, m_page_X, m_page_open;
49         
50         void handlePageStart();
51         void handleLine(unsigned char *line, int len);
52         void handlePageEnd();
53         
54         std::string m_subtitle_text;
55         int m_subtitle_color;
56         
57         void addSubtitleString(int color, const std::string &string);
58         
59         void sendSubtitlePage();
60         
61         Signal1<void,const eDVBTeletextSubtitlePage&> m_new_subtitle_page;
62 };
63
64 #endif