Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 24 Sep 2012 11:53:32 +0000 (13:53 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 24 Sep 2012 11:54:24 +0000 (13:54 +0200)
* qatar/master:
  rtp: Packetization of JPEG (RFC 2435)
  smoothstreamingenc: Copy the SAR on the AVStreams as well

Conflicts:
Changelog
libavformat/rtpenc.c
libavformat/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
Changelog
libavformat/Makefile
libavformat/rtpenc.c
libavformat/rtpenc.h
libavformat/rtpenc_jpeg.c
libavformat/sdp.c
libavformat/smoothstreamingenc.c
libavformat/version.h

diff --cc Changelog
+++ b/Changelog
@@@ -21,141 -37,41 +21,142 @@@ version next
  - Microsoft Expression Encoder Screen decoder
  - RTMPS protocol support
  - RTMPTS protocol support
 -- JPEG 2000 encoding support through OpenJPEG
 -- G.723.1 demuxer and decoder
  - RTMPE protocol support
  - RTMPTE protocol support
 +- showwaves and showspectrum filter
 +- LucasArts SMUSH playback support
 +- SAMI, RealText and SubViewer demuxers and decoders
 +- Heart Of Darkness PAF playback support
 +- iec61883 device
 +- asettb filter
 +- new option: -progress
 +- 3GPP Timed Text encoder/decoder
 +- GeoTIFF decoder support
 +- ffmpeg -(no)stdin option
 +- Opus decoder using libopus
 +- caca output device using libcaca
 +- alphaextract and alphamerge filters
 +- concat filter
 +- flite filter
  - Canopus Lossless Codec decoder
 -- avconv -shortest option is now per-output file,
 +- bitmap subtitles in filters (experimental and temporary)
 +- MP2 encoding via TwoLAME
 +- bmp parser
 +- smptebars source
 +- asetpts filter
 +- hue filter
 +- ICO muxer
 +- SubRip encoder and decoder without embedded timing
 +- edge detection filter
 +- framestep filter
 +- ffmpeg -shortest option is now per-output file
    -pass and -passlogfile are now per-output stream
 +- volume measurement filter
  - Ut Video encoder
  - Microsoft Screen 2 decoder
 +- Matroska demuxer now identifies SRT subtitles as AV_CODEC_ID_SUBRIP
 +  instead of AV_CODEC_ID_TEXT
 +- smartblur filter ported from MPlayer
 +- CPiA decoder
 +- decimate filter ported from MPlayer
  - RTP depacketization of JPEG
  - Smooth Streaming live segmenter muxer
 +- F4V muxer
 +- sendcmd and asendcmd filters
 +- WebVTT demuxer and decoder (simple tags supported)
+ - RTP packetization of JPEG
  
  
 -version 0.8:
 +version 0.11:
  
 -- GSM audio parser
 -- SMJPEG muxer
 +- Fixes: CVE-2012-2772, CVE-2012-2774, CVE-2012-2775, CVE-2012-2776, CVE-2012-2777,
 +         CVE-2012-2779, CVE-2012-2782, CVE-2012-2783, CVE-2012-2784, CVE-2012-2785,
 +         CVE-2012-2786, CVE-2012-2787, CVE-2012-2788, CVE-2012-2789, CVE-2012-2790,
 +         CVE-2012-2791, CVE-2012-2792, CVE-2012-2793, CVE-2012-2794, CVE-2012-2795,
 +         CVE-2012-2796, CVE-2012-2797, CVE-2012-2798, CVE-2012-2799, CVE-2012-2800,
 +         CVE-2012-2801, CVE-2012-2802, CVE-2012-2803, CVE-2012-2804,
 +- v408 Quicktime and Microsoft AYUV Uncompressed 4:4:4:4 encoder and decoder
 +- setfield filter
 +- CDXL demuxer and decoder
 +- Apple ProRes encoder
 +- ffprobe -count_packets and -count_frames options
 +- Sun Rasterfile Encoder
 +- ID3v2 attached pictures reading and writing
 +- WMA Lossless decoder
 +- bluray protocol
 +- blackdetect filter
 +- libutvideo encoder wrapper (--enable-libutvideo)
 +- swapuv filter
 +- bbox filter
 +- XBM encoder and decoder
 +- RealAudio Lossless decoder
 +- ZeroCodec decoder
 +- tile video filter
 +- Metal Gear Solid: The Twin Snakes demuxer
 +- OpenEXR image decoder
 +- removelogo filter
 +- drop support for ffmpeg without libavfilter
 +- drawtext video filter: fontconfig support
 +- ffmpeg -benchmark_all option
 +- super2xsai filter ported from libmpcodecs
 +- add libavresample audio conversion library for compatibility
 +- MicroDVD decoder
 +- Avid Meridien (AVUI) encoder and decoder
 +- accept + prefix to -pix_fmt option to disable automatic conversions.
 +- complete audio filtering in libavfilter and ffmpeg
 +- add fps filter
 +- vorbis parser
 +- png parser
 +- audio mix filter
  
  
 -version 0.8_beta2:
 +version 0.10:
  
 +- Fixes: CVE-2011-3929, CVE-2011-3934, CVE-2011-3935, CVE-2011-3936,
 +         CVE-2011-3937, CVE-2011-3940, CVE-2011-3941, CVE-2011-3944,
 +         CVE-2011-3945, CVE-2011-3946, CVE-2011-3947, CVE-2011-3949,
 +         CVE-2011-3950, CVE-2011-3951, CVE-2011-3952
 +- v410 Quicktime Uncompressed 4:4:4 10-bit encoder and decoder
 +- SBaGen (SBG) binaural beats script demuxer
 +- OpenMG Audio muxer
 +- Timecode extraction in DV and MOV
 +- thumbnail video filter
 +- XML output in ffprobe
 +- asplit audio filter
 +- tinterlace video filter
 +- astreamsync audio filter
 +- amerge audio filter
 +- ISMV (Smooth Streaming) muxer
 +- GSM audio parser
 +- SMJPEG muxer
 +- XWD encoder and decoder
  - Automatic thread count based on detection number of (available) CPU cores
 -- Deprecate libpostproc. If desired, the switch --enable-postproc will
 -  enable it but it may be removed in a later Libav release.
 +- y41p Brooktree Uncompressed 4:1:1 12-bit encoder and decoder
 +- ffprobe -show_error option
 +- Avid 1:1 10-bit RGB Packer codec
 +- v308 Quicktime Uncompressed 4:4:4 encoder and decoder
 +- yuv4 libquicktime packed 4:2:0 encoder and decoder
 +- ffprobe -show_frames option
 +- silencedetect audio filter
 +- ffprobe -show_program_version, -show_library_versions, -show_versions options
  - rv34: frame-level multi-threading
  - optimized iMDCT transform on x86 using SSE for for mpegaudiodec
 +- Improved PGS subtitle decoder
 +- dumpgraph option to lavfi device
 +- r210 and r10k encoders
 +- ffwavesynth decoder
 +- aviocat tool
 +- ffeval tool
  
  
 -version 0.8_beta1:
 +version 0.9:
  
 +- openal input device added
 +- boxblur filter added
  - BWF muxer
  - Flash Screen Video 2 decoder
 -- ffplay/ffprobe/ffserver renamed to avplay/avprobe/avserver
 -- ffmpeg deprecated, added avconv, which is almost the same for now, except
 +- lavfi input device added
 +- added avconv, which is almost the same for now, except
  for a few incompatible changes in the options, which will hopefully make them
  easier to use. The changes are:
      * The options placement is now strictly enforced! While in theory the
Simple merge
@@@ -75,7 -75,7 +75,8 @@@ static int is_supported(enum AVCodecID 
      case AV_CODEC_ID_ADPCM_G722:
      case AV_CODEC_ID_ADPCM_G726:
      case AV_CODEC_ID_ILBC:
 +    case AV_CODEC_ID_SPEEX:
+     case AV_CODEC_ID_MJPEG:
          return 1;
      default:
          return 0;
@@@ -87,8 -87,9 +87,9 @@@ void ff_rtp_send_amr(AVFormatContext *s
  void ff_rtp_send_mpegvideo(AVFormatContext *s1, const uint8_t *buf1, int size);
  void ff_rtp_send_xiph(AVFormatContext *s1, const uint8_t *buff, int size);
  void ff_rtp_send_vp8(AVFormatContext *s1, const uint8_t *buff, int size);
+ void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buff, int size);
  
 -const uint8_t *ff_h263_find_resync_marker_reverse(const uint8_t *restrict start,
 -                                                  const uint8_t *restrict end);
 +const uint8_t *ff_h263_find_resync_marker_reverse(const uint8_t *av_restrict start,
 +                                                  const uint8_t *av_restrict end);
  
  #endif /* AVFORMAT_RTPENC_H */
index 0000000,53a5bd2..b2cfb8d
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,138 +1,138 @@@
 - * This file is part of Libav.
+ /*
+  * RTP JPEG-compressed video Packetizer, RFC 2435
+  * Copyright (c) 2012 Samuel Pitoiset
+  *
 - * 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 "libavcodec/bytestream.h"
+ #include "libavcodec/mjpeg.h"
+ #include "libavutil/intreadwrite.h"
+ #include "rtpenc.h"
+ void ff_rtp_send_jpeg(AVFormatContext *s1, const uint8_t *buf, int size)
+ {
+     RTPMuxContext *s = s1->priv_data;
+     const uint8_t *qtables = NULL;
+     int nb_qtables = 0;
+     uint8_t type = 1; /* default pixel format is PIX_FMT_YUVJ420P */
+     uint8_t w, h;
+     uint8_t *p;
+     int off = 0; /* fragment offset of the current JPEG frame */
+     int len;
+     int i;
+     s->buf_ptr   = s->buf;
+     s->timestamp = s->cur_timestamp;
+     /* convert video pixel dimensions from pixels to blocks */
+     w = s1->streams[0]->codec->width  >> 3;
+     h = s1->streams[0]->codec->height >> 3;
+     /* check if pixel format is not the normal 420 case */
+     if (s1->streams[0]->codec->pix_fmt == PIX_FMT_YUVJ422P) {
+         type = 0;
+     } else if (s1->streams[0]->codec->pix_fmt == PIX_FMT_YUVJ420P) {
+         type = 1;
+     } else {
+         av_log(s1, AV_LOG_ERROR, "Unsupported pixel format\n");
+         return;
+     }
+     /* preparse the header for getting some infos */
+     for (i = 0; i < size; i++) {
+         if (buf[i] != 0xff)
+             continue;
+         if (buf[i + 1] == DQT) {
+             if (buf[i + 4])
+                 av_log(s1, AV_LOG_WARNING,
+                        "Only 8-bit precision is supported.\n");
+             /* a quantization table is 64 bytes long */
+             nb_qtables = AV_RB16(&buf[i + 2]) / 65;
+             if (i + 4 + nb_qtables * 65 > size) {
+                 av_log(s1, AV_LOG_ERROR, "Too short JPEG header. Aborted!\n");
+                 return;
+             }
+             qtables = &buf[i + 4];
+         } else if (buf[i + 1] == SOF0) {
+             if (buf[i + 14] != 17 || buf[i + 17] != 17) {
+                 av_log(s1, AV_LOG_ERROR,
+                        "Only 1x1 chroma blocks are supported. Aborted!\n");
+                 return;
+             }
+         } else if (buf[i + 1] == SOS) {
+             /* SOS is last marker in the header */
+             i += AV_RB16(&buf[i + 2]) + 2;
+             break;
+         }
+     }
+     /* skip JPEG header */
+     buf  += i;
+     size -= i;
+     for (i = size - 2; i >= 0; i--) {
+         if (buf[i] == 0xff && buf[i + 1] == EOI) {
+             /* Remove the EOI marker */
+             size = i;
+             break;
+         }
+     }
+     p = s->buf_ptr;
+     while (size > 0) {
+         int hdr_size = 8;
+         if (off == 0 && nb_qtables)
+             hdr_size += 4 + 64 * nb_qtables;
+         /* payload max in one packet */
+         len = FFMIN(size, s->max_payload_size - hdr_size);
+         /* set main header */
+         bytestream_put_byte(&p, 0);
+         bytestream_put_be24(&p, off);
+         bytestream_put_byte(&p, type);
+         bytestream_put_byte(&p, 255);
+         bytestream_put_byte(&p, w);
+         bytestream_put_byte(&p, h);
+         if (off == 0 && nb_qtables) {
+             /* set quantization tables header */
+             bytestream_put_byte(&p, 0);
+             bytestream_put_byte(&p, 0);
+             bytestream_put_be16(&p, 64 * nb_qtables);
+             for (i = 0; i < nb_qtables; i++)
+                 bytestream_put_buffer(&p, &qtables[65 * i + 1], 64);
+         }
+         /* copy payload data */
+         memcpy(p, buf, len);
+         /* marker bit is last packet in frame */
+         ff_rtp_send_data(s1, s->buf, len + hdr_size, size == len);
+         buf  += len;
+         size -= len;
+         off  += len;
+         p     = s->buf;
+     }
+ }
Simple merge
Simple merge
@@@ -30,8 -30,8 +30,8 @@@
  #include "libavutil/avutil.h"
  
  #define LIBAVFORMAT_VERSION_MAJOR 54
 -#define LIBAVFORMAT_VERSION_MINOR 17
 -#define LIBAVFORMAT_VERSION_MICRO  0
 +#define LIBAVFORMAT_VERSION_MINOR 28
- #define LIBAVFORMAT_VERSION_MICRO 100
++#define LIBAVFORMAT_VERSION_MICRO 101
  
  #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
                                                 LIBAVFORMAT_VERSION_MINOR, \