]> git.sesse.net Git - ffmpeg/commitdiff
Merge commit 'e3ec6fe7bb2a622a863e3912181717a659eb1bad'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 1 Apr 2015 19:27:45 +0000 (21:27 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 1 Apr 2015 19:34:20 +0000 (21:34 +0200)
* commit 'e3ec6fe7bb2a622a863e3912181717a659eb1bad':
  rtsp: Add a buffer_size option

Conflicts:
libavformat/rtsp.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/rtsp.c
libavformat/rtsp.h
libavformat/rtspdec.c

index 14ac510828a1ace2e1f0e4f33d4281e27d65b7a5,1c2c5552b9bced248533d0dbcc99181ee123f451..68ef36e131aecb60162d3da489ac647576ae63a9
  
  #define RTSP_FLAG_OPTS(name, longname) \
      { name, longname, OFFSET(rtsp_flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, DEC, "rtsp_flags" }, \
 -    { "filter_src", "Only receive packets from the negotiated peer IP", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_FILTER_SRC}, 0, 0, DEC, "rtsp_flags" }
 +    { "filter_src", "only receive packets from the negotiated peer IP", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_FILTER_SRC}, 0, 0, DEC, "rtsp_flags" }
  
  #define RTSP_MEDIATYPE_OPTS(name, longname) \
 -    { name, longname, OFFSET(media_type_mask), AV_OPT_TYPE_FLAGS, { .i64 = (1 << (AVMEDIA_TYPE_DATA+1)) - 1 }, INT_MIN, INT_MAX, DEC, "allowed_media_types" }, \
 +    { name, longname, OFFSET(media_type_mask), AV_OPT_TYPE_FLAGS, { .i64 = (1 << (AVMEDIA_TYPE_SUBTITLE+1)) - 1 }, INT_MIN, INT_MAX, DEC, "allowed_media_types" }, \
      { "video", "Video", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_VIDEO}, 0, 0, DEC, "allowed_media_types" }, \
      { "audio", "Audio", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_AUDIO}, 0, 0, DEC, "allowed_media_types" }, \
 -    { "data", "Data", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_DATA}, 0, 0, DEC, "allowed_media_types" }
 +    { "data", "Data", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_DATA}, 0, 0, DEC, "allowed_media_types" }, \
 +    { "subtitle", "Subtitle", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << AVMEDIA_TYPE_SUBTITLE}, 0, 0, DEC, "allowed_media_types" }
  
- #define RTSP_REORDERING_OPTS() \
-     { "reorder_queue_size", "set number of packets to buffer for handling of reordered packets", OFFSET(reordering_queue_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, DEC }
+ #define COMMON_OPTS() \
 -    { "reorder_queue_size", "Number of packets to buffer for handling of reordered packets", OFFSET(reordering_queue_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, DEC }, \
++    { "reorder_queue_size", "set number of packets to buffer for handling of reordered packets", OFFSET(reordering_queue_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, DEC }, \
+     { "buffer_size",        "Underlying protocol send/receive buffer size",                  OFFSET(buffer_size),           AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, DEC|ENC } \
  
  const AVOption ff_rtsp_options[] = {
 -    { "initial_pause",  "Don't start playing the stream immediately", OFFSET(initial_pause), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, DEC },
 +    { "initial_pause",  "do not start playing the stream immediately", OFFSET(initial_pause), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, DEC },
      FF_RTP_FLAG_OPTS(RTSPState, rtp_muxer_flags),
 -    { "rtsp_transport", "RTSP transport protocols", OFFSET(lower_transport_mask), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, DEC|ENC, "rtsp_transport" }, \
 +    { "rtsp_transport", "set RTSP transport protocols", OFFSET(lower_transport_mask), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, DEC|ENC, "rtsp_transport" }, \
      { "udp", "UDP", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << RTSP_LOWER_TRANSPORT_UDP}, 0, 0, DEC|ENC, "rtsp_transport" }, \
      { "tcp", "TCP", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << RTSP_LOWER_TRANSPORT_TCP}, 0, 0, DEC|ENC, "rtsp_transport" }, \
      { "udp_multicast", "UDP multicast", 0, AV_OPT_TYPE_CONST, {.i64 = 1 << RTSP_LOWER_TRANSPORT_UDP_MULTICAST}, 0, 0, DEC, "rtsp_transport" },
      { "http", "HTTP tunneling", 0, AV_OPT_TYPE_CONST, {.i64 = (1 << RTSP_LOWER_TRANSPORT_HTTP)}, 0, 0, DEC, "rtsp_transport" },
 -    RTSP_FLAG_OPTS("rtsp_flags", "RTSP flags"),
 -    { "listen", "Wait for incoming connections", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_LISTEN}, 0, 0, DEC, "rtsp_flags" },
 -    RTSP_MEDIATYPE_OPTS("allowed_media_types", "Media types to accept from the server"),
 -    { "min_port", "Minimum local UDP port", OFFSET(rtp_port_min), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MIN}, 0, 65535, DEC|ENC },
 -    { "max_port", "Maximum local UDP port", OFFSET(rtp_port_max), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MAX}, 0, 65535, DEC|ENC },
 -    { "timeout", "Maximum timeout (in seconds) to wait for incoming connections. -1 is infinite. Implies flag listen", OFFSET(initial_timeout), AV_OPT_TYPE_INT, {.i64 = -1}, INT_MIN, INT_MAX, DEC },
 +    RTSP_FLAG_OPTS("rtsp_flags", "set RTSP flags"),
 +    { "listen", "wait for incoming connections", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_LISTEN}, 0, 0, DEC, "rtsp_flags" },
 +    { "prefer_tcp", "try RTP via TCP first, if available", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_PREFER_TCP}, 0, 0, DEC|ENC, "rtsp_flags" },
 +    RTSP_MEDIATYPE_OPTS("allowed_media_types", "set media types to accept from the server"),
 +    { "min_port", "set minimum local UDP port", OFFSET(rtp_port_min), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MIN}, 0, 65535, DEC|ENC },
 +    { "max_port", "set maximum local UDP port", OFFSET(rtp_port_max), AV_OPT_TYPE_INT, {.i64 = RTSP_RTP_PORT_MAX}, 0, 65535, DEC|ENC },
 +    { "timeout", "set maximum timeout (in seconds) to wait for incoming connections (-1 is infinite, imply flag listen)", OFFSET(initial_timeout), AV_OPT_TYPE_INT, {.i64 = -1}, INT_MIN, INT_MAX, DEC },
 +    { "stimeout", "set timeout (in microseconds) of socket TCP I/O operations", OFFSET(stimeout), AV_OPT_TYPE_INT, {.i64 = 0}, INT_MIN, INT_MAX, DEC },
-     RTSP_REORDERING_OPTS(),
+     COMMON_OPTS(),
 +    { "user-agent", "override User-Agent header", OFFSET(user_agent), AV_OPT_TYPE_STRING, {.str = LIBAVFORMAT_IDENT}, 0, 0, DEC },
      { NULL },
  };
  
  static const AVOption sdp_options[] = {
      RTSP_FLAG_OPTS("sdp_flags", "SDP flags"),
 -    { "custom_io", "Use custom IO", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_CUSTOM_IO}, 0, 0, DEC, "rtsp_flags" },
 -    { "rtcp_to_source", "Send RTCP packets to the source address of received packets", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_RTCP_TO_SOURCE}, 0, 0, DEC, "rtsp_flags" },
 -    RTSP_MEDIATYPE_OPTS("allowed_media_types", "Media types to accept from the server"),
 +    { "custom_io", "use custom I/O", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_CUSTOM_IO}, 0, 0, DEC, "rtsp_flags" },
 +    { "rtcp_to_source", "send RTCP packets to the source address of received packets", 0, AV_OPT_TYPE_CONST, {.i64 = RTSP_FLAG_RTCP_TO_SOURCE}, 0, 0, DEC, "rtsp_flags" },
 +    RTSP_MEDIATYPE_OPTS("allowed_media_types", "set media types to accept from the server"),
-     RTSP_REORDERING_OPTS(),
+     COMMON_OPTS(),
      { NULL },
  };
  
  static const AVOption rtp_options[] = {
 -    RTSP_FLAG_OPTS("rtp_flags", "RTP flags"),
 +    RTSP_FLAG_OPTS("rtp_flags", "set RTP flags"),
-     RTSP_REORDERING_OPTS(),
+     COMMON_OPTS(),
      { NULL },
  };
  
@@@ -1440,10 -1453,15 +1456,14 @@@ int ff_rtsp_make_setup_request(AVFormat
                              "?localport=%d", j);
                  /* we will use two ports per rtp stream (rtp and rtcp) */
                  j += 2;
-                 if (!ffurl_open(&rtsp_st->rtp_handle, buf, AVIO_FLAG_READ_WRITE,
-                                &s->interrupt_callback, NULL))
+                 err = ffurl_open(&rtsp_st->rtp_handle, buf, AVIO_FLAG_READ_WRITE,
+                                  &s->interrupt_callback, &opts);
+                 av_dict_free(&opts);
+                 if (!err)
                      goto rtp_opened;
              }
 -
              av_log(s, AV_LOG_ERROR, "Unable to open an input RTP port\n");
              err = AVERROR(EIO);
              goto fail;
index 3cfcfb6d006888591dc74f69162102b10b7ba21d,74733361f920b279bd21f28fbc0f1a0baec2708a..d9e76ec66781bb0e0bc2a578c1a16e5f3e54cf43
@@@ -401,12 -396,8 +401,13 @@@ typedef struct RTSPState 
       */
      int reordering_queue_size;
  
 +    /**
 +     * User-Agent string
 +     */
 +    char *user_agent;
 +
      char default_lang[4];
+     int buffer_size;
  } RTSPState;
  
  #define RTSP_FLAG_FILTER_SRC  0x1    /**< Filter incoming UDP packets -
Simple merge