add preroll, to start in frozen mode after play
authorFelix Domke <tmbinc@elitedvb.net>
Tue, 17 Apr 2007 15:47:54 +0000 (15:47 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Tue, 17 Apr 2007 15:47:54 +0000 (15:47 +0000)
lib/dvb/decoder.cpp
lib/dvb/decoder.h

index b49bb2c789258b3ed0ce6195df26ab1f82cbe921..fcc38901152788b060e13549f5939ad42d60bafd 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;
@@ -225,6 +227,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 +263,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");
 }
@@ -698,6 +706,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();
 }
index c864c0953401fc28751211415edf15f26e8bdabd..001139e5b190453726e41c1419706516facae7aa 100644 (file)
@@ -132,6 +132,7 @@ public:
        RESULT setTextPID(int textpid);
        RESULT setSyncMaster(int who);
        RESULT start();
+       RESULT preroll();
        RESULT freeze(int cont);
        RESULT unfreeze();
        RESULT setSinglePictureMode(int when);