fix flags
[enigma2.git] / lib / dvb / decoder.cpp
index b49bb2c789258b3ed0ce6195df26ab1f82cbe921..2b8e4b8bc114882451143b6351404ea1b0fcd1d1 100644 (file)
@@ -99,6 +99,8 @@ int eDVBAudio::startPid(int pid, int type)
        if (::ioctl(m_fd, AUDIO_SET_BYPASS_MODE, bypass) < 0)
                eWarning("audio: AUDIO_SET_BYPASS_MODE: %m");
 
+       freeze();
+
        if (::ioctl(m_fd, AUDIO_PLAY) < 0)
                eWarning("audio: AUDIO_PLAY: %m");
        return 0;
@@ -106,6 +108,7 @@ int eDVBAudio::startPid(int pid, int type)
 
 void eDVBAudio::stop()
 {
+       flush();
        if (::ioctl(m_fd, AUDIO_STOP) < 0)
                eWarning("audio: AUDIO_STOP: %m");
 #if HAVE_DVB_API_VERSION > 2
@@ -160,6 +163,7 @@ int eDVBAudio::getPTS(pts_t &now)
 
 eDVBAudio::~eDVBAudio()
 {
+       unfreeze();
        if (m_fd >= 0)
                ::close(m_fd);
        if (m_fd_demux >= 0)
@@ -225,6 +229,10 @@ int eDVBVideo::startPid(int pid, int type)
                eWarning("video: DMX_START: %m");
                return -errno;
        }
+
+       eDebug("FREEZE.\n");
+       freeze();
+
        if (::ioctl(m_fd, VIDEO_PLAY) < 0)
                eWarning("video: VIDEO_PLAY: %m");
        return 0;
@@ -257,12 +265,14 @@ void eDVBVideo::flush()
 
 void eDVBVideo::freeze()
 {
+       eDebug("VIDEO_FREEZE");
        if (::ioctl(m_fd, VIDEO_FREEZE) < 0)
                eDebug("video: VIDEO_FREEZE: %m");
 }
 
 void eDVBVideo::unfreeze()
 {
+       eDebug("VIDEO_CONTINUE");
        if (::ioctl(m_fd, VIDEO_CONTINUE) < 0)
                eDebug("video: VIDEO_CONTINUE: %m");
 }
@@ -292,6 +302,7 @@ eDVBVideo::~eDVBVideo()
                setSlowMotion(0);
        if (m_is_fast_forward)
                setFastForward(0);
+       unfreeze();
        if (m_fd >= 0)
                ::close(m_fd);
        if (m_fd_demux >= 0)
@@ -698,6 +709,16 @@ RESULT eTSMPEGDecoder::setSyncMaster(int who)
 }
 
 RESULT eTSMPEGDecoder::start()
+{
+       RESULT r;
+       r = setState();
+       if (r)
+               return r;
+       return unfreeze();
+}
+
+       /* preroll is start in freezed mode. */
+RESULT eTSMPEGDecoder::preroll()
 {
        return setState();
 }
@@ -840,6 +861,8 @@ RESULT eTSMPEGDecoder::showSinglePic(const char *filename)
                                        eDebug("VIDEO_SELECT_SOURCE MEMORY failed (%m)");
                                if (ioctl(vfd, VIDEO_PLAY) < 0)
                                        eDebug("VIDEO_PLAY failed (%m)");
+                               if (::ioctl(vfd, VIDEO_CONTINUE) < 0)
+                                       eDebug("video: VIDEO_CONTINUE: %m");
                                int cnt=0;
                                int pos=0;
                                while(cnt<2)