0
0
mirror of https://github.com/mpv-player/mpv.git synced 2024-09-20 20:03:10 +02:00

demux_rtp.cpp: Add a hack to receive audio while probing video FPS

Otherwise newer live555 versions would just hang.
Fixes http://bugzilla.mplayerhq.hu/show_bug.cgi?id=1874

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33793 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
reimar 2011-07-01 20:54:57 +00:00 committed by Uoti Urpala
parent ae31369a50
commit 684e54587e

View File

@ -498,11 +498,32 @@ 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;
int waitboth = 0;
TaskToken task, task2;
if (demuxer->stream->eof) return NULL;
if (ds == demuxer->video) {
bufferQueue = rtpState->audioBufferQueue;
// HACK: for the latest versions we must also receive audio
// when probing for video FPS, otherwise the stream just hangs
// and times out
if (mustGetNewData &&
bufferQueue &&
bufferQueue->readSource() &&
!bufferQueue->nextpacket) {
headersize = bufferQueue->readSource()->isAMRAudioSource() ? 1 : 0;
demux_packet_t *dp = new_demux_packet(MAX_RTP_FRAME_SIZE);
bufferQueue->dp = dp;
bufferQueue->blockingFlag = 0;
bufferQueue->readSource()->getNextFrame(
&dp->buffer[headersize], MAX_RTP_FRAME_SIZE - headersize,
afterReading, bufferQueue,
onSourceClosure, bufferQueue);
task2 = bufferQueue->readSource()->envir().taskScheduler().
scheduleDelayedTask(10000000, onSourceClosure, bufferQueue);
waitboth = 1;
}
bufferQueue = rtpState->videoBufferQueue;
if (((sh_video_t*)ds->sh)->format == mmioFOURCC('H','2','6','4'))
headersize = 3;
@ -560,6 +581,10 @@ static demux_packet_t* getBuffer(demuxer_t* demuxer, demux_stream_t* ds,
task = scheduler.scheduleDelayedTask(delay, onSourceClosure, bufferQueue);
scheduler.doEventLoop(&bufferQueue->blockingFlag);
scheduler.unscheduleDelayedTask(task);
if (waitboth) {
scheduler.doEventLoop(&rtpState->audioBufferQueue->blockingFlag);
scheduler.unscheduleDelayedTask(task2);
}
if (demuxer->stream->eof) {
free_demux_packet(dp);
return NULL;