7bd16fd1bb3b077457c2b5e727739e30a5ec1e2b
[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         virtual ~eDVBAudio();
26 };
27
28 class eDVBVideo: public iObject
29 {
30 DECLARE_REF(eDVBVideo);
31 private:
32         ePtr<eDVBDemux> m_demux;
33         int m_fd, m_fd_demux;
34 public:
35         eDVBVideo(eDVBDemux *demux, int dev);
36         int startPid(int pid);
37         void stop();
38 #if HAVE_DVB_API_VERSION < 3
39         void start();
40         void stopPid();
41 #endif
42         void flush();
43         void freeze();
44         void unfreeze();
45         virtual ~eDVBVideo();
46 };
47
48 class eDVBPCR: public iObject
49 {
50 DECLARE_REF(eDVBPCR);
51 private:
52         ePtr<eDVBDemux> m_demux;
53         int m_fd_demux;
54 public:
55         eDVBPCR(eDVBDemux *demux);
56         int startPid(int pid);
57         void stop();
58         virtual ~eDVBPCR();
59 };
60
61 class eTSMPEGDecoder: public Object, public iTSMPEGDecoder
62 {
63 DECLARE_REF(eTSMPEGDecoder);
64 private:
65         ePtr<eDVBDemux> m_demux;
66         ePtr<eDVBAudio> m_audio;
67         ePtr<eDVBVideo> m_video;
68         ePtr<eDVBPCR> m_pcr;
69         int m_vpid, m_apid, m_atype, m_pcrpid;
70         enum
71         {
72                 changeVideo = 1, 
73                 changeAudio = 2, 
74                 changePCR   = 4
75         };
76         int m_changed;
77         int setState();
78         ePtr<eConnection> m_demux_event;
79         
80         void demux_event(int event);
81 public:
82         enum { pidNone = -1 };
83         eTSMPEGDecoder(eDVBDemux *demux, int decoder);
84         virtual ~eTSMPEGDecoder();
85         RESULT setVideoPID(int vpid);
86         RESULT setAudioPID(int apid, int type);
87         RESULT setSyncPCR(int pcrpid);
88         RESULT setSyncMaster(int who);
89         RESULT start();
90         RESULT freeze(int cont);
91         RESULT unfreeze();
92         RESULT setSinglePictureMode(int when);
93         RESULT setPictureSkipMode(int what);
94         RESULT setSlowMotion(int repeat);
95         RESULT setZoom(int what);
96         RESULT flush();
97 };
98 #endif