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