diff options
| author | Michael Niedermayer <[email protected]> | 2012-07-25 22:00:06 +0200 | 
|---|---|---|
| committer | Michael Niedermayer <[email protected]> | 2012-07-25 22:00:06 +0200 | 
| commit | f7d4e26c6a0a11c255e22994fabd97a4e62e3d01 (patch) | |
| tree | 65c18e3f9064ed481b0001beac05e194232260eb | |
| parent | 9746f87f154029ed5866cbc02ba0d57f5b5c283f (diff) | |
| parent | 758377a2b79a35386978b0af1196d36cbcfb8f64 (diff) | |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
  rtmp: Add a new option 'rtmp_pageurl'
  doc: Update the description of the rtmp_tcurl option
  rtmp: Make the description of the rtmp_tcurl option more generic
  libfdk-aacenc: add LATM/LOAS encapsulation support
  sctp: add port missing error message
  tcp: add port missing error message
  avfilter: Fix printf format string conversion specifier
Conflicts:
	libavcodec/version.h
	libavfilter/avfilter.c
Merged-by: Michael Niedermayer <[email protected]>
| -rw-r--r-- | doc/protocols.texi | 6 | ||||
| -rw-r--r-- | libavcodec/libfdk-aacenc.c | 15 | ||||
| -rw-r--r-- | libavcodec/version.h | 2 | ||||
| -rw-r--r-- | libavformat/rtmpproto.c | 9 | ||||
| -rw-r--r-- | libavformat/sctp.c | 6 | ||||
| -rw-r--r-- | libavformat/tcp.c | 7 | 
6 files changed, 38 insertions, 7 deletions
diff --git a/doc/protocols.texi b/doc/protocols.texi index 1d24ee795b..4833cd3395 100644 --- a/doc/protocols.texi +++ b/doc/protocols.texi @@ -259,6 +259,10 @@ playpath. If a live stream of that name is not found, it plays the  recorded stream. The other possible values are @code{live} and  @code{recorded}. +@item rtmp_pageurl +URL of the web page in which the media was embedded. By default no +value will be sent. +  @item rtmp_playpath  Stream identifier to play or to publish. This option overrides the  parameter specified in the URI. @@ -267,7 +271,7 @@ parameter specified in the URI.  URL of the SWF player for the media. By default no value will be sent.  @item rtmp_tcurl -URL of the target stream. +URL of the target stream. Defaults to proto://host[:port]/app.  @end table diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c index c1eada0dfe..cb42b5b0cf 100644 --- a/libavcodec/libfdk-aacenc.c +++ b/libavcodec/libfdk-aacenc.c @@ -33,6 +33,8 @@ typedef struct AACContext {      int afterburner;      int eld_sbr;      int signaling; +    int latm; +    int header_period;      AudioFrameQueue afq;  } AACContext; @@ -45,6 +47,8 @@ static const AVOption aac_enc_options[] = {      { "implicit", "Implicit backwards compatible signaling", 0, AV_OPT_TYPE_CONST, { 0 }, 0, 0, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM, "signaling" },      { "explicit_sbr", "Explicit SBR, implicit PS signaling", 0, AV_OPT_TYPE_CONST, { 1 }, 0, 0, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM, "signaling" },      { "explicit_hierarchical", "Explicit hierarchical signaling", 0, AV_OPT_TYPE_CONST, { 2 }, 0, 0, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM, "signaling" }, +    { "latm", "Output LATM/LOAS encapsulated data", offsetof(AACContext, latm), AV_OPT_TYPE_INT, { 0 }, 0, 1, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM }, +    { "header_period", "StreamMuxConfig and PCE repetition period (in frames)", offsetof(AACContext, header_period), AV_OPT_TYPE_INT, { 0 }, 0, 0xffff, AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM },      { NULL }  }; @@ -204,12 +208,21 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)      /* Choose bitstream format - if global header is requested, use       * raw access units, otherwise use ADTS. */      if ((err = aacEncoder_SetParam(s->handle, AACENC_TRANSMUX, -                                   avctx->flags & CODEC_FLAG_GLOBAL_HEADER ? 0 : 2)) != AACENC_OK) { +                                   avctx->flags & CODEC_FLAG_GLOBAL_HEADER ? 0 : s->latm ? 10 : 2)) != AACENC_OK) {          av_log(avctx, AV_LOG_ERROR, "Unable to set the transmux format: %s\n",                 aac_get_error(err));          goto error;      } +    if (s->latm && s->header_period) { +        if ((err = aacEncoder_SetParam(s->handle, AACENC_HEADER_PERIOD, +                                       s->header_period)) != AACENC_OK) { +             av_log(avctx, AV_LOG_ERROR, "Unable to set header period: %s\n", +                    aac_get_error(err)); +             goto error; +        } +    } +      /* If no signaling mode is chosen, use explicit hierarchical signaling       * if using mp4 mode (raw access units, with global header) and       * implicit signaling if using ADTS. */ diff --git a/libavcodec/version.h b/libavcodec/version.h index 2e2d6979b3..6b3f14976e 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -28,7 +28,7 @@  #define LIBAVCODEC_VERSION_MAJOR 54  #define LIBAVCODEC_VERSION_MINOR  44 -#define LIBAVCODEC_VERSION_MICRO 100 +#define LIBAVCODEC_VERSION_MICRO 101  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \                                                 LIBAVCODEC_VERSION_MINOR, \ diff --git a/libavformat/rtmpproto.c b/libavformat/rtmpproto.c index 4ffd48eeec..2ebb998187 100644 --- a/libavformat/rtmpproto.c +++ b/libavformat/rtmpproto.c @@ -90,6 +90,7 @@ typedef struct RTMPContext {      char*         tcurl;                      ///< url of the target stream      char*         flashver;                   ///< version of the flash plugin      char*         swfurl;                     ///< url of the swf player +    char*         pageurl;                    ///< url of the web page      int           server_bw;                  ///< server bandwidth      int           client_buffer_time;         ///< client buffer time in ms      int           flush_interval;             ///< number of packets flushed in the same request (RTMPT only) @@ -232,6 +233,11 @@ static int gen_connect(URLContext *s, RTMPContext *rt)          ff_amf_write_number(&p, 252.0);          ff_amf_write_field_name(&p, "videoFunction");          ff_amf_write_number(&p, 1.0); + +        if (rt->pageurl) { +            ff_amf_write_field_name(&p, "pageUrl"); +            ff_amf_write_string(&p, rt->pageurl); +        }      }      ff_amf_write_object_end(&p); @@ -1498,9 +1504,10 @@ static const AVOption rtmp_options[] = {      {"any", "both", 0, AV_OPT_TYPE_CONST, {-2}, 0, 0, DEC, "rtmp_live"},      {"live", "live stream", 0, AV_OPT_TYPE_CONST, {-1}, 0, 0, DEC, "rtmp_live"},      {"recorded", "recorded stream", 0, AV_OPT_TYPE_CONST, {0}, 0, 0, DEC, "rtmp_live"}, +    {"rtmp_pageurl", "URL of the web page in which the media was embedded. By default no value will be sent.", OFFSET(pageurl), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC},      {"rtmp_playpath", "Stream identifier to play or to publish", OFFSET(playpath), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},      {"rtmp_swfurl", "URL of the SWF player. By default no value will be sent", OFFSET(swfurl), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC}, -    {"rtmp_tcurl", "URL of the target stream. Defaults to rtmp://host[:port]/app.", OFFSET(tcurl), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC}, +    {"rtmp_tcurl", "URL of the target stream. Defaults to proto://host[:port]/app.", OFFSET(tcurl), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},      { NULL },  }; diff --git a/libavformat/sctp.c b/libavformat/sctp.c index 7bcb5ae0a9..b8ab63e7da 100644 --- a/libavformat/sctp.c +++ b/libavformat/sctp.c @@ -170,8 +170,12 @@ static int sctp_open(URLContext *h, const char *uri, int flags)      av_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname),                   &port, path, sizeof(path), uri); -    if (strcmp(proto,"sctp") || port <= 0 || port >= 65536) +    if (strcmp(proto, "sctp"))          return AVERROR(EINVAL); +    if (port <= 0 || port >= 65536) { +        av_log(s, AV_LOG_ERROR, "Port missing in uri\n"); +        return AVERROR(EINVAL); +    }      s->max_streams = 0;      p = strchr(uri, '?'); diff --git a/libavformat/tcp.c b/libavformat/tcp.c index 70a50159eb..8cd217b697 100644 --- a/libavformat/tcp.c +++ b/libavformat/tcp.c @@ -49,9 +49,12 @@ static int tcp_open(URLContext *h, const char *uri, int flags)      av_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname),          &port, path, sizeof(path), uri); -    if (strcmp(proto,"tcp") || port <= 0 || port >= 65536) +    if (strcmp(proto, "tcp"))          return AVERROR(EINVAL); - +    if (port <= 0 || port >= 65536) { +        av_log(h, AV_LOG_ERROR, "Port missing in uri\n"); +        return AVERROR(EINVAL); +    }      p = strchr(uri, '?');      if (p) {          if (av_find_info_tag(buf, sizeof(buf), "listen", p))  | 
