cable scan works now
[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;
13 public:
14         enum {aMPEG, aAC3, aDTS };
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;
35         
36         int m_is_slow_motion, m_is_fast_forward;
37 public:
38         eDVBVideo(eDVBDemux *demux, int dev);
39         int startPid(int pid);
40         void stop();
41 #if HAVE_DVB_API_VERSION < 3
42         void start();
43         void stopPid();
44 #endif
45         void flush();
46         void freeze();
47         int setSlowMotion(int repeat);
48         int setFastForward(int skip);
49         void unfreeze();
50         int getPTS(pts_t &now);
51         virtual ~eDVBVideo();
52 };
53
54 class eDVBPCR: public iObject
55 {
56 DECLARE_REF(eDVBPCR);
57 private:
58         ePtr<eDVBDemux> m_demux;
59         int m_fd_demux;
60 public:
61         eDVBPCR(eDVBDemux *demux);
62         int startPid(int pid);
63         void stop();
64         virtual ~eDVBPCR();
65 };
66
67 class eDVBTText: public iObject
68 {
69 DECLARE_REF(eDVBTText);
70 private:
71         ePtr<eDVBDemux> m_demux;
72         int m_fd_demux;
73 public:
74         eDVBTText(eDVBDemux *demux);
75         int startPid(int pid);
76         void stop();
77         virtual ~eDVBTText();
78 };
79
80 class eTSMPEGDecoder: public Object, public iTSMPEGDecoder
81 {
82 DECLARE_REF(eTSMPEGDecoder);
83 private:
84         ePtr<eDVBDemux> m_demux;
85         ePtr<eDVBAudio> m_audio;
86         ePtr<eDVBVideo> m_video;
87         ePtr<eDVBPCR> m_pcr;
88         ePtr<eDVBTText> m_text;
89         int m_vpid, m_apid, m_atype, m_pcrpid, m_textpid;
90         enum
91         {
92                 changeVideo = 1, 
93                 changeAudio = 2, 
94                 changePCR   = 4,
95                 changeText  = 8
96         };
97         int m_changed;
98         int m_is_ff, m_is_sm, m_is_trickmode;
99         int setState();
100         ePtr<eConnection> m_demux_event;
101         
102         void demux_event(int event);
103 public:
104         enum { pidNone = -1 };
105         eTSMPEGDecoder(eDVBDemux *demux, int decoder);
106         virtual ~eTSMPEGDecoder();
107         RESULT setVideoPID(int vpid);
108         RESULT setAudioPID(int apid, int type);
109         RESULT setSyncPCR(int pcrpid);
110         RESULT setTextPID(int textpid);
111         RESULT setSyncMaster(int who);
112         RESULT start();
113         RESULT freeze(int cont);
114         RESULT unfreeze();
115         RESULT setSinglePictureMode(int when);
116         RESULT setPictureSkipMode(int what);
117         RESULT setFastForward(int frames_to_skip);
118         RESULT setSlowMotion(int repeat);
119         RESULT setZoom(int what);
120         RESULT flush();
121         RESULT setTrickmode(int what);
122         
123                 /* what 0=auto, 1=video, 2=audio. */
124         RESULT getPTS(int what, pts_t &pts);
125 };
126
127 #endif