aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpopcornmix <popcornmix@gmail.com>2013-11-18 11:54:25 +0000
committerpopcornmix <popcornmix@gmail.com>2013-11-28 20:43:47 +0000
commitce463f6a1c5164f292a605ab8eb2ea4da8c07932 (patch)
tree9a4a401738e07a67aa39206c8c8963221219eda4
parent037800e745c64549dc0c7887efd1a0954a6aa03e (diff)
[rbp/omxplayer] Defer demuxer pause until buffers full
See #3377
-rw-r--r--xbmc/cores/omxplayer/OMXPlayer.cpp20
-rw-r--r--xbmc/cores/omxplayer/OMXPlayer.h2
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;
};