8e8f65ad9fce3097c8cbacbcfbfcd228dbcd91bd
[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         static int m_pcm_delay;
86         static int m_ac3_delay;
87         static int m_audio_channel;
88 DECLARE_REF(eTSMPEGDecoder);
89         std::string m_radio_pic;
90 private:
91         ePtr<eDVBDemux> m_demux;
92         ePtr<eDVBAudio> m_audio;
93         ePtr<eDVBVideo> m_video;
94         ePtr<eDVBPCR> m_pcr;
95         ePtr<eDVBTText> m_text;
96         int m_vpid, m_vtype, m_apid, m_atype, m_pcrpid, m_textpid;
97         enum
98         {
99                 changeVideo = 1, 
100                 changeAudio = 2, 
101                 changePCR   = 4,
102                 changeText  = 8
103         };
104         int m_changed, m_decoder;
105         int m_is_ff, m_is_sm, m_is_trickmode;
106         int setState();
107         ePtr<eConnection> m_demux_event;
108         
109         void demux_event(int event);
110 public:
111         enum { pidNone = -1 };
112         eTSMPEGDecoder(eDVBDemux *demux, int decoder);
113         virtual ~eTSMPEGDecoder();
114         RESULT setVideoPID(int vpid, int type);
115         RESULT setAudioPID(int apid, int type);
116         RESULT setAudioChannel(int channel);
117         int getAudioChannel();
118         RESULT setPCMDelay(int delay);
119         int getPCMDelay() { return m_pcm_delay; }
120         RESULT setAC3Delay(int delay);
121         int getAC3Delay() { return m_ac3_delay; }
122         RESULT setSyncPCR(int pcrpid);
123         RESULT setTextPID(int textpid);
124         RESULT setSyncMaster(int who);
125         RESULT start();
126         RESULT freeze(int cont);
127         RESULT unfreeze();
128         RESULT setSinglePictureMode(int when);
129         RESULT setPictureSkipMode(int what);
130         RESULT setFastForward(int frames_to_skip);
131         RESULT setSlowMotion(int repeat);
132         RESULT setZoom(int what);
133         RESULT flush();
134         RESULT setTrickmode(int what);
135         RESULT showSinglePic(const char *filename);
136         RESULT setRadioPic(const std::string &filename);
137                 /* what 0=auto, 1=video, 2=audio. */
138         RESULT getPTS(int what, pts_t &pts);
139 };
140
141 #endif