decoder: switch off audio in trickmodes
[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 m_is_ff, m_is_sm, m_is_trickmode;
82         int setState();
83         ePtr<eConnection> m_demux_event;
84         
85         void demux_event(int event);
86 public:
87         enum { pidNone = -1 };
88         eTSMPEGDecoder(eDVBDemux *demux, int decoder);
89         virtual ~eTSMPEGDecoder();
90         RESULT setVideoPID(int vpid);
91         RESULT setAudioPID(int apid, int type);
92         RESULT setSyncPCR(int pcrpid);
93         RESULT setSyncMaster(int who);
94         RESULT start();
95         RESULT freeze(int cont);
96         RESULT unfreeze();
97         RESULT setSinglePictureMode(int when);
98         RESULT setPictureSkipMode(int what);
99         RESULT setFastForward(int frames_to_skip);
100         RESULT setSlowMotion(int repeat);
101         RESULT setZoom(int what);
102         RESULT flush();
103         RESULT setTrickmode(int what);
104 };
105 #endif