aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xbmc/cores/dvdplayer/DVDPlayer.cpp34
-rw-r--r--xbmc/cores/dvdplayer/DVDPlayer.h12
2 files changed, 26 insertions, 20 deletions
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp
index 338d77c087..50bc779e37 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.cpp
+++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp
@@ -282,7 +282,7 @@ CDVDPlayer::CDVDPlayer(IPlayerCallback& callback)
m_bAbortRequest = false;
m_errorCount = 0;
m_playSpeed = DVD_PLAYSPEED_NORMAL;
- m_caching = false;
+ m_caching = CACHESTATE_DONE;
m_seeking = false;
m_pDlgCache = NULL;
@@ -847,7 +847,7 @@ void CDVDPlayer::Process()
if(!m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD)
&& !m_pInputStream->IsStreamType(DVDSTREAM_TYPE_TV)
&& !m_pInputStream->IsStreamType(DVDSTREAM_TYPE_HTSP))
- SetCaching(true);
+ SetCaching(CACHESTATE_FULL);
#endif
while (!m_bAbortRequest)
@@ -915,7 +915,7 @@ void CDVDPlayer::Process()
{
Sleep(10);
if (m_caching)
- SetCaching(false);
+ SetCaching(CACHESTATE_DONE);
continue;
}
@@ -996,7 +996,7 @@ void CDVDPlayer::Process()
// if we are caching, start playing it again
if (m_caching && !m_bAbortRequest)
- SetCaching(false);
+ SetCaching(CACHESTATE_DONE);
// while players are still playing, keep going to allow seekbacks
if(m_dvdPlayerAudio.m_messageQueue.GetDataSize() > 0
@@ -1108,7 +1108,7 @@ void CDVDPlayer::ProcessAudioData(CDemuxStream* pStream, DemuxPacket* pPacket)
// check if we are too slow and need to recache
if(CheckStartCaching(m_CurrentAudio) && m_dvdPlayerAudio.IsStalled())
- SetCaching(true);
+ SetCaching(CACHESTATE_FULL);
CheckContinuity(m_CurrentAudio, pPacket);
if(pPacket->dts != DVD_NOPTS_VALUE)
@@ -1144,7 +1144,7 @@ void CDVDPlayer::ProcessVideoData(CDemuxStream* pStream, DemuxPacket* pPacket)
// check if we are too slow and need to recache
if(CheckStartCaching(m_CurrentVideo) && m_dvdPlayerVideo.IsStalled())
- SetCaching(true);
+ SetCaching(CACHESTATE_FULL);
if( pPacket->iSize != 4) //don't check the EOF_SEQUENCE of stillframes
{
@@ -1275,7 +1275,7 @@ void CDVDPlayer::HandlePlaySpeed()
bool CDVDPlayer::CheckStartCaching(CCurrentStream& current)
{
return !m_pInputStream->IsStreamType(DVDSTREAM_TYPE_DVD)
- && !m_caching && m_playSpeed == DVD_PLAYSPEED_NORMAL
+ && m_caching == CACHESTATE_DONE && m_playSpeed == DVD_PLAYSPEED_NORMAL
&& current.inited;
}
@@ -1647,7 +1647,7 @@ void CDVDPlayer::OnExit()
CLog::Log(LOGNOTICE, "CDVDPlayer::OnExit()");
// set event to inform openfile something went wrong in case openfile is still waiting for this event
- SetCaching(false);
+ SetCaching(CACHESTATE_DONE);
// close each stream
if (!m_bAbortRequest) CLog::Log(LOGNOTICE, "DVDPlayer: eof, waiting for queues to empty");
@@ -1904,7 +1904,7 @@ void CDVDPlayer::HandleMessages()
// 1. disable audio
// 2. skip frames and adjust their pts or the clock
m_playSpeed = speed;
- m_caching = false;
+ m_caching = CACHESTATE_DONE;
m_clock.SetSpeed(speed);
m_dvdPlayerAudio.SetSpeed(speed);
m_dvdPlayerVideo.SetSpeed(speed);
@@ -1953,18 +1953,18 @@ void CDVDPlayer::HandleMessages()
}
}
-void CDVDPlayer::SetCaching(bool enabled)
+void CDVDPlayer::SetCaching(ECacheState state)
{
- if(m_caching == enabled)
+ if(m_caching == state)
return;
- if(enabled)
+ if(state != CACHESTATE_DONE)
{
CLog::Log(LOGDEBUG, "CDVDPlayer::SetCaching - started caching");
m_clock.SetSpeed(DVD_PLAYSPEED_PAUSE);
m_dvdPlayerAudio.SetSpeed(DVD_PLAYSPEED_PAUSE);
m_dvdPlayerVideo.SetSpeed(DVD_PLAYSPEED_PAUSE);
- m_caching = true;
+ m_caching = state;
}
else
{
@@ -1972,7 +1972,7 @@ void CDVDPlayer::SetCaching(bool enabled)
m_clock.SetSpeed(m_playSpeed);
m_dvdPlayerAudio.SetSpeed(m_playSpeed);
m_dvdPlayerVideo.SetSpeed(m_playSpeed);
- m_caching = false;
+ m_caching = state;
}
}
@@ -1986,9 +1986,9 @@ void CDVDPlayer::SetPlaySpeed(int speed)
void CDVDPlayer::Pause()
{
- if(m_playSpeed != DVD_PLAYSPEED_PAUSE && m_caching)
+ if(m_playSpeed != DVD_PLAYSPEED_PAUSE && m_caching == CACHESTATE_FULL)
{
- SetCaching(false);
+ SetCaching(CACHESTATE_DONE);
return;
}
@@ -2007,7 +2007,7 @@ void CDVDPlayer::Pause()
bool CDVDPlayer::IsPaused() const
{
- return (m_playSpeed == DVD_PLAYSPEED_PAUSE) || m_caching;
+ return (m_playSpeed == DVD_PLAYSPEED_PAUSE) || m_caching == CACHESTATE_FULL;
}
bool CDVDPlayer::HasVideo() const
diff --git a/xbmc/cores/dvdplayer/DVDPlayer.h b/xbmc/cores/dvdplayer/DVDPlayer.h
index 9fda395d65..32fd2269ca 100644
--- a/xbmc/cores/dvdplayer/DVDPlayer.h
+++ b/xbmc/cores/dvdplayer/DVDPlayer.h
@@ -210,7 +210,13 @@ public:
virtual CStdString GetPlayingTitle();
- virtual bool IsCaching() const { return m_caching; }
+ enum ECacheState
+ { CACHESTATE_DONE = 0
+ , CACHESTATE_FULL // player is filling up the demux queue
+ , CACHESTATE_NEXT // player is waiting for first packet of each stream
+ };
+
+ virtual bool IsCaching() const { return m_caching == CACHESTATE_FULL; }
virtual int GetCacheLevel() const ;
virtual int OnDVDNavResult(void* pData, int iMessage);
@@ -244,7 +250,7 @@ protected:
*/
void SetPlaySpeed(int iSpeed);
int GetPlaySpeed() { return m_playSpeed; }
- void SetCaching(bool enabled);
+ void SetCaching(ECacheState state);
__int64 GetTotalTimeInMsec();
void FlushBuffers(bool queued);
@@ -278,7 +284,7 @@ protected:
std::string m_filename; // holds the actual filename
std::string m_content; // hold a hint to what content file contains (mime type)
- bool m_caching; // player is filling up the demux queue
+ ECacheState m_caching;
bool m_seeking; // player is currently trying to fullfill a seek request
CFileItem m_item;