openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
teletext.h
Go to the documentation of this file.
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/dvb/pmt.h>
8 #include <lib/gdi/gpixmap.h>
9 #include <map>
10 
12 {
14  std::string m_text;
16 
18 
19  eDVBTeletextSubtitlePageElement(const gRGB &color, const std::string &text, int source_line)
20  : m_color(color), m_text(text), m_source_line(source_line)
21  {
22  }
23 };
24 
26 {
29  int m_timeout; /* in pts */
30  std::vector<eDVBTeletextSubtitlePageElement> m_elements;
31 
32  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; }
33  void clear() { m_elements.clear(); }
34 };
35 
36 class eDVBTeletextParser: public iObject, public ePESParser, public sigc::trackable
37 {
38  DECLARE_REF(eDVBTeletextParser);
39 public:
41  virtual ~eDVBTeletextParser();
42  static const int max_id = 26;
43  static const char * const my_country_codes[];
44  int start(int pid);
45  void setPageAndMagazine(int page, int magazine, const char * lang);
46  void setMagazine(int magazine);
47  void connectNewStream(const sigc::slot0<void> &slot, ePtr<eConnection> &connection);
48  void connectNewPage(const sigc::slot1<void,const eDVBTeletextSubtitlePage &> &slot, ePtr<eConnection> &connection);
49  std::set<eDVBServicePMTHandler::subtitleStream> m_found_subtitle_pages;
50 private:
51  std::map<int, unsigned int> m_modifications;
52  void processPESPacket(uint8_t *pkt, int len);
53 
54  ePtr<iDVBPESReader> m_pes_reader;
55  ePtr<eConnection> m_read_connection;
56 
57  eDVBTeletextSubtitlePage m_subtitle_page;
58 
59  int m_C, m_Y, m_pid, m_page_M, m_page_X, m_page_open, m_double_height, m_box_open, m_L;
60  int m_X28_0_valid, m_X28_t1, m_X28_t2;
61  int m_M29_0_valid, m_M29_t1, m_M29_t2;
62 
63  void handlePageStart();
64  void handleLine(unsigned char *line, int len);
65  void handlePageEnd(int have_pts, const pts_t &pts);
66 
67  void addSubtitleString(int color, std::string string, int source_line);
68 
69  sigc::signal0<void> m_new_subtitle_stream;
70  sigc::signal1<void,const eDVBTeletextSubtitlePage&> m_new_subtitle_page;
71 };
72 
73 #endif
long long pts_t
Definition: cfile.h:7
Definition: teletext.h:37
void setMagazine(int magazine)
void setPageAndMagazine(int page, int magazine, const char *lang)
Definition: teletext.cpp:626
static const int max_id
Definition: teletext.h:42
virtual ~eDVBTeletextParser()
Definition: teletext.cpp:235
void connectNewStream(const sigc::slot0< void > &slot, ePtr< eConnection > &connection)
Definition: teletext.cpp:652
int start(int pid)
Definition: teletext.cpp:455
static const char *const my_country_codes[]
Definition: teletext.h:43
std::set< eDVBServicePMTHandler::subtitleStream > m_found_subtitle_pages
Definition: teletext.h:49
eDVBTeletextParser(iDVBDemux *demux)
Definition: teletext.cpp:220
void connectNewPage(const sigc::slot1< void, const eDVBTeletextSubtitlePage & > &slot, ePtr< eConnection > &connection)
Definition: teletext.cpp:657
Definition: pesparse.h:7
Definition: erect.h:11
Definition: idvb.h:755
Definition: object.h:15
line
Definition: newplugin.py:87
Definition: picload.cpp:163
Definition: teletext.h:12
eDVBTeletextSubtitlePageElement(const gRGB &color, const std::string &text, int source_line)
Definition: teletext.h:19
gRGB m_color
Definition: teletext.h:13
eRect m_area
Definition: teletext.h:15
std::string m_text
Definition: teletext.h:14
int m_source_line
Definition: teletext.h:17
Definition: teletext.h:26
std::vector< eDVBTeletextSubtitlePageElement > m_elements
Definition: teletext.h:30
int m_have_pts
Definition: teletext.h:28
int m_timeout
Definition: teletext.h:29
void clearLine(int line)
Definition: teletext.h:32
pts_t m_pts
Definition: teletext.h:27
void clear()
Definition: teletext.h:33
Definition: gpixmap.h:14