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