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