X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/bf199875386cd93ad37c3a9541b5a98ada9f608c..2c333dec2921a4d9248a33e4be7bc075f930f859:/lib/dvb/decoder.cpp diff --git a/lib/dvb/decoder.cpp b/lib/dvb/decoder.cpp index b49bb2c7..2b8e4b8b 100644 --- a/lib/dvb/decoder.cpp +++ b/lib/dvb/decoder.cpp @@ -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)