Merge remote-tracking branch 'qatar/release/9' into release/1.1
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 12 May 2013 12:39:09 +0000 (14:39 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 12 May 2013 12:39:09 +0000 (14:39 +0200)
* qatar/release/9:
  update Changelog
  af_asyncts: fix offset calculation
  oma: properly forward errors in oma_read_packet
  indeo3: use unaligned reads on reference blocks.

Conflicts:
Changelog

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
Changelog
libavcodec/indeo3.c
libavfilter/af_asyncts.c
libavformat/omadec.c

diff --combined Changelog
+++ b/Changelog
@@@ -1,8 -1,21 +1,19 @@@
  Entries are sorted chronologically from oldest to youngest within each release,
  releases are sorted from youngest to oldest.
  
 -version 9.6:
 +version <next>:
+ - aac: check the maximum number of channels to avoid invalid writes
+ - indeo3: fix off by one in MV validity check
+ - id3v2: check for end of file while unescaping tags to avoid invalid
+   writes, reported by Google Security Team
+ - afifo: fix request_samples on the last frame in certain cases
+ - hls, segment: fix splitting for audio-only streams
+ - wav: Always seek to an even offset, Bug #500, LP: #1174737
+ - swscale: Use alpha from the right row in yuva2rgba_c, Bug #504
+ - indeo3: use unaligned reads on reference blocks, Bug #503
+ - oma: properly forward errors in oma_read_packet
+ - af_asyncts: fix offset calculation
  
 -version 9.5:
 -
  Most of the following fixes resulted from test samples that the Google
  Security Team has kindly made available to us:
  
@@@ -29,6 -42,9 +40,6 @@@
  - svq1dec: clip motion vectors to the frame size
  - xmv: check audio track parameters validity
  - xmv: do not leak memory in the error paths in xmv_read_header()
 -
 -
 -version 9.4:
  - atrac3: avoid oversized shifting in decode_bytes()
  - eamad: allocate a dummy reference frame when the real one is missing
  - ffv1: fix calculating slice dimensions for version 2
  - wmaprodec: require block_align to be set
  - wmaprodec: return an error, not 0, when the input is too small
  - xxan: fix invalid memory access in xan_decode_frame_type0()
 -
 -version 9.3:
  - h264: fix deadlocks with broken/fuzzed files
  - flvdec: make decoder more robust
  - vorbisdec: fix buffer overflow (CVE-2013-0894)
  - ac3dec: validate channel output mode against channel count
  - doc: minor improvements
 -
 -version 9.2:
  - loco: check that there is data left after decoding a plane.
  - mov: use the format context for logging.
  - lagarith: avoid infinite loop in lag_rac_refill() with corrupted files
  - VC1 decoder: prevent a crash due missing pred_flag parameter
  - matroska: Fix use after free
  - VP3: Fix double free in vp3_decode_end()
 -
 -
 -version 9.1:
  - Fix a crash on windows platforms related to automatic stack alignment
    in libavresample
  - Fix memleaks in the Ogg demuxer. Related to CVE-2012-2882
  
  
 -version 9:
 -- av_basename and av_dirname
 -- adobe and limelight publisher authentication in RTMP
 +version 1.1:
  
 -
 -version 9_beta3:
 -- ashowinfo audio filter
 +- 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
  - 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
 +- 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
 -- Opus decoder and encoder using libopus
 -- remove -same_quant, it hasn't worked for years
 +- faststart option in the MOV/MP4 muxer
  - support for building with MSVC
  
  
 -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
 +- ffv1: support (draft) version 1.3
  
  
 -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
      * -vframes/-aframes/-dframes options are now aliases to the new -frames option.
      * -vtag/-atag/-stag options are now aliases to the new -tag option.
  - XMV demuxer
 +- LOAS demuxer
 +- ashowinfo filter added
  - Windows Media Image decoder
 +- amovie source added
  - LATM muxer/demuxer
 -- showinfo filter
 -- split filter
 +- Speex encoder via libspeex
 +- JSON output in ffprobe
 +- WTV muxer
 +- Optional C++ Support (needed for libstagefright)
 +- H.264 Decoding on Android via Stagefright
 +- Prores decoder
 +- BIN/XBIN/ADF/IDF text file decoder
 +- aconvert audio filter added
 +- audio support to lavfi input device added
  - libcdio-paranoia input device for audio CD grabbing
 -- select filter
  - Apple ProRes decoder
  - CELT in Ogg demuxing
 +- G.723.1 demuxer and decoder
 +- libmodplug support (--enable-libmodplug)
  - VC-1 interlaced decoding
 -- lut, lutrgb, and lutyuv filters
 -- boxblur filter
 +- libutvideo wrapper (--enable-libutvideo)
 +- aevalsrc audio source added
  - Ut Video decoder
  - Speex encoding via libspeex
  - 4:2:2 H.264 decoding support
  - 4:2:2 and 4:4:4 H.264 encoding with libx264
  - Pulseaudio input device
 +- Prores encoder
 +- Video Decoder Acceleration (VDA) HWAccel module.
  - replacement Indeo 3 decoder
 +- new ffmpeg option: -map_channel
 +- volume audio filter added
 +- earwax audio filter added
 +- libv4l2 support (--enable-libv4l2)
  - TLS/SSL and HTTPS protocol support
  - AVOptions API rewritten and documented
  - most of CODEC_FLAG2_*, some CODEC_FLAG_* and many codec-specific fields in
  - Discworld II BMV decoding support
  - VBLE Decoder
  - OS X Video Decoder Acceleration (VDA) support
 +- compact and csv output in ffprobe
 +- pan audio filter
 +- IFF Amiga Continuous Bitmap (ACBM) decoder
 +- ass filter
  - CRI ADX audio format muxer and demuxer
  - Playstation Portable PMP format demuxer
 +- Microsoft Windows ICO demuxer
 +- life source
  - PCM format support in OMA demuxer
  - CLJR encoder
 +- new option: -report
  - Dxtory capture format decoder
 -- v410 QuickTime uncompressed 4:4:4 10-bit encoder and decoder
 -- OpenMG Audio muxer
 +- cellauto source
  - Simple segmenting muxer
  - Indeo 4 decoder
  - SMJPEG demuxer
  
  
 -version 0.7:
 -
 -- E-AC-3 audio encoder
 -- ac3enc: add channel coupling support
 -- floating-point sample format support for (E-)AC-3, DCA, AAC, Vorbis decoders
 -- H.264/MPEG frame-level multithreading
 -- av_metadata_* functions renamed to av_dict_* and moved to libavutil
 -- 4:4:4 H.264 decoding support
 -- 10-bit H.264 optimizations for x86
 -- bump libswscale for recently reported ABI break
 -
 -
 -version 0.7_beta2:
 -
 -- VP8 frame-level multithreading
 -- NEON optimizations for VP8
 -- removed a lot of deprecated API cruft
 -- FFT and IMDCT optimizations for AVX (Sandy Bridge) processors
 -- DPX image encoder
 -- SMPTE 302M AES3 audio decoder
 -- ffmpeg no longer quits after the 'q' key is pressed; use 'ctrl+c' instead
 -- 9bit and 10bit per sample support in the H.264 decoder
 -
 -
 -version 0.7_beta1:
 +version 0.8:
  
 +- many many things we forgot because we rather write code than changelogs
  - WebM support in Matroska de/muxer
  - low overhead Ogg muxing
  - MMS-TCP support
  - Demuxer for On2's IVF format
  - Pictor/PC Paint decoder
  - HE-AAC v2 decoder
 +- HE-AAC v2 encoding with libaacplus
  - libfaad2 wrapper removed
  - DTS-ES extension (XCh) decoding support
  - native VP8 decoder
  - RTP depacketization of QDM2
  - ANSI/ASCII art playback system
  - Lego Mindstorms RSO de/muxer
 +- libavcore added (and subsequently removed)
  - SubRip subtitle file muxer and demuxer
  - Chinese AVS encoding via libxavs
  - ffprobe -show_packets option added
  - replace the ocv_smooth filter with a more generic ocv filter
  - Windows Televison (WTV) demuxer
  - FFmpeg metadata format muxer and demuxer
 -- SubRip (srt) subtitle decoder
 +- SubRip (srt) subtitle encoder and decoder
  - floating-point AC-3 encoder added
  - Lagarith decoder
  - ffmpeg -copytb option added
  - sndio support for playback and record
  - Linux framebuffer input device added
  - Chronomaster DFA decoder
 -- Mobotix MxPEG decoder
 +- DPX image encoder
 +- MicroDVD subtitle file muxer and demuxer
 +- Playstation Portable PMP format demuxer
 +- fieldorder video filter added
  - AAC encoding via libvo-aacenc
  - AMR-WB encoding via libvo-amrwbenc
  - xWMA demuxer
 -- fieldorder video filter added
 +- Mobotix MxPEG decoder
 +- VP8 frame-multithreading
 +- NEON optimizations for VP8
 +- Lots of deprecated API cruft removed
 +- fft and imdct optimizations for AVX (Sandy Bridge) processors
 +- showinfo filter added
 +- SMPTE 302M AES3 audio decoder
 +- Apple Core Audio Format muxer
 +- 9bit and 10bit per sample support in the H.264 decoder
 +- 9bit and 10bit FFV1 encoding / decoding
 +- split filter added
 +- select filter added
 +- sdl output device added
 +- libmpcodecs video filter support (3 times as many filters than before)
 +- mpeg2 aspect ratio dection fixed
 +- libxvid aspect pickiness fixed
 +- Frame multithreaded decoding
 +- E-AC-3 audio encoder
 +- ac3enc: add channel coupling support
 +- floating-point sample format support to the ac3, eac3, dca, aac, and vorbis decoders.
 +- H264/MPEG frame-level multi-threading
 +- All av_metadata_* functions renamed to av_dict_* and moved to libavutil
 +- 4:4:4 H.264 decoding support
 +- 10-bit H.264 optimizations for x86
 +- lut, lutrgb, and lutyuv filters added
 +- buffersink libavfilter sink added
 +- Bump libswscale for recently reported ABI break
 +- New J2K encoder (via OpenJPEG)
 +
 +
 +version 0.7:
 +
 +- all the changes for 0.8, but keeping API/ABI compatibility with the 0.6 release
  
  
  version 0.6:
@@@ -827,7 -691,6 +838,7 @@@ version 0.5
  - Gopher client support
  - MXF D-10 muxer
  - generic metadata API
 +- flash ScreenVideo2 encoder
  
  
  version 0.4.9-pre1:
@@@ -1030,7 -893,7 +1041,7 @@@ version 0.4.5
  - MPEG-4 vol header fixes (Jonathan Marsden <snmjbm at pacbell.net>)
  - ARM optimizations (Lionel Ulmer <lionel.ulmer at free.fr>).
  - Windows porting of file converter
 -- added MJPEG raw format (input/ouput)
 +- added MJPEG raw format (input/output)
  - added JPEG image format support (input/output)
  
  
diff --combined libavcodec/indeo3.c
@@@ -2,20 -2,20 +2,20 @@@
   * Indeo Video v3 compatible decoder
   * Copyright (c) 2009 - 2011 Maxim Poliakovski
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -149,11 -149,14 +149,11 @@@ static av_cold void build_requant_tab(v
  
  
  static av_cold int allocate_frame_buffers(Indeo3DecodeContext *ctx,
 -                                          AVCodecContext *avctx)
 +                                          AVCodecContext *avctx, int luma_width, int luma_height)
  {
 -    int p, luma_width, luma_height, chroma_width, chroma_height;
 +    int p, chroma_width, chroma_height;
      int luma_pitch, chroma_pitch, luma_size, chroma_size;
  
 -    luma_width  = ctx->width;
 -    luma_height = ctx->height;
 -
      if (luma_width  < 16 || luma_width  > 640 ||
          luma_height < 16 || luma_height > 480 ||
          luma_width  &  3 || luma_height &   3) {
          return AVERROR_INVALIDDATA;
      }
  
 +    ctx->width  = luma_width ;
 +    ctx->height = luma_height;
 +
      chroma_width  = FFALIGN(luma_width  >> 2, 4);
      chroma_height = FFALIGN(luma_height >> 2, 4);
  
@@@ -207,9 -207,6 +207,9 @@@ static av_cold void free_frame_buffers(
  {
      int p;
  
 +    ctx->width=
 +    ctx->height= 0;
 +
      for (p = 0; p < 3; p++) {
          av_freep(&ctx->planes[p].buffers[0]);
          av_freep(&ctx->planes[p].buffers[1]);
@@@ -234,11 -231,8 +234,11 @@@ static int copy_cell(Indeo3DecodeContex
      /* setup output and reference pointers */
      offset_dst  = (cell->ypos << 2) * plane->pitch + (cell->xpos << 2);
      dst         = plane->pixels[ctx->buf_sel] + offset_dst;
 +    if(cell->mv_ptr){
      mv_y        = cell->mv_ptr[0];
      mv_x        = cell->mv_ptr[1];
 +    }else
 +        mv_x= mv_y= 0;
  
      /* -1 because there is an extra line on top for prediction */
      if ((cell->ypos << 2) + mv_y < -1 || (cell->xpos << 2) + mv_x < 0 ||
  
  /* Average 4/8 pixels at once without rounding using SWAR */
  #define AVG_32(dst, src, ref) \
-     AV_WN32A(dst, ((AV_RN32A(src) + AV_RN32A(ref)) >> 1) & 0x7F7F7F7FUL)
+     AV_WN32A(dst, ((AV_RN32(src) + AV_RN32(ref)) >> 1) & 0x7F7F7F7FUL)
  
  #define AVG_64(dst, src, ref) \
-     AV_WN64A(dst, ((AV_RN64A(src) + AV_RN64A(ref)) >> 1) & 0x7F7F7F7F7F7F7F7FULL)
+     AV_WN64A(dst, ((AV_RN64(src) + AV_RN64(ref)) >> 1) & 0x7F7F7F7F7F7F7F7FULL)
  
  
  /*
@@@ -345,7 -339,7 +345,7 @@@ if (*data_ptr >= last_ptr) 
          copy_block4(dst, ref, row_offset, row_offset, 4 << v_zoom)
  
  #define RLE_BLOCK_COPY_8 \
-     pix64 = AV_RN64A(ref);\
+     pix64 = AV_RN64(ref);\
      if (is_first_row) {/* special prediction case: top line of a cell */\
          pix64 = replicate64(pix64);\
          fill_64(dst + row_offset, pix64, 7, row_offset);\
      copy_block4(dst, ref, row_offset, row_offset, num_lines << v_zoom)
  
  #define RLE_LINES_COPY_M10 \
-     pix64 = AV_RN64A(ref);\
+     pix64 = AV_RN64(ref);\
      if (is_top_of_cell) {\
          pix64 = replicate64(pix64);\
          fill_64(dst + row_offset, pix64, (num_lines << 1) - 1, row_offset);\
  
  #define APPLY_DELTA_4 \
      AV_WN16A(dst + line_offset    ,\
-              (AV_RN16A(ref    ) + delta_tab->deltas[dyad1]) & 0x7F7F);\
+              (AV_RN16(ref    ) + delta_tab->deltas[dyad1]) & 0x7F7F);\
      AV_WN16A(dst + line_offset + 2,\
-              (AV_RN16A(ref + 2) + delta_tab->deltas[dyad2]) & 0x7F7F);\
+              (AV_RN16(ref + 2) + delta_tab->deltas[dyad2]) & 0x7F7F);\
      if (mode >= 3) {\
          if (is_top_of_cell && !cell->ypos) {\
-             AV_COPY32(dst, dst + row_offset);\
+             AV_COPY32U(dst, dst + row_offset);\
          } else {\
              AVG_32(dst, ref, dst + row_offset);\
          }\
      /* apply two 32-bit VQ deltas to next even line */\
      if (is_top_of_cell) { \
          AV_WN32A(dst + row_offset    , \
-                  (replicate32(AV_RN32A(ref    )) + delta_tab->deltas_m10[dyad1]) & 0x7F7F7F7F);\
+                  (replicate32(AV_RN32(ref    )) + delta_tab->deltas_m10[dyad1]) & 0x7F7F7F7F);\
          AV_WN32A(dst + row_offset + 4, \
-                  (replicate32(AV_RN32A(ref + 4)) + delta_tab->deltas_m10[dyad2]) & 0x7F7F7F7F);\
+                  (replicate32(AV_RN32(ref + 4)) + delta_tab->deltas_m10[dyad2]) & 0x7F7F7F7F);\
      } else { \
          AV_WN32A(dst + row_offset    , \
-                  (AV_RN32A(ref    ) + delta_tab->deltas_m10[dyad1]) & 0x7F7F7F7F);\
+                  (AV_RN32(ref    ) + delta_tab->deltas_m10[dyad1]) & 0x7F7F7F7F);\
          AV_WN32A(dst + row_offset + 4, \
-                  (AV_RN32A(ref + 4) + delta_tab->deltas_m10[dyad2]) & 0x7F7F7F7F);\
+                  (AV_RN32(ref + 4) + delta_tab->deltas_m10[dyad2]) & 0x7F7F7F7F);\
      } \
      /* odd lines are not coded but rather interpolated/replicated */\
      /* first line of the cell on the top of image? - replicate */\
      /* otherwise - interpolate */\
      if (is_top_of_cell && !cell->ypos) {\
-         AV_COPY64(dst, dst + row_offset);\
+         AV_COPY64U(dst, dst + row_offset);\
      } else \
          AVG_64(dst, ref, dst + row_offset);
  
  #define APPLY_DELTA_1011_INTER \
      if (mode == 10) { \
          AV_WN32A(dst                 , \
-                  (AV_RN32A(dst                 ) + delta_tab->deltas_m10[dyad1]) & 0x7F7F7F7F);\
+                  (AV_RN32(dst                 ) + delta_tab->deltas_m10[dyad1]) & 0x7F7F7F7F);\
          AV_WN32A(dst + 4             , \
-                  (AV_RN32A(dst + 4             ) + delta_tab->deltas_m10[dyad2]) & 0x7F7F7F7F);\
+                  (AV_RN32(dst + 4             ) + delta_tab->deltas_m10[dyad2]) & 0x7F7F7F7F);\
          AV_WN32A(dst + row_offset    , \
-                  (AV_RN32A(dst + row_offset    ) + delta_tab->deltas_m10[dyad1]) & 0x7F7F7F7F);\
+                  (AV_RN32(dst + row_offset    ) + delta_tab->deltas_m10[dyad1]) & 0x7F7F7F7F);\
          AV_WN32A(dst + row_offset + 4, \
-                  (AV_RN32A(dst + row_offset + 4) + delta_tab->deltas_m10[dyad2]) & 0x7F7F7F7F);\
+                  (AV_RN32(dst + row_offset + 4) + delta_tab->deltas_m10[dyad2]) & 0x7F7F7F7F);\
      } else { \
          AV_WN16A(dst                 , \
-                  (AV_RN16A(dst                 ) + delta_tab->deltas[dyad1]) & 0x7F7F);\
+                  (AV_RN16(dst                 ) + delta_tab->deltas[dyad1]) & 0x7F7F);\
          AV_WN16A(dst + 2             , \
-                  (AV_RN16A(dst + 2             ) + delta_tab->deltas[dyad2]) & 0x7F7F);\
+                  (AV_RN16(dst + 2             ) + delta_tab->deltas[dyad2]) & 0x7F7F);\
          AV_WN16A(dst + row_offset    , \
-                  (AV_RN16A(dst + row_offset    ) + delta_tab->deltas[dyad1]) & 0x7F7F);\
+                  (AV_RN16(dst + row_offset    ) + delta_tab->deltas[dyad1]) & 0x7F7F);\
          AV_WN16A(dst + row_offset + 2, \
-                  (AV_RN16A(dst + row_offset + 2) + delta_tab->deltas[dyad2]) & 0x7F7F);\
+                  (AV_RN16(dst + row_offset + 2) + delta_tab->deltas[dyad2]) & 0x7F7F);\
      }
  
  
@@@ -597,19 -591,6 +597,19 @@@ static int decode_cell(Indeo3DecodeCont
      /* setup output and reference pointers */
      offset = (cell->ypos << 2) * plane->pitch + (cell->xpos << 2);
      block  =  plane->pixels[ctx->buf_sel] + offset;
 +
 +    if (cell->mv_ptr) {
 +        mv_y      = cell->mv_ptr[0];
 +        mv_x      = cell->mv_ptr[1];
 +        if (   mv_x + 4*cell->xpos < 0
 +            || mv_y + 4*cell->ypos < 0
 +            || mv_x + 4*cell->xpos + 4*cell->width  > plane->width
 +            || mv_y + 4*cell->ypos + 4*cell->height > plane->height) {
 +            av_log(avctx, AV_LOG_ERROR, "motion vector %d %d outside reference\n", mv_x + 4*cell->xpos, mv_y + 4*cell->ypos);
 +            return AVERROR_INVALIDDATA;
 +        }
 +    }
 +
      if (!cell->mv_ptr) {
          /* use previous line as reference for INTRA cells */
          ref_block = block - plane->pitch;
      /* of the predicted cell in order to avoid overflows. */
      if (vq_index >= 8 && ref_block) {
          for (x = 0; x < cell->width << 2; x++)
 -            ref_block[x] = requant_tab[vq_index & 7][ref_block[x]];
 +            ref_block[x] = requant_tab[vq_index & 7][ref_block[x] & 127];
      }
  
      error = IV3_NOERR;
@@@ -790,7 -771,7 +790,7 @@@ static int parse_bintree(Indeo3DecodeCo
              return AVERROR_INVALIDDATA;
      }
  
 -    while (1) { /* loop until return */
 +    while (get_bits_left(&ctx->gb) >= 2) { /* loop until return */
          RESYNC_BITSTREAM;
          switch (code = get_bits(&ctx->gb, 2)) {
          case H_SPLIT:
                  /* get motion vector index and setup the pointer to the mv set */
                  if (!ctx->need_resync)
                      ctx->next_cell_data = &ctx->gb.buffer[(get_bits_count(&ctx->gb) + 7) >> 3];
 +                if (ctx->next_cell_data >= ctx->last_byte) {
 +                    av_log(avctx, AV_LOG_ERROR, "motion vector out of array\n");
 +                    return AVERROR_INVALIDDATA;
 +                }
                  mv_idx = *(ctx->next_cell_data++);
                  if (mv_idx >= ctx->num_vectors) {
                      av_log(avctx, AV_LOG_ERROR, "motion vector index out of range\n");
          }
      }//while
  
 -    return 0;
 +    return AVERROR_INVALIDDATA;
  }
  
  
@@@ -868,13 -845,13 +868,13 @@@ static int decode_plane(Indeo3DecodeCon
  
      /* each plane data starts with mc_vector_count field, */
      /* an optional array of motion vectors followed by the vq data */
 -    num_vectors = bytestream_get_le32(&data);
 +    num_vectors = bytestream_get_le32(&data); data_size -= 4;
      if (num_vectors > 256) {
          av_log(ctx->avctx, AV_LOG_ERROR,
                 "Read invalid number of motion vectors %d\n", num_vectors);
          return AVERROR_INVALIDDATA;
      }
 -    if (num_vectors * 2 >= data_size)
 +    if (num_vectors * 2 > data_size)
          return AVERROR_INVALIDDATA;
  
      ctx->num_vectors = num_vectors;
      ctx->skip_bits   = 0;
      ctx->need_resync = 0;
  
 -    ctx->last_byte = data + data_size - 1;
 +    ctx->last_byte = data + data_size;
  
      /* initialize the 1st cell and set its dimensions to whole plane */
      curr_cell.xpos   = curr_cell.ypos = 0;
@@@ -960,8 -937,12 +960,8 @@@ static int decode_frame_headers(Indeo3D
                     "Invalid picture dimensions: %d x %d!\n", width, height);
              return AVERROR_INVALIDDATA;
          }
 -
 -        ctx->width  = width;
 -        ctx->height = height;
 -
          free_frame_buffers(ctx);
 -        if ((res = allocate_frame_buffers(ctx, avctx)) < 0)
 +        if ((res = allocate_frame_buffers(ctx, avctx, width, height)) < 0)
               return res;
          avcodec_set_dimensions(avctx, width, height);
      }
@@@ -1058,14 -1039,17 +1058,14 @@@ static av_cold int decode_init(AVCodecC
      Indeo3DecodeContext *ctx = avctx->priv_data;
  
      ctx->avctx     = avctx;
 -    ctx->width     = avctx->width;
 -    ctx->height    = avctx->height;
      avctx->pix_fmt = AV_PIX_FMT_YUV410P;
 +    avcodec_get_frame_defaults(&ctx->frame);
  
      build_requant_tab();
  
      ff_dsputil_init(&ctx->dsp, avctx);
  
 -    allocate_frame_buffers(ctx, avctx);
 -
 -    return 0;
 +    return allocate_frame_buffers(ctx, avctx, avctx->width, avctx->height);
  }
  
  
@@@ -1100,15 -1084,6 +1100,15 @@@ static int decode_frame(AVCodecContext 
      /* use BS_BUFFER flag for buffer switching */
      ctx->buf_sel = (ctx->frame_flags >> BS_BUFFER) & 1;
  
 +    if (ctx->frame.data[0])
 +        avctx->release_buffer(avctx, &ctx->frame);
 +
 +    ctx->frame.reference = 0;
 +    if ((res = ff_get_buffer(avctx, &ctx->frame)) < 0) {
 +        av_log(ctx->avctx, AV_LOG_ERROR, "get_buffer() failed\n");
 +        return res;
 +    }
 +
      /* decode luma plane */
      if ((res = decode_plane(ctx, avctx, ctx->planes, ctx->y_data_ptr, ctx->y_data_size, 40)))
          return res;
      if ((res = decode_plane(ctx, avctx, &ctx->planes[2], ctx->v_data_ptr, ctx->v_data_size, 10)))
          return res;
  
 -    if (ctx->frame.data[0])
 -        avctx->release_buffer(avctx, &ctx->frame);
 -
 -    ctx->frame.reference = 0;
 -    if ((res = ff_get_buffer(avctx, &ctx->frame)) < 0) {
 -        av_log(ctx->avctx, AV_LOG_ERROR, "get_buffer() failed\n");
 -        return res;
 -    }
 -
      output_plane(&ctx->planes[0], ctx->buf_sel,
                   ctx->frame.data[0], ctx->frame.linesize[0],
                   avctx->height);
@@@ -1157,6 -1141,6 +1157,6 @@@ AVCodec ff_indeo3_decoder = 
      .init           = decode_init,
      .close          = decode_close,
      .decode         = decode_frame,
 -    .capabilities   = CODEC_CAP_DR1,
      .long_name      = NULL_IF_CONFIG_SMALL("Intel Indeo 3"),
 +    .capabilities   = CODEC_CAP_DR1,
  };
diff --combined libavfilter/af_asyncts.c
@@@ -47,28 -47,34 +47,28 @@@ typedef struct ASyncContext 
  
  #define OFFSET(x) offsetof(ASyncContext, x)
  #define A AV_OPT_FLAG_AUDIO_PARAM
 -static const AVOption options[] = {
 -    { "compensate", "Stretch/squeeze the data to make it match the timestamps", OFFSET(resample),      AV_OPT_TYPE_INT,   { .i64 = 0 },   0, 1,       A },
 +#define F AV_OPT_FLAG_FILTERING_PARAM
 +static const AVOption asyncts_options[] = {
 +    { "compensate", "Stretch/squeeze the data to make it match the timestamps", OFFSET(resample),      AV_OPT_TYPE_INT,   { .i64 = 0 },   0, 1,       A|F },
      { "min_delta",  "Minimum difference between timestamps and audio data "
 -                    "(in seconds) to trigger padding/trimmin the data.",        OFFSET(min_delta_sec), AV_OPT_TYPE_FLOAT, { .dbl = 0.1 }, 0, INT_MAX, A },
 -    { "max_comp",   "Maximum compensation in samples per second.",              OFFSET(max_comp),      AV_OPT_TYPE_INT,   { .i64 = 500 }, 0, INT_MAX, A },
 -    { "first_pts",  "Assume the first pts should be this value.",               OFFSET(first_pts),     AV_OPT_TYPE_INT64, { .i64 = AV_NOPTS_VALUE }, INT64_MIN, INT64_MAX, A },
 +                    "(in seconds) to trigger padding/trimmin the data.",        OFFSET(min_delta_sec), AV_OPT_TYPE_FLOAT, { .dbl = 0.1 }, 0, INT_MAX, A|F },
 +    { "max_comp",   "Maximum compensation in samples per second.",              OFFSET(max_comp),      AV_OPT_TYPE_INT,   { .i64 = 500 }, 0, INT_MAX, A|F },
 +    { "first_pts",  "Assume the first pts should be this value.",               OFFSET(first_pts),     AV_OPT_TYPE_INT64, { .i64 = AV_NOPTS_VALUE }, INT64_MIN, INT64_MAX, A|F },
      { NULL },
  };
  
 -static const AVClass async_class = {
 -    .class_name = "asyncts filter",
 -    .item_name  = av_default_item_name,
 -    .option     = options,
 -    .version    = LIBAVUTIL_VERSION_INT,
 -};
 +AVFILTER_DEFINE_CLASS(asyncts);
  
  static int init(AVFilterContext *ctx, const char *args)
  {
      ASyncContext *s = ctx->priv;
      int ret;
  
 -    s->class = &async_class;
 +    s->class = &asyncts_class;
      av_opt_set_defaults(s);
  
 -    if ((ret = av_set_options_string(s, args, "=", ":")) < 0) {
 -        av_log(ctx, AV_LOG_ERROR, "Error parsing options string '%s'.\n", args);
 +    if ((ret = av_set_options_string(s, args, "=", ":")) < 0)
          return ret;
 -    }
      av_opt_free(s);
  
      s->pts         = AV_NOPTS_VALUE;
@@@ -231,18 -237,23 +231,23 @@@ static int filter_frame(AVFilterLink *i
          }
  
          if (s->first_frame && delta > 0) {
+             int planar = av_sample_fmt_is_planar(buf_out->format);
+             int planes = planar ?  nb_channels : 1;
+             int block_size = av_get_bytes_per_sample(buf_out->format) *
+                              (planar ? 1 : nb_channels);
              int ch;
  
              av_samples_set_silence(buf_out->extended_data, 0, delta,
                                     nb_channels, buf->format);
  
-             for (ch = 0; ch < nb_channels; ch++)
-                 buf_out->extended_data[ch] += delta;
+             for (ch = 0; ch < planes; ch++)
+                 buf_out->extended_data[ch] += delta * block_size;
  
              avresample_read(s->avr, buf_out->extended_data, out_size);
  
-             for (ch = 0; ch < nb_channels; ch++)
-                 buf_out->extended_data[ch] -= delta;
+             for (ch = 0; ch < planes; ch++)
+                 buf_out->extended_data[ch] -= delta * block_size;
          } else {
              avresample_read(s->avr, buf_out->extended_data, out_size);
  
@@@ -279,7 -290,7 +284,7 @@@ static const AVFilterPad avfilter_af_as
      {
          .name           = "default",
          .type           = AVMEDIA_TYPE_AUDIO,
 -        .filter_frame   = filter_frame,
 +        .filter_frame   = filter_frame
      },
      { NULL }
  };
@@@ -305,5 -316,4 +310,5 @@@ AVFilter avfilter_af_asyncts = 
  
      .inputs      = avfilter_af_asyncts_inputs,
      .outputs     = avfilter_af_asyncts_outputs,
 +    .priv_class = &asyncts_class,
  };
diff --combined libavformat/omadec.c
@@@ -5,20 -5,20 +5,20 @@@
   *               2008 Benjamin Larsson
   *               2011 David Goldwich
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -37,6 -37,7 +37,6 @@@
   * - Sound data organized in packets follow the EA3 header
   *   (can be encrypted using the Sony DRM!).
   *
 - * CODEC SUPPORT: Only ATRAC3 codec is currently supported!
   */
  
  #include "libavutil/channel_layout.h"
@@@ -158,7 -159,7 +158,7 @@@ static int nprobe(AVFormatContext *s, u
      taglen = AV_RB32(&enc_header[pos+32]);
      datalen = AV_RB32(&enc_header[pos+36]) >> 4;
  
 -    if(taglen + (((uint64_t)datalen)<<4) + 44 > size)
 +    if(pos + (uint64_t)taglen + (((uint64_t)datalen)<<4) + 44 > size)
          return -1;
  
      pos += 44 + taglen;
@@@ -218,12 -219,6 +218,12 @@@ static int decrypt_init(AVFormatContex
          av_log(s, AV_LOG_ERROR, "Invalid encryption header\n");
          return -1;
      }
 +    if (   OMA_ENC_HEADER_SIZE + oc->k_size + oc->e_size + oc->i_size + 8 > geob->datasize
 +        || OMA_ENC_HEADER_SIZE + 48 > geob->datasize
 +    ) {
 +        av_log(s, AV_LOG_ERROR, "Too little GEOB data\n");
 +        return AVERROR_INVALIDDATA;
 +    }
      oc->rid = AV_RB32(&gdata[OMA_ENC_HEADER_SIZE + 28]);
      av_log(s, AV_LOG_DEBUG, "RID: %.8x\n", oc->rid);
  
              if (!rprobe(s, gdata, oc->r_val) || !nprobe(s, gdata, geob->datasize, oc->n_val))
                  break;
          }
 -        if (i >= sizeof(leaf_table)) {
 +        if (i >= FF_ARRAY_ELEMS(leaf_table)) {
              av_log(s, AV_LOG_ERROR, "Invalid key\n");
              return -1;
          }
@@@ -355,7 -350,7 +355,7 @@@ static int oma_read_header(AVFormatCont
              av_log(s, AV_LOG_ERROR, "Unsupported codec ATRAC3+!\n");
              break;
          case OMA_CODECID_MP3:
 -            st->need_parsing = AVSTREAM_PARSE_FULL;
 +            st->need_parsing = AVSTREAM_PARSE_FULL_RAW;
              framesize = 1024;
              break;
          case OMA_CODECID_LPCM:
@@@ -386,14 -381,16 +386,16 @@@ static int oma_read_packet(AVFormatCont
      int packet_size = s->streams[0]->codec->block_align;
      int ret = av_get_packet(s->pb, pkt, packet_size);
  
-     if (ret <= 0)
-         return AVERROR(EIO);
+     if (ret < 0)
+         return ret;
+     if (!ret)
+         return AVERROR_EOF;
  
      pkt->stream_index = 0;
  
      if (oc->encrypted) {
          /* previous unencrypted block saved in IV for the next packet (CBC mode) */
 -        av_des_crypt(&oc->av_des, pkt->data, pkt->data, (packet_size >> 3), oc->iv, 1);
 +        av_des_crypt(&oc->av_des, pkt->data, pkt->data, (ret >> 3), oc->iv, 1);
      }
  
      return ret;