diff --git a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp index 0ddb461e8ff28..ccbca9eac27be 100644 --- a/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp +++ b/xbmc/cores/dvdplayer/DVDDemuxers/DVDDemuxFFmpeg.cpp @@ -35,6 +35,7 @@ #include "DVDInputStreams/DVDInputStreamBluray.h" #endif #include "DVDInputStreams/DVDInputStreamPVRManager.h" +#include "DVDInputStreams/DVDInputStreamFFmpeg.h" #include "DVDDemuxUtils.h" #include "DVDClock.h" // for DVD_TIME_BASE #include "commons/Exception.h" @@ -225,6 +226,10 @@ bool CDVDDemuxFFmpeg::Aborted() if(m_timeout.IsTimePast()) return true; + CDVDInputStreamFFmpeg * input = dynamic_cast(m_pInput); + if(input && input->Aborted()) + return true; + return false; } diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.cpp index 836e8a1c429b3..4e3665dbd8577 100644 --- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.cpp +++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.cpp @@ -26,6 +26,7 @@ CDVDInputStreamFFmpeg::CDVDInputStreamFFmpeg() : CDVDInputStream(DVDSTREAM_TYPE_FFMPEG) , m_can_pause(false) , m_can_seek(false) + , m_aborted(false) { } @@ -37,7 +38,10 @@ CDVDInputStreamFFmpeg::~CDVDInputStreamFFmpeg() bool CDVDInputStreamFFmpeg::IsEOF() { - return false; + if(m_aborted) + return true; + else + return false; } bool CDVDInputStreamFFmpeg::Open(const char* strFile, const std::string& content) @@ -47,6 +51,7 @@ bool CDVDInputStreamFFmpeg::Open(const char* strFile, const std::string& content m_can_pause = true; m_can_seek = true; + m_aborted = false; if(strnicmp(strFile, "udp://", 6) == 0 || strnicmp(strFile, "rtp://", 6) == 0) diff --git a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.h b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.h index acbbc07f4e4ba..08bf1d74be93b 100644 --- a/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.h +++ b/xbmc/cores/dvdplayer/DVDInputStreams/DVDInputStreamFFmpeg.h @@ -37,10 +37,14 @@ class CDVDInputStreamFFmpeg virtual bool IsEOF(); virtual int64_t GetLength(); + virtual void Abort() { m_aborted = true; } + bool Aborted() { return m_aborted; } + bool CanSeek() { return m_can_seek; } bool CanPause() { return m_can_pause; } protected: bool m_can_pause; bool m_can_seek; + bool m_aborted; }; diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp index 34aa9ec4cb3c4..d611a17cabc56 100644 --- a/xbmc/cores/dvdplayer/DVDPlayer.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp @@ -521,6 +521,9 @@ bool CDVDPlayer::CloseFile() if(m_pSubtitleDemuxer) m_pSubtitleDemuxer->Abort(); + if(m_pInputStream) + m_pInputStream->Abort(); + CLog::Log(LOGNOTICE, "DVDPlayer: waiting for threads to exit"); // wait for the main thread to finish up