diff options
author | popcornmix <popcornmix@gmail.com> | 2013-11-18 11:54:25 +0000 |
---|---|---|
committer | popcornmix <popcornmix@gmail.com> | 2013-11-28 20:43:47 +0000 |
commit | ce463f6a1c5164f292a605ab8eb2ea4da8c07932 (patch) | |
tree | 9a4a401738e07a67aa39206c8c8963221219eda4 | |
parent | 037800e745c64549dc0c7887efd1a0954a6aa03e (diff) |
[rbp/omxplayer] Defer demuxer pause until buffers full
See #3377
-rw-r--r-- | xbmc/cores/omxplayer/OMXPlayer.cpp | 20 | ||||
-rw-r--r-- | xbmc/cores/omxplayer/OMXPlayer.h | 2 |
2 files changed, 17 insertions, 5 deletions
diff --git a/xbmc/cores/omxplayer/OMXPlayer.cpp b/xbmc/cores/omxplayer/OMXPlayer.cpp index 6ba8156e3a..e461bf3aec 100644 --- a/xbmc/cores/omxplayer/OMXPlayer.cpp +++ b/xbmc/cores/omxplayer/OMXPlayer.cpp @@ -539,7 +539,8 @@ COMXPlayer::COMXPlayer(IPlayerCallback &callback) m_omxPlayerAudio(&m_av_clock, m_messenger), m_dvdPlayerSubtitle(&m_overlayContainer), m_dvdPlayerTeletext(), - m_ready(true) + m_ready(true), + m_DemuxerPausePending(false) { m_pDemuxer = NULL; m_pSubtitleDemuxer = NULL; @@ -1397,6 +1398,12 @@ void COMXPlayer::Process() if ((!m_omxPlayerAudio.AcceptsData() && m_CurrentAudio.id >= 0) || (!m_omxPlayerVideo.AcceptsData() && m_CurrentVideo.id >= 0)) { + if(m_pDemuxer && m_DemuxerPausePending) + { + m_DemuxerPausePending = false; + m_pDemuxer->SetSpeed(DVD_PLAYSPEED_PAUSE); + } + Sleep(10); continue; } @@ -2577,11 +2584,14 @@ void COMXPlayer::HandleMessages() m_omxPlayerAudio.SetSpeed(speed); m_omxPlayerVideo.SetSpeed(speed); - // TODO - we really shouldn't pause demuxer - // until our buffers are somewhat filled + // We can't pause demuxer until our buffers are full. Doing so will result in continued + // calls to Read() which may then block indefinitely (CDVDInputStreamRTMP for example). if(m_pDemuxer) - m_pDemuxer->SetSpeed(speed); - + { + m_DemuxerPausePending = (speed == DVD_PLAYSPEED_PAUSE); + if (!m_DemuxerPausePending) + m_pDemuxer->SetSpeed(speed); + } CLog::Log(LOGDEBUG, "COMXPlayer - CDVDMsg::PLAYER_SETSPEED speed : %d", speed); } else if (pMsg->IsType(CDVDMsg::PLAYER_CHANNEL_SELECT_NUMBER) && m_messenger.GetPacketCount(CDVDMsg::PLAYER_CHANNEL_SELECT_NUMBER) == 0) diff --git a/xbmc/cores/omxplayer/OMXPlayer.h b/xbmc/cores/omxplayer/OMXPlayer.h index a98e161cce..96eed11367 100644 --- a/xbmc/cores/omxplayer/OMXPlayer.h +++ b/xbmc/cores/omxplayer/OMXPlayer.h @@ -515,4 +515,6 @@ protected: bool m_HasVideo; bool m_HasAudio; + + bool m_DemuxerPausePending; }; |