diff options
author | cehoyos <cehoyos@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-06-18 08:53:53 +0000 |
---|---|---|
committer | cehoyos <cehoyos@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2007-06-18 08:53:53 +0000 |
commit | ed522600d8e4d9cc4898c78fae47b7a1508f6df2 (patch) | |
tree | d25972ebcb33501c28976b4eb8c6a0e5b1d63c4d /libmpdemux/demux_rtp.cpp | |
parent | fa78291f12dea0b041e3ee1b1dc4dc6064460443 (diff) | |
download | mpv-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/demux_rtp.cpp')
-rw-r--r-- | libmpdemux/demux_rtp.cpp | 12 |
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] = |