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