same fix for slowMotion
[enigma2.git] / lib / dvb / decoder.cpp
index c550163e5e984c9e0cd04176c6456a631ea61b52..5fa59ed4f352d132c6f2754372904423658e22d7 100644 (file)
@@ -931,10 +931,10 @@ RESULT eTSMPEGDecoder::setAC3Delay(int delay)
 }
 
 eTSMPEGDecoder::eTSMPEGDecoder(eDVBDemux *demux, int decoder)
-       :m_demux(demux), m_changed(0), m_decoder(decoder), m_video_clip_fd(-1), m_showSinglePicTimer(eApp)
+       :m_demux(demux), m_changed(0), m_decoder(decoder), m_video_clip_fd(-1), m_showSinglePicTimer(eTimer::create(eApp))
 {
        demux->connectEvent(slot(*this, &eTSMPEGDecoder::demux_event), m_demux_event_conn);
-       CONNECT(m_showSinglePicTimer.timeout, eTSMPEGDecoder::finishShowSinglePic);
+       CONNECT(m_showSinglePicTimer->timeout, eTSMPEGDecoder::finishShowSinglePic);
        m_is_ff = m_is_sm = m_is_trickmode = 0;
 }
 
@@ -1069,6 +1069,7 @@ RESULT eTSMPEGDecoder::setFastForward(int frames_to_skip)
        m_is_ff = frames_to_skip != 0;
 
        setState();
+       unfreeze(); // audio might be restarted and still in preroll (freezed) state.
 
        if (m_video)
                return m_video->setFastForward(frames_to_skip);
@@ -1081,6 +1082,7 @@ RESULT eTSMPEGDecoder::setSlowMotion(int repeat)
        m_is_sm = repeat != 0;
 
        setState();
+       unfreeze(); // audio might be restarted and still in preroll (freezed) state.
 
        if (m_video)
                return m_video->setSlowMotion(repeat);
@@ -1191,7 +1193,7 @@ RESULT eTSMPEGDecoder::showSinglePic(const char *filename)
                                if (!seq_end_avail)
                                        write(m_video_clip_fd, seq_end, sizeof(seq_end));
                                write(m_video_clip_fd, stuffing, 8192);
-                               m_showSinglePicTimer.start(150, true);
+                               m_showSinglePicTimer->start(150, true);
                        }
                        close(f);
                }