- add dvb resource management
[vuplus_dvbapp] / lib / dvb / pmt.h
1 #ifndef __lib_dvb_dvbmid_h
2 #define __lib_dvb_dvbmid_h
3
4 #include <lib/dvb/idvb.h>
5 #include <lib/dvb/dvb.h>
6 #include <lib/dvb/isection.h>
7 #include <lib/dvb/esection.h>
8 #include <lib/dvb_si/pmt.h>
9 #include <lib/dvb_si/pat.h>
10
11 class eDVBServicePMTHandler: public Object
12 {
13         eServiceReferenceDVB m_reference;
14 //      ePtr<eDVBService> m_service;
15
16         int m_last_channel_state;
17         
18         eAUTable<eTable<ProgramMapTable> > m_PMT;
19         eAUTable<eTable<ProgramAssociationTable> > m_PAT;
20
21         ePtr<iDVBChannel> m_channel;
22         ePtr<eDVBResourceManager> m_resourceManager;
23         ePtr<iDVBDemux> m_demux;
24         
25         void channelStateChanged(iDVBChannel *);
26         ePtr<eConnection> m_channelStateChanged_connection;
27
28         void PMTready(int error);
29         void PATready(int error);
30 public:
31         eDVBServicePMTHandler();
32         
33         enum
34         {
35                 eventNoResources,  // a requested resource couldn't be allocated
36                 eventNoPAT,        // no pat could be received (timeout)
37                 eventNoPATEntry,   // no pat entry for the corresponding SID could be found
38                 eventNoPMT,        // no pmt could be received (timeout)
39                 eventNewProgramInfo, // we just received a PMT
40                 eventTuned         // a channel was sucessfully (re-)tuned in, you may start additional filters now
41         };
42
43         Signal1<void,int> serviceEvent;
44         
45         struct videoStream
46         {
47                 int pid;
48         };
49         
50         struct audioStream
51         {
52                 int pid;
53                 enum { atMPEG, atAC3, atDTS };
54                 int type; // mpeg2, ac3, dts, ...
55                 // language code, ...
56         };
57         
58         struct program
59         {
60                 std::vector<videoStream> videoStreams;
61                 std::vector<audioStream> audioStreams;
62                 // ca info
63                 int pcrPid;
64         };
65         
66         int getProgramInfo(struct program &program);
67         int getDemux(ePtr<iDVBDemux> &demux);
68         
69         int tune(eServiceReferenceDVB &ref);    
70 };
71
72 #endif