summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authorcehoyos <cehoyos@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-06-18 08:53:53 +0000
committercehoyos <cehoyos@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-06-18 08:53:53 +0000
commited522600d8e4d9cc4898c78fae47b7a1508f6df2 (patch)
treed25972ebcb33501c28976b4eb8c6a0e5b1d63c4d /libmpdemux
parentfa78291f12dea0b041e3ee1b1dc4dc6064460443 (diff)
downloadmpv-ed522600d8e4d9cc4898c78fae47b7a1508f6df2.tar.bz2
mpv-ed522600d8e4d9cc4898c78fae47b7a1508f6df2.tar.xz
Stop playing at eof or if no data arrives for ten seconds.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23574 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_rtp.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/libmpdemux/demux_rtp.cpp b/libmpdemux/demux_rtp.cpp
index 94ec561784..bb12ebef0c 100644
--- a/libmpdemux/demux_rtp.cpp
+++ b/libmpdemux/demux_rtp.cpp
@@ -448,6 +448,10 @@ static demux_packet_t* getBuffer(demuxer_t* demuxer, demux_stream_t* ds,
RTPState* rtpState = (RTPState*)(demuxer->priv);
ReadBufferQueue* bufferQueue = NULL;
int headersize = 0;
+ TaskToken task;
+
+ if (demuxer->stream->eof) return NULL;
+
if (ds == demuxer->video) {
bufferQueue = rtpState->videoBufferQueue;
if (((sh_video_t*)ds->sh)->format == mmioFOURCC('H','2','6','4'))
@@ -500,7 +504,15 @@ static demux_packet_t* getBuffer(demuxer_t* demuxer, demux_stream_t* ds,
// Block ourselves until data becomes available:
TaskScheduler& scheduler
= bufferQueue->readSource()->envir().taskScheduler();
+ int delay = bufferQueue->prevPacketPTS * 1.05 >
+ rtpState->mediaSession->playEndTime() ? 1000000 : 10000000;
+ task = scheduler.scheduleDelayedTask(delay, onSourceClosure, bufferQueue);
scheduler.doEventLoop(&bufferQueue->blockingFlag);
+ scheduler.unscheduleDelayedTask(task);
+ if (demuxer->stream->eof) {
+ free_demux_packet(dp);
+ return NULL;
+ }
if (headersize == 1) // amr
dp->buffer[0] =