Merge commit '2f3bada63e57345329c4f9b48e9b81b5cfc03d05'
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 15 Jan 2013 15:05:00 +0000 (16:05 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 15 Jan 2013 15:05:34 +0000 (16:05 +0100)
* commit '2f3bada63e57345329c4f9b48e9b81b5cfc03d05':
  lavf: Add a protocol for SRTP encryption/decryption
  rtsp: Support decryption of SRTP signalled via RFC 4568 (SDES)

Conflicts:
libavformat/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
Changelog
libavformat/Makefile
libavformat/allformats.c
libavformat/rtpdec.c
libavformat/rtpdec.h
libavformat/rtsp.c
libavformat/rtsp.h
libavformat/srtpproto.c
libavformat/version.h

diff --cc Changelog
+++ b/Changelog
@@@ -1,80 -1,55 +1,81 @@@
  Entries are sorted chronologically from oldest to youngest within each release,
  releases are sorted from youngest to oldest.
  
 -version 9:
 -- av_basename and av_dirname
 -- adobe and limelight publisher authentication in RTMP
 +version <next>:
  - VDPAU hardware acceleration through normal hwaccel
+ - SRTP support
  
  
 -version 9_beta3:
 -- ashowinfo audio filter
 +version 1.1:
 +
 +- stream disposition information printing in ffprobe
 +- filter for loudness analysis following EBU R128
 +- Opus encoder using libopus
 +- ffprobe -select_streams option
 +- Pinnacle TARGA CineWave YUV16 decoder
 +- TAK demuxer, decoder and parser
 +- DTS-HD demuxer
 +- remove -same_quant, it hasn't worked for years
 +- FFM2 support
 +- X-Face image encoder and decoder
  - 24-bit FLAC encoding
 -- audio volume filter
 -- deprecated the avconv -vol option. the volume filter is to be used instead.
  - multi-channel ALAC encoding up to 7.1
 -- TAK demuxer, parser, and decoder
 -- adaptive frame-level multithreading for H.264
 -
 -
 -version 9_beta2:
  - metadata (INFO tag) support in WAV muxer
 +- subtitles raw text decoder
  - support for building DLLs using MSVC
 -- remove avserver daemon mode
 +- LVF demuxer
 +- ffescape tool
 +- metadata (info chunk) support in CAF muxer
 +- field filter ported from libmpcodecs
 +- AVR demuxer
 +- geq filter ported from libmpcodecs
 +- remove ffserver daemon mode
 +- AST muxer/demuxer
 +- new expansion syntax for drawtext
 +- BRender PIX image decoder
 +- ffprobe -show_entries option
 +- ffprobe -sections option
 +- ADPCM IMA Dialogic decoder
 +- BRSTM demuxer
 +- animated GIF decoder and demuxer
 +- PVF demuxer
 +- subtitles filter
 +- IRCAM muxer/demuxer
 +- Paris Audio File demuxer
 +- Virtual concatenation demuxer
 +- VobSub demuxer
 +- JSON captions for TED talks decoding support
 +- SOX Resampler support in libswresample
 +- aselect filter
 +- SGI RLE 8-bit decoder
 +- Silicon Graphics Motion Video Compressor 1 & 2 decoder
 +- Silicon Graphics Movie demuxer
 +- apad filter
 +- Resolution & pixel format change support with multithreading for H.264
 +- documentation split into per-component manuals
 +- pp (postproc) filter ported from MPlayer
 +- NIST Sphere demuxer
 +- MPL2, VPlayer, MPlayer, AQTitle, PJS and SubViewer v1 subtitles demuxers and decoders
 +- Sony Wave64 muxer
 +- adobe and limelight publisher authentication in RTMP
 +- data: URI scheme
  - support building on the Plan 9 operating system
 -- ffv1: support version 1.3
 +- kerndeint filter ported from MPlayer
 +- histeq filter ported from VirtualDub
 +- Megalux Frame demuxer
 +- 012v decoder
 +- Improved AVC Intra decoding support
  
  
 -version 9_beta1:
 +version 1.0:
  
 -- XWD encoder and decoder
 -- Support for fragmentation in the mov/mp4 muxer
 -- ISMV (Smooth Streaming) muxer
 -- CDXL demuxer and decoder
 -- Apple ProRes encoder
 -- Sun Rasterfile Encoder
 -- remove libpostproc
 -- ID3v2 attached pictures reading and writing
 -- WMA Lossless decoder
 -- XBM encoder
 -- RealAudio Lossless decoder
 -- ZeroCodec decoder
 -- drop support for avconv without libavfilter
 -- add libavresample audio conversion library
 -- audio filters support in libavfilter and avconv
 -- add fps filter
 -- audio split filter
 -- audio mix filter
 -- avprobe output is now standard INI or JSON. The old format can still
 -  be used with -of old.
 +- INI and flat output in ffprobe
 +- Scene detection in libavfilter
  - Indeo Audio decoder
  - channelsplit audio filter
 +- setnsamples audio filter
 +- atempo filter
 +- ffprobe -show_data option
  - RTMPT protocol support
  - iLBC encoding/decoding via libilbc
  - Microsoft Screen 1 decoder
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 0000000,1cacfdb..f5e3d14
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,144 +1,144 @@@
 - * This file is part of Libav.
+ /*
+  * SRTP network protocol
+  * Copyright (c) 2012 Martin Storsjo
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+  * version 2.1 of the License, or (at your option) any later version.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * FFmpeg is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ #include "libavutil/opt.h"
+ #include "avformat.h"
+ #include "avio_internal.h"
+ #include "url.h"
+ #include "internal.h"
+ #include "srtp.h"
+ typedef struct SRTPProtoContext {
+     const AVClass *class;
+     URLContext *rtp_hd;
+     const char *out_suite, *out_params;
+     const char *in_suite, *in_params;
+     struct SRTPContext srtp_out, srtp_in;
+     uint8_t encryptbuf[1500];
+ } SRTPProtoContext;
+ #define D AV_OPT_FLAG_DECODING_PARAM
+ #define E AV_OPT_FLAG_ENCODING_PARAM
+ static const AVOption options[] = {
+     { "srtp_out_suite", "", offsetof(SRTPProtoContext, out_suite), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, E },
+     { "srtp_out_params", "", offsetof(SRTPProtoContext, out_params), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, E },
+     { "srtp_in_suite", "", offsetof(SRTPProtoContext, in_suite), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, E },
+     { "srtp_in_params", "", offsetof(SRTPProtoContext, in_params), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, E },
+     { NULL }
+ };
+ static const AVClass srtp_context_class = {
+     .class_name     = "srtp",
+     .item_name      = av_default_item_name,
+     .option         = options,
+     .version        = LIBAVUTIL_VERSION_INT,
+ };
+ static int srtp_close(URLContext *h)
+ {
+     SRTPProtoContext *s = h->priv_data;
+     ff_srtp_free(&s->srtp_out);
+     ff_srtp_free(&s->srtp_in);
+     ffurl_close(s->rtp_hd);
+     s->rtp_hd = NULL;
+     return 0;
+ }
+ static int srtp_open(URLContext *h, const char *uri, int flags)
+ {
+     SRTPProtoContext *s = h->priv_data;
+     char hostname[256], buf[1024], path[1024];
+     int rtp_port, ret;
+     if (s->out_suite && s->out_params)
+         if ((ret = ff_srtp_set_crypto(&s->srtp_out, s->out_suite, s->out_params)) < 0)
+             goto fail;
+     if (s->in_suite && s->in_params)
+         if ((ret = ff_srtp_set_crypto(&s->srtp_in, s->in_suite, s->in_params)) < 0)
+             goto fail;
+     av_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &rtp_port,
+                  path, sizeof(path), uri);
+     ff_url_join(buf, sizeof(buf), "rtp", NULL, hostname, rtp_port, "%s", path);
+     if ((ret = ffurl_open(&s->rtp_hd, buf, flags, &h->interrupt_callback, NULL)) < 0)
+         goto fail;
+     h->max_packet_size = FFMIN(s->rtp_hd->max_packet_size,
+                                sizeof(s->encryptbuf)) - 14;
+     h->is_streamed = 1;
+     return 0;
+ fail:
+     srtp_close(h);
+     return ret;
+ }
+ static int srtp_read(URLContext *h, uint8_t *buf, int size)
+ {
+     SRTPProtoContext *s = h->priv_data;
+     int ret;
+ start:
+     ret = ffurl_read(s->rtp_hd, buf, size);
+     if (ret > 0 && s->srtp_in.aes) {
+         if (ff_srtp_decrypt(&s->srtp_in, buf, &ret) < 0)
+             goto start;
+     }
+     return ret;
+ }
+ static int srtp_write(URLContext *h, const uint8_t *buf, int size)
+ {
+     SRTPProtoContext *s = h->priv_data;
+     if (!s->srtp_out.aes)
+         return ffurl_write(s->rtp_hd, buf, size);
+     size = ff_srtp_encrypt(&s->srtp_out, buf, size, s->encryptbuf,
+                            sizeof(s->encryptbuf));
+     if (size < 0)
+         return size;
+     return ffurl_write(s->rtp_hd, s->encryptbuf, size);
+ }
+ static int srtp_get_file_handle(URLContext *h)
+ {
+     SRTPProtoContext *s = h->priv_data;
+     return ffurl_get_file_handle(s->rtp_hd);
+ }
+ static int srtp_get_multi_file_handle(URLContext *h, int **handles,
+                                       int *numhandles)
+ {
+     SRTPProtoContext *s = h->priv_data;
+     return ffurl_get_multi_file_handle(s->rtp_hd, handles, numhandles);
+ }
+ URLProtocol ff_srtp_protocol = {
+     .name                      = "srtp",
+     .url_open                  = srtp_open,
+     .url_read                  = srtp_read,
+     .url_write                 = srtp_write,
+     .url_close                 = srtp_close,
+     .url_get_file_handle       = srtp_get_file_handle,
+     .url_get_multi_file_handle = srtp_get_multi_file_handle,
+     .priv_data_size            = sizeof(SRTPProtoContext),
+     .priv_data_class           = &srtp_context_class,
+     .flags                     = URL_PROTOCOL_FLAG_NETWORK,
+ };
@@@ -30,8 -30,8 +30,8 @@@
  #include "libavutil/avutil.h"
  
  #define LIBAVFORMAT_VERSION_MAJOR 54
- #define LIBAVFORMAT_VERSION_MINOR 59
- #define LIBAVFORMAT_VERSION_MICRO 107
 -#define LIBAVFORMAT_VERSION_MINOR 21
 -#define LIBAVFORMAT_VERSION_MICRO  0
++#define LIBAVFORMAT_VERSION_MINOR 60
++#define LIBAVFORMAT_VERSION_MICRO 100
  
  #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
                                                 LIBAVFORMAT_VERSION_MINOR, \