# HG changeset patch # User cehoyos # Date 1182156833 0 # Node ID 046d7b14d7f123de9d5731907451e0f722e8ef0b # Parent d890d68a92dce05a5e3ee07a2f00489794649735 Stop playing at eof or if no data arrives for ten seconds. diff -r d890d68a92dc -r 046d7b14d7f1 libmpdemux/demux_rtp.cpp --- a/libmpdemux/demux_rtp.cpp Mon Jun 18 08:02:37 2007 +0000 +++ b/libmpdemux/demux_rtp.cpp Mon Jun 18 08:53:53 2007 +0000 @@ -448,6 +448,10 @@ 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 @@ // 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] =