~medibuntu-maintainers/mplayer/medibuntu.precise

« back to all changes in this revision

Viewing changes to libmpdemux/demux_rtp.cpp

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2012-01-12 22:23:28 UTC
  • mfrom: (0.4.7 sid)
  • mto: This revision was merged to the branch mainline in revision 76.
  • Revision ID: package-import@ubuntu.com-20120112222328-8jqdyodym3p84ygu
Tags: 2:1.0~rc4.dfsg1+svn34540-1
* New upstream snapshot
* upload to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#ifdef __MINGW32__    // with.  they are each protected from
25
25
#include <windows.h>  // windows.h, but not the other way around.
26
26
#endif
 
27
#include "mp_msg.h"
27
28
#include "demuxer.h"
28
29
#include "demux_rtp.h"
29
30
#include "stheader.h"
146
147
      // we were given a RTSP or SIP URL:
147
148
      char const* protocol = demuxer->stream->streaming_ctrl->url->protocol;
148
149
      char const* url = demuxer->stream->streaming_ctrl->url->url;
149
 
      extern int verbose;
150
150
      if (strcmp(protocol, "rtsp") == 0) {
151
151
        if (rtsp_transport_http == 1) {
152
152
          rtsp_transport_http = demuxer->stream->streaming_ctrl->url->port;
496
496
  RTPState* rtpState = (RTPState*)(demuxer->priv);
497
497
  ReadBufferQueue* bufferQueue = NULL;
498
498
  int headersize = 0;
499
 
  TaskToken task;
 
499
  int waitboth = 0;
 
500
  TaskToken task, task2;
500
501
 
501
502
  if (demuxer->stream->eof) return NULL;
502
503
 
503
504
  if (ds == demuxer->video) {
 
505
    bufferQueue = rtpState->audioBufferQueue;
 
506
    // HACK: for the latest versions we must also receive audio
 
507
    // when probing for video FPS, otherwise the stream just hangs
 
508
    // and times out
 
509
    if (mustGetNewData &&
 
510
        bufferQueue &&
 
511
        bufferQueue->readSource() &&
 
512
        !bufferQueue->nextpacket) {
 
513
      headersize = bufferQueue->readSource()->isAMRAudioSource() ? 1 : 0;
 
514
      demux_packet_t *dp = new_demux_packet(MAX_RTP_FRAME_SIZE);
 
515
      bufferQueue->dp = dp;
 
516
      bufferQueue->blockingFlag = 0;
 
517
      bufferQueue->readSource()->getNextFrame(
 
518
          &dp->buffer[headersize], MAX_RTP_FRAME_SIZE - headersize,
 
519
          afterReading, bufferQueue,
 
520
          onSourceClosure, bufferQueue);
 
521
      task2 = bufferQueue->readSource()->envir().taskScheduler().
 
522
        scheduleDelayedTask(10000000, onSourceClosure, bufferQueue);
 
523
      waitboth = 1;
 
524
    }
504
525
    bufferQueue = rtpState->videoBufferQueue;
505
526
    if (((sh_video_t*)ds->sh)->format == mmioFOURCC('H','2','6','4'))
506
527
      headersize = 3;
558
579
  task = scheduler.scheduleDelayedTask(delay, onSourceClosure, bufferQueue);
559
580
  scheduler.doEventLoop(&bufferQueue->blockingFlag);
560
581
  scheduler.unscheduleDelayedTask(task);
 
582
  if (waitboth) {
 
583
    scheduler.doEventLoop(&rtpState->audioBufferQueue->blockingFlag);
 
584
    scheduler.unscheduleDelayedTask(task2);
 
585
  }
561
586
  if (demuxer->stream->eof) {
562
587
    free_demux_packet(dp);
563
588
    return NULL;