X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/fdad4815a5c267a5f20f10604617b833d85ec32e..59f9f67261d0e6018293871d00cbd12572fbb4c7:/lib/dvb/decoder.h diff --git a/lib/dvb/decoder.h b/lib/dvb/decoder.h index cd59b3d9..3a0fbac1 100644 --- a/lib/dvb/decoder.h +++ b/lib/dvb/decoder.h @@ -8,12 +8,12 @@ class eSocketNotifier; class eDVBAudio: public iObject { -DECLARE_REF(eDVBAudio); + DECLARE_REF(eDVBAudio); private: ePtr m_demux; int m_fd, m_fd_demux, m_dev, m_is_freezed; public: - enum { aMPEG, aAC3, aDTS, aAAC }; + enum { aMPEG, aAC3, aDTS, aAAC, aAACHE, aLPCM }; eDVBAudio(eDVBDemux *demux, int dev); enum { aMonoLeft, aStereo, aMonoRight }; void setChannel(int channel); @@ -36,7 +36,7 @@ public: class eDVBVideo: public iObject, public Object { -DECLARE_REF(eDVBVideo); + DECLARE_REF(eDVBVideo); private: ePtr m_demux; int m_fd, m_fd_demux, m_dev; @@ -44,11 +44,12 @@ private: m_fd_video; #endif int m_is_slow_motion, m_is_fast_forward, m_is_freezed; - eSocketNotifier *m_sn; + ePtr m_sn; void video_event(int what); Signal1 m_event; + int m_width, m_height, m_framerate, m_aspect, m_progressive; public: - enum { MPEG2, MPEG4_H264 }; + enum { MPEG2, MPEG4_H264, MPEG1, MPEG4_Part2, VC1, VC1_SM }; eDVBVideo(eDVBDemux *demux, int dev); void stop(); #if HAVE_DVB_API_VERSION < 3 @@ -67,16 +68,21 @@ public: int getPTS(pts_t &now); virtual ~eDVBVideo(); RESULT connectEvent(const Slot1 &event, ePtr &conn); + int getWidth(); + int getHeight(); + int getProgressive(); + int getFrameRate(); + int getAspect(); }; class eDVBPCR: public iObject { -DECLARE_REF(eDVBPCR); + DECLARE_REF(eDVBPCR); private: ePtr m_demux; - int m_fd_demux; + int m_fd_demux, m_dev; public: - eDVBPCR(eDVBDemux *demux); + eDVBPCR(eDVBDemux *demux, int dev); #if HAVE_DVB_API_VERSION < 3 int setPid(int pid); int startPid(); @@ -89,12 +95,12 @@ public: class eDVBTText: public iObject { -DECLARE_REF(eDVBTText); + DECLARE_REF(eDVBTText); private: ePtr m_demux; - int m_fd_demux; + int m_fd_demux, m_dev; public: - eDVBTText(eDVBDemux *demux); + eDVBTText(eDVBDemux *demux, int dev); int startPid(int pid); void stop(); virtual ~eDVBTText(); @@ -102,12 +108,12 @@ public: class eTSMPEGDecoder: public Object, public iTSMPEGDecoder { + DECLARE_REF(eTSMPEGDecoder); +private: static int m_pcm_delay; static int m_ac3_delay; static int m_audio_channel; -DECLARE_REF(eTSMPEGDecoder); std::string m_radio_pic; -private: ePtr m_demux; ePtr m_audio; ePtr m_video; @@ -119,10 +125,12 @@ private: changeVideo = 1, changeAudio = 2, changePCR = 4, - changeText = 8 + changeText = 8, + changeState = 16, }; int m_changed, m_decoder; - int m_is_ff, m_is_sm, m_is_trickmode; + int m_state; + int m_ff_sm_ratio; int setState(); ePtr m_demux_event_conn; ePtr m_video_event_conn; @@ -130,6 +138,9 @@ private: void demux_event(int event); void video_event(struct videoEvent); Signal1 m_video_event; + int m_video_clip_fd; + ePtr m_showSinglePicTimer; + void finishShowSinglePic(); // called by timer public: enum { pidNone = -1 }; eTSMPEGDecoder(eDVBDemux *demux, int decoder); @@ -145,22 +156,45 @@ public: RESULT setSyncPCR(int pcrpid); RESULT setTextPID(int textpid); RESULT setSyncMaster(int who); - RESULT start(); - RESULT preroll(); - RESULT freeze(int cont); - RESULT unfreeze(); - RESULT setSinglePictureMode(int when); - RESULT setPictureSkipMode(int what); - RESULT setFastForward(int frames_to_skip); - RESULT setSlowMotion(int repeat); - RESULT setZoom(int what); + + /* + The following states exist: + + - stop: data source closed, no playback + - pause: data source active, decoder paused + - play: data source active, decoder consuming + - decoder fast forward: data source linear, decoder drops frames + - trickmode, highspeed reverse: data source fast forwards / reverses, decoder just displays frames as fast as it can + - slow motion: decoder displays frames multiple times + */ + enum { + stateStop, + statePause, + statePlay, + stateDecoderFastForward, + stateTrickmode, + stateSlowMotion + }; + RESULT set(); /* just apply settings, keep state */ + RESULT play(); /* -> play */ + RESULT pause(); /* -> pause */ + RESULT setFastForward(int frames_to_skip); /* -> decoder fast forward */ + RESULT setSlowMotion(int repeat); /* -> slow motion **/ + RESULT setTrickmode(); /* -> highspeed fast forward */ + RESULT flush(); - RESULT setTrickmode(int what); RESULT showSinglePic(const char *filename); RESULT setRadioPic(const std::string &filename); /* what 0=auto, 1=video, 2=audio. */ RESULT getPTS(int what, pts_t &pts); RESULT connectVideoEvent(const Slot1 &event, ePtr &connection); + int getVideoWidth(); + int getVideoHeight(); + int getVideoProgressive(); + int getVideoFrameRate(); + int getVideoAspect(); + static RESULT setHwPCMDelay(int delay); + static RESULT setHwAC3Delay(int delay); }; #endif