remove unneeded caching of caids, use an array for pidcache instead of std::map ...
[enigma2.git] / lib / dvb / decoder.h
1 #ifndef __decoder_h
2 #define __decoder_h
3
4 #include <lib/base/object.h>
5 #include <lib/dvb/demux.h>
6
7 class eDVBAudio: public iObject
8 {
9 DECLARE_REF(eDVBAudio);
10 private:
11         ePtr<eDVBDemux> m_demux;
12         int m_fd, m_fd_demux, m_dev;
13 public:
14         enum { aMPEG, aAC3, aDTS, aAAC };
15         eDVBAudio(eDVBDemux *demux, int dev);
16         int startPid(int pid, int type);
17         void stop();
18 #if HAVE_DVB_API_VERSION < 3
19         void start();
20         void stopPid();
21 #endif
22         void flush();
23         void freeze();
24         void unfreeze();
25         int getPTS(pts_t &now);
26         virtual ~eDVBAudio();
27 };
28
29 class eDVBVideo: public iObject
30 {
31 DECLARE_REF(eDVBVideo);
32 private:
33         ePtr<eDVBDemux> m_demux;
34         int m_fd, m_fd_demux, m_dev;
35         
36         int m_is_slow_motion, m_is_fast_forward;
37 public:
38         enum { MPEG2, MPEG4_H264 };
39         eDVBVideo(eDVBDemux *demux, int dev);
40         int startPid(int pid, int type);
41         void stop();
42 #if HAVE_DVB_API_VERSION < 3
43         void start();
44         void stopPid();
45 #endif
46         void flush();
47         void freeze();
48         int setSlowMotion(int repeat);
49         int setFastForward(int skip);
50         void unfreeze();
51         int getPTS(pts_t &now);
52         virtual ~eDVBVideo();
53 };
54
55 class eDVBPCR: public iObject
56 {
57 DECLARE_REF(eDVBPCR);
58 private:
59         ePtr<eDVBDemux> m_demux;
60         int m_fd_demux;
61 public:
62         eDVBPCR(eDVBDemux *demux);
63         int startPid(int pid);
64         void stop();
65         virtual ~eDVBPCR();
66 };
67
68 class eDVBTText: public iObject
69 {
70 DECLARE_REF(eDVBTText);
71 private:
72         ePtr<eDVBDemux> m_demux;
73         int m_fd_demux;
74 public:
75         eDVBTText(eDVBDemux *demux);
76         int startPid(int pid);
77         void stop();
78         virtual ~eDVBTText();
79 };
80
81 class eTSMPEGDecoder: public Object, public iTSMPEGDecoder
82 {
83 DECLARE_REF(eTSMPEGDecoder);
84 private:
85         ePtr<eDVBDemux> m_demux;
86         ePtr<eDVBAudio> m_audio;
87         ePtr<eDVBVideo> m_video;
88         ePtr<eDVBPCR> m_pcr;
89         ePtr<eDVBTText> m_text;
90         int m_vpid, m_vtype, m_apid, m_atype, m_pcrpid, m_textpid;
91         enum
92         {
93                 changeVideo = 1, 
94                 changeAudio = 2, 
95                 changePCR   = 4,
96                 changeText  = 8
97         };
98         int m_changed, m_decoder;
99         int m_is_ff, m_is_sm, m_is_trickmode;
100         int setState();
101         ePtr<eConnection> m_demux_event;
102         
103         void demux_event(int event);
104 public:
105         enum { pidNone = -1 };
106         eTSMPEGDecoder(eDVBDemux *demux, int decoder);
107         virtual ~eTSMPEGDecoder();
108         RESULT setVideoPID(int vpid, int type);
109         RESULT setAudioPID(int apid, int type);
110         RESULT setSyncPCR(int pcrpid);
111         RESULT setTextPID(int textpid);
112         RESULT setSyncMaster(int who);
113         RESULT start();
114         RESULT freeze(int cont);
115         RESULT unfreeze();
116         RESULT setSinglePictureMode(int when);
117         RESULT setPictureSkipMode(int what);
118         RESULT setFastForward(int frames_to_skip);
119         RESULT setSlowMotion(int repeat);
120         RESULT setZoom(int what);
121         RESULT flush();
122         RESULT setTrickmode(int what);
123         
124                 /* what 0=auto, 1=video, 2=audio. */
125         RESULT getPTS(int what, pts_t &pts);
126 };
127
128 #endif