openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
decoder.h
Go to the documentation of this file.
1 #ifndef __decoder_h
2 #define __decoder_h
3 
4 #include <lib/base/object.h>
5 #include <lib/dvb/demux.h>
6 
7 class eSocketNotifier;
8 
9 class eDVBAudio: public iObject
10 {
11  DECLARE_REF(eDVBAudio);
12 private:
13  ePtr<eDVBDemux> m_demux;
14  int m_fd, m_fd_demux, m_dev, m_is_freezed;
15 public:
17  eDVBAudio(eDVBDemux *demux, int dev);
19  void setChannel(int channel);
20  void stop();
21  int startPid(int pid, int type);
22  void flush();
23  void freeze();
24  void unfreeze();
25  int getPTS(pts_t &now);
26  virtual ~eDVBAudio();
27 };
28 
29 class eDVBVideo: public iObject, public sigc::trackable
30 {
31  DECLARE_REF(eDVBVideo);
32 private:
33  ePtr<eDVBDemux> m_demux;
34  int m_fd, m_fd_demux, m_dev;
35  bool m_fcc_enable;
36  static int m_close_invalidates_attributes;
37  int m_is_slow_motion, m_is_fast_forward, m_is_freezed;
39  void video_event(int what);
40  sigc::signal1<void, struct iTSMPEGDecoder::videoEvent> m_event;
41  int m_width, m_height, m_framerate, m_aspect, m_progressive, m_gamma;
42  static int readApiSize(int fd, int &xres, int &yres, int &aspect);
43 public:
44  enum { UNKNOWN = -1, MPEG2, MPEG4_H264, VC1 = 3, MPEG4_Part2, VC1_SM, MPEG1, H265_HEVC, AVS = 16, AVS2 = 40 };
45  eDVBVideo(eDVBDemux *demux, int dev, bool fcc_enable=false);
46  void stop();
47  int startPid(int pid, int type=MPEG2);
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  RESULT connectEvent(const sigc::slot1<void, struct iTSMPEGDecoder::videoEvent> &event, ePtr<eConnection> &conn);
56  int getWidth();
57  int getHeight();
58  int getProgressive();
59  int getFrameRate();
60  int getAspect();
61  int getGamma();
62 };
63 
64 class eDVBPCR: public iObject
65 {
66  DECLARE_REF(eDVBPCR);
67 private:
68  ePtr<eDVBDemux> m_demux;
69  int m_fd_demux, m_dev;
70 public:
71  eDVBPCR(eDVBDemux *demux, int dev);
72  int startPid(int pid);
73  void stop();
74  virtual ~eDVBPCR();
75 };
76 
77 class eDVBTText: public iObject
78 {
79  DECLARE_REF(eDVBTText);
80 private:
81  ePtr<eDVBDemux> m_demux;
82  int m_fd_demux, m_dev;
83 public:
84  eDVBTText(eDVBDemux *demux, int dev);
85  int startPid(int pid);
86  void stop();
87  virtual ~eDVBTText();
88 };
89 
90 class eTSMPEGDecoder: public sigc::trackable, public iTSMPEGDecoder
91 {
92  DECLARE_REF(eTSMPEGDecoder);
93 private:
94  static int m_pcm_delay;
95  static int m_ac3_delay;
96  static int m_audio_channel;
97  std::string m_radio_pic;
98  ePtr<eDVBDemux> m_demux;
99  ePtr<eDVBAudio> m_audio;
100  ePtr<eDVBVideo> m_video;
101  ePtr<eDVBPCR> m_pcr;
102  ePtr<eDVBTText> m_text;
103  int m_vpid, m_vtype, m_apid, m_atype, m_pcrpid, m_textpid;
104  enum
105  {
106  changeVideo = 1,
107  changeAudio = 2,
108  changePCR = 4,
109  changeText = 8,
110  changeState = 16,
111  };
112  int m_changed, m_decoder;
113  int m_state;
114  int m_ff_sm_ratio;
115  bool m_has_audio;
116  int setState();
117  ePtr<eConnection> m_demux_event_conn;
118  ePtr<eConnection> m_video_event_conn;
119 
120  void demux_event(int event);
121  void video_event(struct videoEvent);
122  sigc::signal1<void, struct videoEvent> m_video_event;
123  int m_video_clip_fd;
124  ePtr<eTimer> m_showSinglePicTimer;
125  int m_fcc_fd;
126  bool m_fcc_enable;
127  int m_fcc_state;
128  int m_fcc_feid;
129  int m_fcc_vpid;
130  int m_fcc_vtype;
131  int m_fcc_pcrpid;
132  void finishShowSinglePic(); // called by timer
133 public:
134  enum { pidNone = -1 };
135  eTSMPEGDecoder(eDVBDemux *demux, int decoder);
136  virtual ~eTSMPEGDecoder();
137  RESULT setVideoPID(int vpid, int type);
138  RESULT setAudioPID(int apid, int type);
139  RESULT setAudioChannel(int channel);
140  int getAudioChannel();
141  RESULT setPCMDelay(int delay);
142  int getPCMDelay() { return m_pcm_delay; }
143  RESULT setAC3Delay(int delay);
144  int getAC3Delay() { return m_ac3_delay; }
145  RESULT setSyncPCR(int pcrpid);
146  RESULT setTextPID(int textpid);
147  RESULT setSyncMaster(int who);
148 
149  /*
150  The following states exist:
151 
152  - stop: data source closed, no playback
153  - pause: data source active, decoder paused
154  - play: data source active, decoder consuming
155  - decoder fast forward: data source linear, decoder drops frames
156  - trickmode, highspeed reverse: data source fast forwards / reverses, decoder just displays frames as fast as it can
157  - slow motion: decoder displays frames multiple times
158  */
159  enum {
166  };
167  RESULT set(); /* just apply settings, keep state */
168  RESULT play(); /* -> play */
169  RESULT pause(); /* -> pause */
170  RESULT setFastForward(int frames_to_skip); /* -> decoder fast forward */
171  RESULT setSlowMotion(int repeat); /* -> slow motion **/
172  RESULT setTrickmode(); /* -> highspeed fast forward */
173 
174  RESULT flush();
175  RESULT showSinglePic(const char *filename);
176  RESULT setRadioPic(const std::string &filename);
177  /* what 0=auto, 1=video, 2=audio. */
178  RESULT getPTS(int what, pts_t &pts);
179  RESULT connectVideoEvent(const sigc::slot1<void, struct videoEvent> &event, ePtr<eConnection> &connection);
180  int getVideoWidth();
181  int getVideoHeight();
182  int getVideoProgressive();
183  int getVideoFrameRate();
184  int getVideoAspect();
185  int getVideoGamma();
186  static RESULT setHwPCMDelay(int delay);
187  static RESULT setHwAC3Delay(int delay);
188 
189  enum
190  {
194  };
195 
196  RESULT prepareFCC(int fe_id, int vpid, int vtype, int pcrpid);
197  RESULT fccStart();
198  RESULT fccStop();
201  RESULT fccUpdatePids(int fe_id, int vpid, int vtype, int pcrpid);
202  RESULT fccSetPids(int fe_id, int vpid, int vtype, int pcrpid);
203  RESULT fccGetFD();
204  RESULT fccFreeFD();
205 };
206 
207 #endif
long long pts_t
Definition: cfile.h:7
Definition: decoder.h:10
void flush()
Definition: decoder.cpp:187
@ aDTS
Definition: decoder.h:16
@ aDDP
Definition: decoder.h:16
@ aAC4
Definition: decoder.h:16
@ aAACHE
Definition: decoder.h:16
@ aDTSHD
Definition: decoder.h:16
@ aMPEG
Definition: decoder.h:16
@ aAC3
Definition: decoder.h:16
@ aAAC
Definition: decoder.h:16
@ aDRA
Definition: decoder.h:16
@ aLPCM
Definition: decoder.h:16
void setChannel(int channel)
Definition: decoder.cpp:223
int startPid(int pid, int type)
Definition: decoder.cpp:62
@ aStereo
Definition: decoder.h:18
@ aMonoLeft
Definition: decoder.h:18
@ aMonoRight
Definition: decoder.h:18
eDVBAudio(eDVBDemux *demux, int dev)
Definition: decoder.cpp:36
int getPTS(pts_t &now)
Definition: decoder.cpp:242
void unfreeze()
Definition: decoder.cpp:211
void freeze()
Definition: decoder.cpp:199
void stop()
Definition: decoder.cpp:167
virtual ~eDVBAudio()
Definition: decoder.cpp:252
Definition: demux.h:11
Definition: decoder.h:65
int startPid(int pid)
Definition: decoder.cpp:729
virtual ~eDVBPCR()
Definition: decoder.cpp:787
void stop()
Definition: decoder.cpp:778
eDVBPCR(eDVBDemux *demux, int dev)
Definition: decoder.cpp:720
Definition: decoder.h:78
void stop()
Definition: decoder.cpp:856
int startPid(int pid)
Definition: decoder.cpp:806
eDVBTText(eDVBDemux *demux, int dev)
Definition: decoder.cpp:796
virtual ~eDVBTText()
Definition: decoder.cpp:865
Definition: decoder.h:30
int getProgressive()
Definition: decoder.cpp:672
int getAspect()
Definition: decoder.cpp:661
int getFrameRate()
Definition: decoder.cpp:687
virtual ~eDVBVideo()
Definition: decoder.cpp:544
void stop()
Definition: decoder.cpp:442
int setSlowMotion(int repeat)
Definition: decoder.cpp:502
int getPTS(pts_t &now)
Definition: decoder.cpp:532
@ H265_HEVC
Definition: decoder.h:44
@ AVS2
Definition: decoder.h:44
@ MPEG1
Definition: decoder.h:44
@ AVS
Definition: decoder.h:44
@ MPEG4_Part2
Definition: decoder.h:44
@ UNKNOWN
Definition: decoder.h:44
@ MPEG2
Definition: decoder.h:44
@ VC1_SM
Definition: decoder.h:44
@ MPEG4_H264
Definition: decoder.h:44
@ VC1
Definition: decoder.h:44
void unfreeze()
Definition: decoder.cpp:490
RESULT connectEvent(const sigc::slot1< void, struct iTSMPEGDecoder::videoEvent > &event, ePtr< eConnection > &conn)
Definition: decoder.cpp:620
int setFastForward(int skip)
Definition: decoder.cpp:517
int getGamma()
Definition: decoder.cpp:703
void freeze()
Definition: decoder.cpp:478
void flush()
Definition: decoder.cpp:466
int getWidth()
Definition: decoder.cpp:639
eDVBVideo(eDVBDemux *demux, int dev, bool fcc_enable=false)
Definition: decoder.cpp:266
int startPid(int pid, int type=MPEG2)
Definition: decoder.cpp:336
int getHeight()
Definition: decoder.cpp:650
Gives a callback when data on a file descriptor is ready.
Definition: ebase.h:146
Definition: decoder.h:91
RESULT connectVideoEvent(const sigc::slot1< void, struct videoEvent > &event, ePtr< eConnection > &connection)
Definition: decoder.cpp:1407
RESULT setRadioPic(const std::string &filename)
Definition: decoder.cpp:1298
RESULT fccUpdatePids(int fe_id, int vpid, int vtype, int pcrpid)
Definition: decoder.cpp:1537
RESULT play()
Definition: decoder.cpp:1184
RESULT setPCMDelay(int delay)
Definition: decoder.cpp:1058
RESULT setAC3Delay(int delay)
Definition: decoder.cpp:1063
int getAudioChannel()
Definition: decoder.cpp:1146
RESULT fccStop()
Definition: decoder.cpp:1575
eTSMPEGDecoder(eDVBDemux *demux, int decoder)
Definition: decoder.cpp:1068
@ statePause
Definition: decoder.h:161
@ stateTrickmode
Definition: decoder.h:164
@ stateDecoderFastForward
Definition: decoder.h:163
@ statePlay
Definition: decoder.h:162
@ stateSlowMotion
Definition: decoder.h:165
@ stateStop
Definition: decoder.h:160
RESULT fccGetFD()
Definition: decoder.cpp:1668
@ fcc_state_ready
Definition: decoder.h:192
@ fcc_state_decoding
Definition: decoder.h:193
@ fcc_state_stop
Definition: decoder.h:191
RESULT fccDecoderStop()
Definition: decoder.cpp:1509
int getVideoAspect()
Definition: decoder.cpp:1446
RESULT pause()
Definition: decoder.cpp:1198
RESULT fccDecoderStart()
Definition: decoder.cpp:1486
RESULT setAudioPID(int apid, int type)
Definition: decoder.cpp:1113
static RESULT setHwPCMDelay(int delay)
Definition: decoder.cpp:1031
int getVideoGamma()
Definition: decoder.cpp:1453
RESULT set()
Definition: decoder.cpp:1179
RESULT setSyncPCR(int pcrpid)
Definition: decoder.cpp:1151
int getAC3Delay()
Definition: decoder.h:144
RESULT showSinglePic(const char *filename)
Definition: decoder.cpp:1304
RESULT flush()
Definition: decoder.cpp:1253
int getVideoFrameRate()
Definition: decoder.cpp:1439
RESULT setSyncMaster(int who)
Definition: decoder.cpp:1174
RESULT setTextPID(int textpid)
Definition: decoder.cpp:1164
virtual ~eTSMPEGDecoder()
Definition: decoder.cpp:1089
static RESULT setHwAC3Delay(int delay)
Definition: decoder.cpp:1044
int getVideoWidth()
Definition: decoder.cpp:1418
RESULT setAudioChannel(int channel)
Definition: decoder.cpp:1129
RESULT fccSetPids(int fe_id, int vpid, int vtype, int pcrpid)
Definition: decoder.cpp:1603
int getVideoHeight()
Definition: decoder.cpp:1425
RESULT getPTS(int what, pts_t &pts)
Definition: decoder.cpp:1274
int getPCMDelay()
Definition: decoder.h:142
RESULT fccStart()
Definition: decoder.cpp:1553
RESULT setVideoPID(int vpid, int type)
Definition: decoder.cpp:1102
@ pidNone
Definition: decoder.h:134
RESULT fccFreeFD()
Definition: decoder.cpp:1682
int getVideoProgressive()
Definition: decoder.cpp:1432
RESULT prepareFCC(int fe_id, int vpid, int vtype, int pcrpid)
Definition: decoder.cpp:1471
RESULT setFastForward(int frames_to_skip)
Definition: decoder.cpp:1207
RESULT setTrickmode()
Definition: decoder.cpp:1239
RESULT setSlowMotion(int repeat)
Definition: decoder.cpp:1224
Definition: object.h:15
Definition: idvb.h:770
const char * filename
Definition: epng.h:36
int repeat
Definition: SystemInfo.py:305
decoder
Definition: Extensions/MiniTV/plugin.py:9
int RESULT
Definition: object.h:12
std::string int int int aspect
Definition: picload.cpp:1503
Definition: idvb.h:832