Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 28 Jan 2012 23:34:59 +0000 (00:34 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 28 Jan 2012 23:34:59 +0000 (00:34 +0100)
* qatar/master:
  aacenc: Fix LONG_START windowing.
  aacenc: Fix a bug where deinterleaved samples were stored in the wrong place.
  avplay: use the correct array size for stride.
  lavc: extend doxy for avcodec_alloc_context3().
  APIchanges: mention avcodec_alloc_context()/2/3
  avcodec_align_dimensions2: set only 4 linesizes, not AV_NUM_DATA_POINTERS.
  aacsbr: ARM NEON optimised sbrdsp functions
  aacsbr: align some arrays
  aacsbr: move some simdable loops to function pointers
  cosmetics: Remove extra newlines at EOF

Conflicts:
libavcodec/utils.c
libavfilter/formats.c
libavutil/mem.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
99 files changed:
1  2 
doc/APIchanges
libavcodec/4xm.c
libavcodec/Makefile
libavcodec/aacenc.c
libavcodec/aacsbr.c
libavcodec/aacsbrdata.h
libavcodec/acelp_filters.c
libavcodec/allcodecs.c
libavcodec/alsdec.c
libavcodec/amrnbdata.h
libavcodec/arm/Makefile
libavcodec/atrac.c
libavcodec/aura.c
libavcodec/avcodec.h
libavcodec/bitstream.c
libavcodec/cscd.c
libavcodec/dvdata.c
libavcodec/dxa.c
libavcodec/dxva2.c
libavcodec/dxva2_h264.c
libavcodec/dxva2_mpeg2.c
libavcodec/dxva2_vc1.c
libavcodec/escape124.c
libavcodec/fft.c
libavcodec/flashsvenc.c
libavcodec/h261.c
libavcodec/h261enc.c
libavcodec/h264_cavlc.c
libavcodec/h264_mp4toannexb_bsf.c
libavcodec/idcinvideo.c
libavcodec/imgconvert.c
libavcodec/intelh263dec.c
libavcodec/kbdwin.c
libavcodec/libvo-aacenc.c
libavcodec/libvo-amrwbenc.c
libavcodec/libxavs.c
libavcodec/libxvid_rc.c
libavcodec/mace.c
libavcodec/mathops.h
libavcodec/mdec.c
libavcodec/mlp_parser.h
libavcodec/mpeg12.c
libavcodec/mpeg4video.c
libavcodec/msrledec.c
libavcodec/msrledec.h
libavcodec/nellymoserdec.c
libavcodec/nuv.c
libavcodec/pcm_tablegen.c
libavcodec/psymodel.c
libavcodec/qtrle.c
libavcodec/ratecontrol.h
libavcodec/rl2.c
libavcodec/sbr.h
libavcodec/sgidec.c
libavcodec/smacker.c
libavcodec/snow.c
libavcodec/tscc.c
libavcodec/ulti.c
libavcodec/utils.c
libavcodec/utvideo.c
libavcodec/vb.c
libavcodec/vmnc.c
libavcodec/vorbisdec.c
libavcodec/wma.c
libavcodec/xxan.c
libavcodec/zmbv.c
libavdevice/avdevice.h
libavfilter/defaults.c
libavfilter/formats.c
libavfilter/vf_aspect.c
libavfilter/vf_format.c
libavformat/aea.c
libavformat/avio.c
libavformat/httpauth.c
libavformat/id3v1.h
libavformat/iss.c
libavformat/lxfdec.c
libavformat/metadata.c
libavformat/movenchint.c
libavformat/network.c
libavformat/omadec.c
libavformat/rl2.c
libavformat/rtpdec_amr.c
libavformat/rtpdec_h263.c
libavformat/rtpenc_amr.c
libavformat/rtpenc_chain.c
libavformat/rtpenc_mpv.c
libavformat/rtsp.c
libavformat/rtspenc.c
libavformat/sapdec.c
libavformat/sapenc.c
libavformat/sdp.c
libavformat/seek.c
libavutil/crc.h
libavutil/intfloat_readwrite.c
libavutil/md5.h
libavutil/mem.c
libswscale/rgb2rgb.c
libswscale/utils.c

diff --combined doc/APIchanges
@@@ -6,16 -6,13 +6,16 @@@ libavcodec:  2012-01-2
  libavdevice: 2011-04-18
  libavfilter: 2011-04-18
  libavformat: 2012-01-27
 -libpostproc: 2011-04-18 (deprecated, to be removed later)
 +libpostproc: 2011-04-18
  libswscale:  2011-06-20
  libavutil:   2011-04-18
  
  
  API changes, most recent first:
  
 +2012-01-24 - xxxxxxx - lavfi 2.60.100
 +  Add avfilter_graph_dump.
 +
  2012-01-25 - lavf 53.22.0
    f1caf01 Allow doing av_write_frame(ctx, NULL) for flushing possible
            buffered data within a muxer. Added AVFMT_ALLOW_FLUSH for
  2012-01-12 - 3167dc9 - lavfi 2.15.0
    Add a new installed header -- libavfilter/version.h -- with version macros.
  
 -2011-01-03 - b73ec05 - lavu 51.21.0
 -  Add av_popcount64
 +2011-12-08 - a502939 - lavfi 2.52.0
 +  Add av_buffersink_poll_frame() to buffersink.h.
 +
 +2011-12-08 - xxxxxxx - lavu 51.31.0
 +  Add av_log_format_line.
 +
 +2011-12-03 - xxxxxxx - lavu 51.30.0
 +  Add AVERROR_BUG.
 +
 +2011-xx-xx - xxxxxxx - lavu 51.28.1
 +  Add av_get_alt_sample_fmt() to samplefmt.h.
 +
 +2011-11-03 - 96949da - lavu 51.23.0
 +  Add av_strcasecmp() and av_strncasecmp() to avstring.h.
  
 -2011-12-25 - lavfi 2.14.0
 -  e1d9dbf Add a new installed header - buffersrc.h
 -  It contains a new function av_buffersrc_buffer() that allows passing
 -  frames to the 'buffer' filter, but unlike av_vsrc_buffer_add_frame()
 -  it allows for direct rendering.
 -  1c9e340 Add avfilter_copy_frame_props() for copying properties from
 -  AVFrame to AVFilterBufferRef.
 +2011-10-20 - b35e9e1 - lavu 51.22.0
 +  Add av_strtok() to avstring.h.
  
 -2011-12-25 - lavc 53.31.0
 -  Add the following new fields to AVFrame:
 -    b58dbb5 sample_aspect_ratio
 -    3a2ddf7 width, height
 -    8a4a5f6 format
 +2011-01-03 - b73ec05 - lavu 51.21.0
 +  Add av_popcount64
  
  2011-12-18 - 8400b12 - lavc 53.28.1
    Deprecate AVFrame.age. The field is unused.
    - 641c7af new functions - av_opt_child_next, av_opt_child_class_next
      and av_opt_find2()
  
 -2011-09-03 - fb4ca26 - lavc 53.10.0
 -                       lavf 53.6.0
 +2011-09-22 - a70e787 - lavu 51.17.0
 +  Add av_x_if_null().
 +
 +2011-09-18 - 645cebb - lavc 53.16.0
 +  Add showall flag2
 +
 +2011-09-16 - ea8de10 - lavfi 2.42.0
 +  Add avfilter_all_channel_layouts.
 +
 +2011-09-16 - 9899037 - lavfi 2.41.0
 +  Rename avfilter_all_* function names to avfilter_make_all_*.
 +
 +  In particular, apply the renames:
 +  avfilter_all_formats         -> avfilter_make_all_formats
 +  avfilter_all_channel_layouts -> avfilter_make_all_channel_layouts
 +  avfilter_all_packing_formats -> avfilter_make_all_packing_formats
 +
 +2011-09-12 - 4381bdd - lavfi 2.40.0
 +  Change AVFilterBufferRefAudioProps.sample_rate type from uint32_t to int.
 +
 +2011-09-12 - 2c03174 - lavfi 2.40.0
 +  Simplify signature for avfilter_get_audio_buffer(), make it
 +  consistent with avfilter_get_video_buffer().
 +
 +2011-09-06 - 4f7dfe1 - lavfi 2.39.0
 +  Rename libavfilter/vsink_buffer.h to libavfilter/buffersink.h.
 +
 +2011-09-06 - c4415f6 - lavfi 2.38.0
 +  Unify video and audio sink API.
 +
 +  In particular, add av_buffersink_get_buffer_ref(), deprecate
 +  av_vsink_buffer_get_video_buffer_ref() and change the value for the
 +  opaque field passed to the abuffersink init function.
 +
 +2011-09-04 - 61e2e29 - lavu 51.16.0
 +  Add av_asprintf().
 +
 +2011-08-22 - dacd827 - lavf 53.10.0
 +  Add av_find_program_from_stream().
 +
 +2011-08-20 - 69e2c1a - lavu 51.13.0
 +  Add av_get_media_type_string().
 +
 +2011-09-03 - fb4ca26 - lavc 53.13.0
 +                       lavf 53.11.0
                         lsws  2.1.0
    Add {avcodec,avformat,sws}_get_class().
  
 -2011-09-03 - c11fb82 - lavu 51.10.0
 +2011-08-03 - c11fb82 - lavu 51.15.0
    Add AV_OPT_SEARCH_FAKE_OBJ flag for av_opt_find() function.
  
 +2011-08-14 - 323b930 - lavu 51.12.0
 +  Add av_fifo_peek2(), deprecate av_fifo_peek().
 +
  2011-08-26 - lavu 51.9.0
 -  - f2011ed Add av_fifo_peek2(), deprecate av_fifo_peek().
    - add41de..abc78a5 Do not include intfloat_readwrite.h,
      mathematics.h, rational.h, pixfmt.h, or log.h from avutil.h.
  
 -2011-08-16 - 48f9e45 - lavf 53.4.0
 +2011-08-16 - 48f9e45 - lavf 53.8.0
    Add avformat_query_codec().
  
 -2011-08-16 - bca06e7 - lavc 53.8.0
 +2011-08-16 - bca06e7 - lavc 53.11.0
    Add avcodec_get_type().
  
 -2011-08-06 - 2f63440 - lavf 53.4.0
 +2011-08-06 - 2f63440 - lavf 53.7.0
    Add error_recognition to AVFormatContext.
  
 -2011-08-02 - 9d39cbf - lavc 53.7.1
 +2011-08-02 - 9d39cbf - lavc 53.9.1
    Add AV_PKT_FLAG_CORRUPT AVPacket flag.
  
 -2011-07-10 - a67c061 - lavf 53.3.0
 +2011-07-16 - b57df29 - lavfi 2.27.0
 +  Add audio packing negotiation fields and helper functions.
 +
 +  In particular, add AVFilterPacking enum, planar, in_packings and
 +  out_packings fields to AVFilterLink, and the functions:
 +  avfilter_set_common_packing_formats()
 +  avfilter_all_packing_formats()
 +
 +2011-07-10 - a67c061 - lavf 53.6.0
    Add avformat_find_stream_info(), deprecate av_find_stream_info().
  
 -2011-07-10 - 0b950fe - lavc 53.6.0
 +2011-07-10 - 0b950fe - lavc 53.8.0
    Add avcodec_open2(), deprecate avcodec_open().
+   Add avcodec_alloc_context3. Deprecate avcodec_alloc_context() and
+   avcodec_alloc_context2().
  
 +2011-07-01 - b442ca6 - lavf 53.5.0 - avformat.h
 +  Add function av_get_output_timestamp().
 +
 +2011-06-28 - 5129336 - lavu 51.11.0 - avutil.h
 +  Define the AV_PICTURE_TYPE_NONE value in AVPictureType enum.
 +
 +2011-06-19 - fd2c0a5 - lavfi 2.23.0 - avfilter.h
 +  Add layout negotiation fields and helper functions.
 +
 +  In particular, add in_chlayouts and out_chlayouts to AVFilterLink,
 +  and the functions:
 +  avfilter_set_common_sample_formats()
 +  avfilter_set_common_channel_layouts()
 +  avfilter_all_channel_layouts()
 +
 +2011-06-19 - 527ca39 - lavfi 2.22.0 - AVFilterFormats
 +  Change type of AVFilterFormats.formats from int * to int64_t *,
 +  and update formats handling API accordingly.
 +
 +  avfilter_make_format_list() still takes a int32_t array and converts
 +  it to int64_t. A new function, avfilter_make_format64_list(), that
 +  takes int64_t arrays has been added.
 +
 +2011-06-19 - 44f669e - lavfi 2.21.0 - vsink_buffer.h
 +  Add video sink buffer and vsink_buffer.h public header.
 +
 +2011-06-12 - 9fdf772 - lavfi 2.18.0 - avcodec.h
 +  Add avfilter_get_video_buffer_ref_from_frame() function in
 +  libavfilter/avcodec.h.
 +
 +2011-06-12 - c535494 - lavfi 2.17.0 - avfiltergraph.h
 +  Add avfilter_inout_alloc() and avfilter_inout_free() functions.
 +
 +2011-06-12 - 6119b23 - lavfi 2.16.0 - avfilter_graph_parse()
 +  Change avfilter_graph_parse() signature.
 +
  2011-06-23 - 67e9ae1 - lavu 51.8.0 - attributes.h
    Add av_printf_format().
  
  2011-06-10 - cb7c11c - lavu 51.6.0 - opt.h
    Add av_opt_flag_is_set().
  
 -2011-06-08 - d9f80ea - lavu 51.5.0 - AVMetadata
 +2011-06-10 - c381960 - lavfi 2.15.0 - avfilter_get_audio_buffer_ref_from_arrays
 +  Add avfilter_get_audio_buffer_ref_from_arrays() to avfilter.h.
 +
 +2011-06-09 - d9f80ea - lavu 51.8.0 - AVMetadata
    Move AVMetadata from lavf to lavu and rename it to
    AVDictionary -- new installed header dict.h.
    All av_metadata_* functions renamed to av_dict_*.
  
 -2011-06-07 - a6703fa - lavu 51.4.0 - av_get_bytes_per_sample()
 +2011-06-07 - a6703fa - lavu 51.8.0 - av_get_bytes_per_sample()
    Add av_get_bytes_per_sample() in libavutil/samplefmt.h.
    Deprecate av_get_bits_per_sample_fmt().
  
 -2011-06-05 - b39b062 - lavu 51.3.0 - opt.h
 +2011-06-05 - b39b062 - lavu 51.8.0 - opt.h
    Add av_opt_free convenience function.
  
 -2011-05-28 - 0420bd7 - lavu 51.2.0 - pixdesc.h
 +2011-06-06 - 95a0242 - lavfi 2.14.0 - AVFilterBufferRefAudioProps
 +  Remove AVFilterBufferRefAudioProps.size, and use nb_samples in
 +  avfilter_get_audio_buffer() and avfilter_default_get_audio_buffer() in
 +  place of size.
 +
 +2011-06-06 - 0bc2cca - lavu 51.6.0 - av_samples_alloc()
 +  Switch nb_channels and nb_samples parameters order in
 +  av_samples_alloc().
 +
 +2011-06-06 - e1c7414 - lavu 51.5.0 - av_samples_*
 +  Change the data layout created by av_samples_fill_arrays() and
 +  av_samples_alloc().
 +
 +2011-06-06 - 27bcf55 - lavfi 2.13.0 - vsrc_buffer.h
 +  Make av_vsrc_buffer_add_video_buffer_ref() accepts an additional
 +  flags parameter in input.
 +
 +2011-06-03 - e977ca2 - lavfi 2.12.0 - avfilter_link_free()
 +  Add avfilter_link_free() function.
 +
 +2011-06-02 - 5ad38d9 - lavu 51.4.0 - av_force_cpu_flags()
 +  Add av_cpu_flags() in libavutil/cpu.h.
 +
 +2011-05-28 - e71f260 - lavu 51.3.0 - pixdesc.h
    Add av_get_pix_fmt_name() in libavutil/pixdesc.h, and deprecate
    avcodec_get_pix_fmt_name() in libavcodec/avcodec.h in its favor.
  
 -2011-05-25 - 30315a8 - lavf 53.1.0 - avformat.h
 +2011-05-25 - 30315a8 - lavf 53.3.0 - avformat.h
    Add fps_probe_size to AVFormatContext.
  
 -2011-05-18 - 64150ff - lavc 53.4.0 - AVCodecContext.request_sample_fmt
 +2011-05-22 - 5ecdfd0 - lavf 53.2.0 - avformat.h
 +  Introduce avformat_alloc_output_context2() and deprecate
 +  avformat_alloc_output_context().
 +
 +2011-05-22 - 83db719 - lavfi 2.10.0 - vsrc_buffer.h
 +  Make libavfilter/vsrc_buffer.h public.
 +
 +2011-05-19 - c000a9f - lavfi 2.8.0 - avcodec.h
 +  Add av_vsrc_buffer_add_frame() to libavfilter/avcodec.h.
 +
 +2011-05-14 - 9fdf772 - lavfi 2.6.0 - avcodec.h
 +  Add avfilter_get_video_buffer_ref_from_frame() to libavfilter/avcodec.h.
 +
 +2011-05-18 - 64150ff - lavc 53.7.0 - AVCodecContext.request_sample_fmt
    Add request_sample_fmt field to AVCodecContext.
  
 -2011-05-10 - 188dea1 - lavc 53.3.0 - avcodec.h
 +2011-05-10 - 188dea1 - lavc 53.6.0 - avcodec.h
    Deprecate AVLPCType and the following fields in
    AVCodecContext: lpc_coeff_precision, prediction_order_method,
    min_partition_order, max_partition_order, lpc_type, lpc_passes.
    Corresponding FLAC encoder options should be used instead.
  
 +2011-05-07 - 9fdf772 - lavfi 2.5.0 - avcodec.h
 +  Add libavfilter/avcodec.h header and avfilter_copy_frame_props()
 +  function.
 +
 +2011-05-07 - 18ded93 - lavc 53.5.0 - AVFrame
 +  Add format field to AVFrame.
 +
 +2011-05-07 - 22333a6 - lavc 53.4.0 - AVFrame
 +  Add width and height fields to AVFrame.
 +
 +2011-05-01 - 35fe66a - lavfi 2.4.0 - avfilter.h
 +  Rename AVFilterBufferRefVideoProps.pixel_aspect to
 +  sample_aspect_ratio.
 +
 +2011-05-01 - 77e9dee - lavc 53.3.0 - AVFrame
 +  Add a sample_aspect_ratio field to AVFrame.
 +
 +2011-05-01 - 1ba5727 - lavc 53.2.0 - AVFrame
 +  Add a pkt_pos field to AVFrame.
 +
 +2011-04-29 - 35ceaa7 - lavu 51.2.0 - mem.h
 +  Add av_dynarray_add function for adding
 +  an element to a dynamic array.
 +
  2011-04-26 - bebe72f - lavu 51.1.0 - avutil.h
    Add AVPictureType enum and av_get_picture_type_char(), deprecate
    FF_*_TYPE defines and av_get_pict_type_char() defined in
      333e894 deprecate url_open_protocol
      e230705 deprecate url_poll and URLPollEntry
  
 -2011-04-10 - lavu  50.40.0 - pixfmt.h
 -  Add PIX_FMT_BGR48LE and PIX_FMT_BGR48BE pixel formats
 -
  2011-04-08 - lavf 52.106.0 - avformat.h
    Minor avformat.h cleanup:
      a9bf9d8 deprecate av_guess_image2_codec
      d9d86e0 rename url_fprintf -> avio_printf
      59f65d9 deprecate url_setbufsize
      3e68b3b deprecate url_ferror
 -    66e5b1d deprecate url_feof
      e8bb2e2 deprecate url_fget_max_packet_size
      76aa876 rename url_fsize -> avio_size
      e519753 deprecate url_fgetc
  2011-03-25 - 34b47d7 - lavc 52.115.0 - AVCodecContext.audio_service_type
    Add audio_service_type field to AVCodecContext.
  
 +2011-03-17 - e309fdc - lavu 50.40.0 - pixfmt.h
 +  Add PIX_FMT_BGR48LE and PIX_FMT_BGR48BE pixel formats
 +
  2011-03-02 - 863c471 - lavf  52.103.0 - av_pkt_dump2, av_pkt_dump_log2
    Add new functions av_pkt_dump2, av_pkt_dump_log2 that uses the
    source stream timebase for outputting timestamps. Deprecate
  2011-02-02 - dfd2a00 - lavu 50.37.0 - log.h
    Make av_dlog public.
  
 +2011-01-31 - 7b3ea55 - lavfi 1.76.0 - vsrc_buffer
 +  Add sample_aspect_ratio fields to vsrc_buffer arguments
 +
 +2011-01-31 - 910b5b8 - lavfi 1.75.0 - AVFilterLink sample_aspect_ratio
 +  Add sample_aspect_ratio field to AVFilterLink.
 +
  2011-01-15 - r26374 - lavfi 1.74.0 - AVFilterBufferRefAudioProps
    Rename AVFilterBufferRefAudioProps.samples_nb to nb_samples.
  
diff --combined libavcodec/4xm.c
@@@ -2,20 -2,20 +2,20 @@@
   * 4XM codec
   * Copyright (c) 2003 Michael Niedermayer
   *
 - * 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
   */
  
@@@ -328,11 -328,7 +328,11 @@@ static void decode_p_block(FourXContex
      assert(code>=0 && code<=6);
  
      if(code == 0){
 -        src += f->mv[bytestream2_get_byte(&f->g)];
 +        if (f->g.buffer_end - f->g.buffer < 1){
 +            av_log(f->avctx, AV_LOG_ERROR, "bytestream overread\n");
 +            return;
 +        }
 +        src += f->mv[ *f->g.buffer++ ];
          if(start > src || src > end){
              av_log(f->avctx, AV_LOG_ERROR, "mv out of pic\n");
              return;
      }else if(code == 3 && f->version<2){
          mcdc(dst, src, log2w, h, stride, 1, 0);
      }else if(code == 4){
 -        src += f->mv[bytestream2_get_byte(&f->g)];
 +        if (f->g.buffer_end - f->g.buffer < 1){
 +            av_log(f->avctx, AV_LOG_ERROR, "bytestream overread\n");
 +            return;
 +        }
 +        src += f->mv[ *f->g.buffer++ ];
          if(start > src || src > end){
              av_log(f->avctx, AV_LOG_ERROR, "mv out of pic\n");
              return;
          }
 +        if (f->g2.buffer_end - f->g2.buffer < 1){
 +            av_log(f->avctx, AV_LOG_ERROR, "wordstream overread\n");
 +            return;
 +        }
          mcdc(dst, src, log2w, h, stride, 1, bytestream2_get_le16(&f->g2));
      }else if(code == 5){
 +        if (f->g2.buffer_end - f->g2.buffer < 1){
 +            av_log(f->avctx, AV_LOG_ERROR, "wordstream overread\n");
 +            return;
 +        }
          mcdc(dst, src, log2w, h, stride, 0, bytestream2_get_le16(&f->g2));
      }else if(code == 6){
 +        if (f->g2.buffer_end - f->g2.buffer < 2){
 +            av_log(f->avctx, AV_LOG_ERROR, "wordstream overread\n");
 +            return;
 +        }
          if(log2w){
              dst[0] = bytestream2_get_le16(&f->g2);
              dst[1] = bytestream2_get_le16(&f->g2);
@@@ -395,8 -375,6 +395,8 @@@ static int decode_p_frame(FourXContext 
  
      if(f->version>1){
          extra=20;
 +        if (length < extra)
 +            return -1;
          bitstream_size= AV_RL32(buf+8);
          wordstream_size= AV_RL32(buf+12);
          bytestream_size= AV_RL32(buf+16);
          bytestream_size= FFMAX(length - bitstream_size - wordstream_size, 0);
      }
  
 -    if(bitstream_size+ bytestream_size+ wordstream_size + extra != length
 -       || bitstream_size  > (1<<26)
 -       || bytestream_size > (1<<26)
 -       || wordstream_size > (1<<26)
 -       ){
 +    if (bitstream_size > length ||
 +        bytestream_size > length - bitstream_size ||
 +        wordstream_size > length - bytestream_size - bitstream_size ||
 +        extra > length - bytestream_size - bitstream_size - wordstream_size){
          av_log(f->avctx, AV_LOG_ERROR, "lengths %d %d %d %d\n", bitstream_size, bytestream_size, wordstream_size,
          bitstream_size+ bytestream_size+ wordstream_size - length);
          return -1;
  static int decode_i_block(FourXContext *f, DCTELEM *block){
      int code, i, j, level, val;
  
 +    if(get_bits_left(&f->gb) < 2){
 +        av_log(f->avctx, AV_LOG_ERROR, "%d bits left before decode_i_block()\n", get_bits_left(&f->gb));
 +        return -1;
 +    }
 +
      /* DC coef */
      val = get_vlc2(&f->pre_gb, f->pre_vlc.table, ACDC_VLC_BITS, 3);
      if (val>>4){
@@@ -551,7 -525,7 +551,7 @@@ static int decode_i_mb(FourXContext *f)
      return 0;
  }
  
 -static const uint8_t *read_huffman_tables(FourXContext *f, const uint8_t * const buf){
 +static const uint8_t *read_huffman_tables(FourXContext *f, const uint8_t * const buf, int buf_size){
      int frequency[512];
      uint8_t flag[512];
      int up[512];
      int bits_tab[257];
      int start, end;
      const uint8_t *ptr= buf;
 +    const uint8_t *ptr_end = buf + buf_size;
      int j;
  
      memset(frequency, 0, sizeof(frequency));
      for(;;){
          int i;
  
 +        if (start <= end && ptr_end - ptr < end - start + 1 + 1)
 +            return NULL;
          for(i=start; i<=end; i++){
              frequency[i]= *ptr++;
          }
@@@ -646,7 -617,6 +646,7 @@@ static int decode_i2_frame(FourXContex
      const int mbs = (FFALIGN(width, 16) >> 4) * (FFALIGN(height, 16) >> 4);
      uint16_t *dst= (uint16_t*)f->current_picture.data[0];
      const int stride= f->current_picture.linesize[0]>>1;
 +    const uint8_t *buf_end = buf + length;
      GetByteContext g3;
  
      if(length < mbs * 8) {
      for(y=0; y<height; y+=16){
          for(x=0; x<width; x+=16){
              unsigned int color[4], bits;
 +            if (buf_end - buf < 8)
 +                return -1;
              memset(color, 0, sizeof(color));
  //warning following is purely guessed ...
              color[0]= bytestream2_get_le16u(&g3);
@@@ -691,26 -659,27 +691,26 @@@ static int decode_i_frame(FourXContext 
      const int width= f->avctx->width;
      const int height= f->avctx->height;
      const unsigned int bitstream_size= AV_RL32(buf);
 -    int token_count av_unused;
      unsigned int prestream_size;
      const uint8_t *prestream;
  
 -    if (length < bitstream_size + 12) {
 +    if (bitstream_size > (1<<26) || length < bitstream_size + 12) {
          av_log(f->avctx, AV_LOG_ERROR, "packet size too small\n");
          return AVERROR_INVALIDDATA;
      }
  
 -    token_count    = AV_RL32(buf + bitstream_size + 8);
      prestream_size = 4 * AV_RL32(buf + bitstream_size + 4);
      prestream      = buf + bitstream_size + 12;
  
 -    if(prestream_size + bitstream_size + 12 != length
 -       || bitstream_size > (1<<26)
 -       || prestream_size > (1<<26)){
 +    if (prestream_size > (1<<26) ||
 +        prestream_size != length - (bitstream_size + 12)){
          av_log(f->avctx, AV_LOG_ERROR, "size mismatch %d %d %d\n", prestream_size, bitstream_size, length);
          return -1;
      }
  
 -    prestream= read_huffman_tables(f, prestream);
 +    prestream= read_huffman_tables(f, prestream, buf + length - prestream);
 +    if (!prestream)
 +        return -1;
  
      init_get_bits(&f->gb, buf + 4, 8*bitstream_size);
  
@@@ -751,8 -720,6 +751,8 @@@ static int decode_frame(AVCodecContext 
      AVFrame *p, temp;
      int i, frame_4cc, frame_size;
  
 +    if (buf_size < 12)
 +        return AVERROR_INVALIDDATA;
      frame_4cc= AV_RL32(buf);
      if(buf_size != AV_RL32(buf+4)+8 || buf_size < 20){
          av_log(f->avctx, AV_LOG_ERROR, "size mismatch %d %d\n", buf_size, AV_RL32(buf+4));
          const int whole_size= AV_RL32(buf+16);
          CFrameBuffer *cfrm;
  
 +        if (data_size < 0 || whole_size < 0){
 +            av_log(f->avctx, AV_LOG_ERROR, "sizes invalid\n");
 +            return AVERROR_INVALIDDATA;
 +        }
 +
          for(i=0; i<CFRAME_BUFFER_COUNT; i++){
              if(f->cfrm[i].id && f->cfrm[i].id < avctx->frame_number)
                  av_log(f->avctx, AV_LOG_ERROR, "lost c frame %d\n", f->cfrm[i].id);
          }
          cfrm= &f->cfrm[i];
  
 +        if (data_size > UINT_MAX -  cfrm->size - FF_INPUT_BUFFER_PADDING_SIZE)
 +            return AVERROR_INVALIDDATA;
          cfrm->data= av_fast_realloc(cfrm->data, &cfrm->allocated_size, cfrm->size + data_size + FF_INPUT_BUFFER_PADDING_SIZE);
          if(!cfrm->data){ //explicit check needed as memcpy below might not catch a NULL
              av_log(f->avctx, AV_LOG_ERROR, "realloc falure");
  
      avctx->flags |= CODEC_FLAG_EMU_EDGE; // alternatively we would have to use our own buffer management
  
 -    if(p->data[0])
 -        avctx->release_buffer(avctx, p);
 -
 -    p->reference= 1;
 -    if(avctx->get_buffer(avctx, p) < 0){
 -        av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
 +    p->reference= 3;
 +    if (avctx->reget_buffer(avctx, p) < 0) {
 +        av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
          return -1;
      }
  
      if(frame_4cc == AV_RL32("ifr2")){
          p->pict_type= AV_PICTURE_TYPE_I;
 -        if(decode_i2_frame(f, buf-4, frame_size + 4) < 0)
 +        if(decode_i2_frame(f, buf-4, frame_size + 4) < 0) {
 +            av_log(f->avctx, AV_LOG_ERROR, "decode i2 frame failed\n");
              return -1;
 +        }
      }else if(frame_4cc == AV_RL32("ifrm")){
          p->pict_type= AV_PICTURE_TYPE_I;
 -        if(decode_i_frame(f, buf, frame_size) < 0)
 +        if(decode_i_frame(f, buf, frame_size) < 0){
 +            av_log(f->avctx, AV_LOG_ERROR, "decode i frame failed\n");
              return -1;
 +        }
      }else if(frame_4cc == AV_RL32("pfrm") || frame_4cc == AV_RL32("pfr2")){
          if(!f->last_picture.data[0]){
 -            f->last_picture.reference= 1;
 +            f->last_picture.reference= 3;
              if(avctx->get_buffer(avctx, &f->last_picture) < 0){
                  av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
                  return -1;
          }
  
          p->pict_type= AV_PICTURE_TYPE_P;
 -        if(decode_p_frame(f, buf, frame_size) < 0)
 +        if(decode_p_frame(f, buf, frame_size) < 0){
 +            av_log(f->avctx, AV_LOG_ERROR, "decode p frame failed\n");
              return -1;
 +        }
      }else if(frame_4cc == AV_RL32("snd_")){
          av_log(avctx, AV_LOG_ERROR, "ignoring snd_ chunk length:%d\n", buf_size);
      }else{
@@@ -887,13 -844,7 +887,13 @@@ static av_cold int decode_init(AVCodecC
          av_log(avctx, AV_LOG_ERROR, "extradata wrong or missing\n");
          return 1;
      }
 +    if((avctx->width % 16) || (avctx->height % 16)) {
 +        av_log(avctx, AV_LOG_ERROR, "unsupported width/height\n");
 +        return AVERROR_INVALIDDATA;
 +    }
  
 +    avcodec_get_frame_defaults(&f->current_picture);
 +    avcodec_get_frame_defaults(&f->last_picture);
      f->version= AV_RL32(avctx->extradata)>>16;
      common_init(avctx);
      init_vlcs(f);
@@@ -935,4 -886,3 +935,3 @@@ AVCodec ff_fourxm_decoder = 
      .capabilities   = CODEC_CAP_DR1,
      .long_name = NULL_IF_CONFIG_SMALL("4X Movie"),
  };
diff --combined libavcodec/Makefile
@@@ -1,5 -1,3 +1,5 @@@
 +include $(SUBDIR)../config.mak
 +
  NAME = avcodec
  FFLIBS = avutil
  
@@@ -18,7 -16,6 +18,7 @@@ OBJS = allcodecs.
         options.o                                                        \
         parser.o                                                         \
         raw.o                                                            \
 +       rawdec.o                                                         \
         resample.o                                                       \
         resample2.o                                                      \
         simple_idct.o                                                    \
@@@ -27,7 -24,6 +27,7 @@@
  # parts needed for many different codecs
  OBJS-$(CONFIG_AANDCT)                  += aandcttab.o
  OBJS-$(CONFIG_AC3DSP)                  += ac3dsp.o
 +OBJS-$(CONFIG_CRYSTALHD)               += crystalhd.o
  OBJS-$(CONFIG_ENCODERS)                += faandct.o jfdctfst.o jfdctint.o
  OBJS-$(CONFIG_DCT)                     += dct.o dct32_fixed.o dct32_float.o
  OBJS-$(CONFIG_DWT)                     += dwt.o
@@@ -56,7 -52,8 +56,8 @@@ OBJS-$(CONFIG_VDPAU)                   
  OBJS-$(CONFIG_A64MULTI_ENCODER)        += a64multienc.o elbg.o
  OBJS-$(CONFIG_A64MULTI5_ENCODER)       += a64multienc.o elbg.o
  OBJS-$(CONFIG_AAC_DECODER)             += aacdec.o aactab.o aacsbr.o aacps.o \
-                                           aacadtsdec.o mpeg4audio.o kbdwin.o
+                                           aacadtsdec.o mpeg4audio.o kbdwin.o \
+                                           sbrdsp.o
  OBJS-$(CONFIG_AAC_ENCODER)             += aacenc.o aaccoder.o    \
                                            aacpsy.o aactab.o      \
                                            psymodel.o iirfilter.o \
@@@ -81,7 -78,7 +82,7 @@@ OBJS-$(CONFIG_AMV_DECODER)             
  OBJS-$(CONFIG_ANM_DECODER)             += anm.o
  OBJS-$(CONFIG_ANSI_DECODER)            += ansi.o cga_data.o
  OBJS-$(CONFIG_APE_DECODER)             += apedec.o
 -OBJS-$(CONFIG_ASS_DECODER)             += assdec.o ass.o
 +OBJS-$(CONFIG_ASS_DECODER)             += assdec.o ass.o ass_split.o
  OBJS-$(CONFIG_ASS_ENCODER)             += assenc.o ass.o
  OBJS-$(CONFIG_ASV1_DECODER)            += asv1.o mpeg12data.o
  OBJS-$(CONFIG_ASV1_ENCODER)            += asv1.o mpeg12data.o
@@@ -91,15 -88,12 +92,15 @@@ OBJS-$(CONFIG_ATRAC1_DECODER)          
  OBJS-$(CONFIG_ATRAC3_DECODER)          += atrac3.o atrac.o
  OBJS-$(CONFIG_AURA_DECODER)            += cyuv.o
  OBJS-$(CONFIG_AURA2_DECODER)           += aura.o
 +OBJS-$(CONFIG_AVRP_DECODER)            += r210dec.o
 +OBJS-$(CONFIG_AVRP_ENCODER)            += r210enc.o
  OBJS-$(CONFIG_AVS_DECODER)             += avs.o
  OBJS-$(CONFIG_BETHSOFTVID_DECODER)     += bethsoftvideo.o
  OBJS-$(CONFIG_BFI_DECODER)             += bfi.o
  OBJS-$(CONFIG_BINK_DECODER)            += bink.o binkdsp.o
  OBJS-$(CONFIG_BINKAUDIO_DCT_DECODER)   += binkaudio.o wma.o
  OBJS-$(CONFIG_BINKAUDIO_RDFT_DECODER)  += binkaudio.o wma.o
 +OBJS-$(CONFIG_BINTEXT_DECODER)         += bintext.o cga_data.o
  OBJS-$(CONFIG_BMP_DECODER)             += bmp.o msrledec.o
  OBJS-$(CONFIG_BMP_ENCODER)             += bmpenc.o
  OBJS-$(CONFIG_BMV_VIDEO_DECODER)       += bmv.o
@@@ -115,9 -109,6 +116,9 @@@ OBJS-$(CONFIG_COOK_DECODER)            
  OBJS-$(CONFIG_CSCD_DECODER)            += cscd.o
  OBJS-$(CONFIG_CYUV_DECODER)            += cyuv.o
  OBJS-$(CONFIG_DCA_DECODER)             += dca.o synth_filter.o dcadsp.o
 +OBJS-$(CONFIG_DCA_ENCODER)             += dcaenc.o
 +OBJS-$(CONFIG_DIRAC_DECODER)           += diracdec.o dirac.o diracdsp.o \
 +                                          dirac_arith.o mpeg12data.o dwt.o
  OBJS-$(CONFIG_DFA_DECODER)             += dfa.o
  OBJS-$(CONFIG_DNXHD_DECODER)           += dnxhddec.o dnxhddata.o
  OBJS-$(CONFIG_DNXHD_ENCODER)           += dnxhdenc.o dnxhddata.o       \
@@@ -151,28 -142,20 +152,28 @@@ OBJS-$(CONFIG_EATQI_DECODER)           
  OBJS-$(CONFIG_EIGHTBPS_DECODER)        += 8bps.o
  OBJS-$(CONFIG_EIGHTSVX_EXP_DECODER)    += 8svx.o
  OBJS-$(CONFIG_EIGHTSVX_FIB_DECODER)    += 8svx.o
 +OBJS-$(CONFIG_EIGHTSVX_RAW_DECODER)    += 8svx.o
  OBJS-$(CONFIG_ESCAPE124_DECODER)       += escape124.o
 +OBJS-$(CONFIG_ESCAPE130_DECODER)       += escape130.o
  OBJS-$(CONFIG_FFV1_DECODER)            += ffv1.o rangecoder.o
  OBJS-$(CONFIG_FFV1_ENCODER)            += ffv1.o rangecoder.o
  OBJS-$(CONFIG_FFVHUFF_DECODER)         += huffyuv.o
  OBJS-$(CONFIG_FFVHUFF_ENCODER)         += huffyuv.o
 -OBJS-$(CONFIG_FLAC_DECODER)            += flacdec.o flacdata.o flac.o
 -OBJS-$(CONFIG_FLAC_ENCODER)            += flacenc.o flacdata.o flac.o
 +OBJS-$(CONFIG_FFWAVESYNTH_DECODER)     += ffwavesynth.o
 +OBJS-$(CONFIG_FLAC_DECODER)            += flacdec.o flacdata.o flac.o vorbis_data.o
 +OBJS-$(CONFIG_FLAC_ENCODER)            += flacenc.o flacdata.o flac.o vorbis_data.o
  OBJS-$(CONFIG_FLASHSV_DECODER)         += flashsv.o
  OBJS-$(CONFIG_FLASHSV_ENCODER)         += flashsvenc.o
 +OBJS-$(CONFIG_FLASHSV2_ENCODER)        += flashsv2enc.o
  OBJS-$(CONFIG_FLASHSV2_DECODER)        += flashsv.o
  OBJS-$(CONFIG_FLIC_DECODER)            += flicvideo.o
  OBJS-$(CONFIG_FOURXM_DECODER)          += 4xm.o
  OBJS-$(CONFIG_FRAPS_DECODER)           += fraps.o
  OBJS-$(CONFIG_FRWU_DECODER)            += frwu.o
 +OBJS-$(CONFIG_G723_1_DECODER)          += g723_1.o acelp_vectors.o \
 +                                          celp_filters.o celp_math.o
 +OBJS-$(CONFIG_G723_1_ENCODER)          += g723_1.o
 +OBJS-$(CONFIG_G729_DECODER)            += g729dec.o lsp.o celp_math.o acelp_filters.o acelp_pitch_delay.o acelp_vectors.o g729postfilter.o
  OBJS-$(CONFIG_GIF_DECODER)             += gifdec.o lzw.o
  OBJS-$(CONFIG_GIF_ENCODER)             += gif.o lzwenc.o
  OBJS-$(CONFIG_GSM_DECODER)             += gsmdec.o gsmdec_data.o msgsmdec.o
@@@ -204,7 -187,6 +205,7 @@@ OBJS-$(CONFIG_H264_VDA_HWACCEL)        
  OBJS-$(CONFIG_HUFFYUV_DECODER)         += huffyuv.o
  OBJS-$(CONFIG_HUFFYUV_ENCODER)         += huffyuv.o
  OBJS-$(CONFIG_IDCIN_DECODER)           += idcinvideo.o
 +OBJS-$(CONFIG_IDF_DECODER)             += bintext.o cga_data.o
  OBJS-$(CONFIG_IFF_BYTERUN1_DECODER)    += iff.o
  OBJS-$(CONFIG_IFF_ILBM_DECODER)        += iff.o
  OBJS-$(CONFIG_IMC_DECODER)             += imc.o
@@@ -214,8 -196,6 +215,8 @@@ OBJS-$(CONFIG_INDEO4_DECODER)          
  OBJS-$(CONFIG_INDEO5_DECODER)          += indeo5.o ivi_common.o ivi_dsp.o
  OBJS-$(CONFIG_INTERPLAY_DPCM_DECODER)  += dpcm.o
  OBJS-$(CONFIG_INTERPLAY_VIDEO_DECODER) += interplayvideo.o
 +OBJS-$(CONFIG_JPEG2000_DECODER)        += j2kdec.o mqcdec.o mqc.o j2k.o j2k_dwt.o
 +OBJS-$(CONFIG_JPEG2000_ENCODER)        += j2kenc.o mqcenc.o mqc.o j2k.o j2k_dwt.o
  OBJS-$(CONFIG_JPEGLS_DECODER)          += jpeglsdec.o jpegls.o \
                                            mjpegdec.o mjpeg.o
  OBJS-$(CONFIG_JPEGLS_ENCODER)          += jpeglsenc.o jpegls.o
@@@ -272,13 -252,10 +273,13 @@@ OBJS-$(CONFIG_MPC7_DECODER)            
  OBJS-$(CONFIG_MPC8_DECODER)            += mpc8.o mpc.o mpegaudiodec.o      \
                                            mpegaudiodecheader.o mpegaudio.o \
                                            mpegaudiodata.o
 +OBJS-$(CONFIG_MPEGVIDEO_DECODER)       += mpeg12.o mpeg12data.o \
 +                                          mpegvideo.o error_resilience.o
  OBJS-$(CONFIG_MPEG_XVMC_DECODER)       += mpegvideo_xvmc.o
  OBJS-$(CONFIG_MPEG1VIDEO_DECODER)      += mpeg12.o mpeg12data.o \
                                            mpegvideo.o error_resilience.o
  OBJS-$(CONFIG_MPEG1VIDEO_ENCODER)      += mpeg12enc.o mpegvideo_enc.o \
 +                                          timecode.o                  \
                                            motion_est.o ratecontrol.o  \
                                            mpeg12.o mpeg12data.o       \
                                            mpegvideo.o error_resilience.o
@@@ -287,7 -264,6 +288,7 @@@ OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL)     
  OBJS-$(CONFIG_MPEG2VIDEO_DECODER)      += mpeg12.o mpeg12data.o \
                                            mpegvideo.o error_resilience.o
  OBJS-$(CONFIG_MPEG2VIDEO_ENCODER)      += mpeg12enc.o mpegvideo_enc.o \
 +                                          timecode.o                  \
                                            motion_est.o ratecontrol.o  \
                                            mpeg12.o mpeg12data.o       \
                                            mpegvideo.o error_resilience.o
@@@ -303,7 -279,6 +304,7 @@@ OBJS-$(CONFIG_MSMPEG4V3_ENCODER)       
                                            h263.o ituh263dec.o mpeg4videodec.o
  OBJS-$(CONFIG_MSRLE_DECODER)           += msrle.o msrledec.o
  OBJS-$(CONFIG_MSVIDEO1_DECODER)        += msvideo1.o
 +OBJS-$(CONFIG_MSVIDEO1_ENCODER)        += msvideo1enc.o elbg.o
  OBJS-$(CONFIG_MSZH_DECODER)            += lcldec.o
  OBJS-$(CONFIG_MXPEG_DECODER)           += mxpegdec.o mjpegdec.o mjpeg.o
  OBJS-$(CONFIG_NELLYMOSER_DECODER)      += nellymoserdec.o nellymoser.o
@@@ -325,9 -300,7 +326,9 @@@ OBJS-$(CONFIG_PNG_DECODER)             
  OBJS-$(CONFIG_PNG_ENCODER)             += png.o pngenc.o
  OBJS-$(CONFIG_PPM_DECODER)             += pnmdec.o pnm.o
  OBJS-$(CONFIG_PPM_ENCODER)             += pnmenc.o pnm.o
 -OBJS-$(CONFIG_PRORES_DECODER)          += proresdec.o proresdsp.o
 +OBJS-$(CONFIG_PRORES_DECODER)          += proresdec2.o
 +OBJS-$(CONFIG_PRORES_LGPL_DECODER)     += proresdec_lgpl.o proresdsp.o
 +OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc.o
  OBJS-$(CONFIG_PTX_DECODER)             += ptx.o
  OBJS-$(CONFIG_QCELP_DECODER)           += qcelpdec.o celp_math.o         \
                                            celp_filters.o acelp_vectors.o \
@@@ -340,9 -313,7 +341,9 @@@ OBJS-$(CONFIG_QPEG_DECODER)            
  OBJS-$(CONFIG_QTRLE_DECODER)           += qtrle.o
  OBJS-$(CONFIG_QTRLE_ENCODER)           += qtrleenc.o
  OBJS-$(CONFIG_R10K_DECODER)            += r210dec.o
 +OBJS-$(CONFIG_R10K_ENCODER)            += r210enc.o
  OBJS-$(CONFIG_R210_DECODER)            += r210dec.o
 +OBJS-$(CONFIG_R210_ENCODER)            += r210enc.o
  OBJS-$(CONFIG_RA_144_DECODER)          += ra144dec.o ra144.o celp_filters.o
  OBJS-$(CONFIG_RA_144_ENCODER)          += ra144enc.o ra144.o celp_filters.o
  OBJS-$(CONFIG_RA_288_DECODER)          += ra288.o celp_math.o celp_filters.o
@@@ -380,12 -351,8 +381,12 @@@ OBJS-$(CONFIG_SNOW_ENCODER)            
                                            error_resilience.o ituh263enc.o  \
                                            mpegvideo_enc.o mpeg12data.o
  OBJS-$(CONFIG_SOL_DPCM_DECODER)        += dpcm.o
 +OBJS-$(CONFIG_SONIC_DECODER)           += sonic.o
 +OBJS-$(CONFIG_SONIC_ENCODER)           += sonic.o
 +OBJS-$(CONFIG_SONIC_LS_ENCODER)        += sonic.o
  OBJS-$(CONFIG_SP5X_DECODER)            += sp5xdec.o mjpegdec.o mjpeg.o
  OBJS-$(CONFIG_SRT_DECODER)             += srtdec.o ass.o
 +OBJS-$(CONFIG_SRT_ENCODER)             += srtenc.o ass_split.o
  OBJS-$(CONFIG_SUNRAST_DECODER)         += sunrast.o
  OBJS-$(CONFIG_SVQ1_DECODER)            += svq1dec.o svq1.o h263.o \
                                            mpegvideo.o error_resilience.o
@@@ -419,8 -386,6 +420,8 @@@ OBJS-$(CONFIG_ULTI_DECODER)            
  OBJS-$(CONFIG_UTVIDEO_DECODER)         += utvideo.o
  OBJS-$(CONFIG_V210_DECODER)            += v210dec.o
  OBJS-$(CONFIG_V210_ENCODER)            += v210enc.o
 +OBJS-$(CONFIG_V308_DECODER)            += v308dec.o
 +OBJS-$(CONFIG_V308_ENCODER)            += v308enc.o
  OBJS-$(CONFIG_V410_DECODER)            += v410dec.o
  OBJS-$(CONFIG_V410_ENCODER)            += v410enc.o
  OBJS-$(CONFIG_V210X_DECODER)           += v210x.o
@@@ -448,7 -413,6 +449,7 @@@ OBJS-$(CONFIG_VP6_DECODER)             
  OBJS-$(CONFIG_VP8_DECODER)             += vp8.o vp8dsp.o vp56rac.o
  OBJS-$(CONFIG_VQA_DECODER)             += vqavideo.o
  OBJS-$(CONFIG_WAVPACK_DECODER)         += wavpack.o
 +OBJS-$(CONFIG_WMALOSSLESS_DECODER)     += wmalosslessdec.o wma.o
  OBJS-$(CONFIG_WMAPRO_DECODER)          += wmaprodec.o wma.o
  OBJS-$(CONFIG_WMAV1_DECODER)           += wmadec.o wma.o aactab.o
  OBJS-$(CONFIG_WMAV1_ENCODER)           += wmaenc.o wma.o aactab.o
@@@ -469,17 -433,12 +470,17 @@@ OBJS-$(CONFIG_WS_SND1_DECODER)         
  OBJS-$(CONFIG_XAN_DPCM_DECODER)        += dpcm.o
  OBJS-$(CONFIG_XAN_WC3_DECODER)         += xan.o
  OBJS-$(CONFIG_XAN_WC4_DECODER)         += xxan.o
 +OBJS-$(CONFIG_XBIN_DECODER)            += bintext.o cga_data.o
  OBJS-$(CONFIG_XL_DECODER)              += xl.o
  OBJS-$(CONFIG_XSUB_DECODER)            += xsubdec.o
  OBJS-$(CONFIG_XSUB_ENCODER)            += xsubenc.o
  OBJS-$(CONFIG_XWD_DECODER)             += xwddec.o
  OBJS-$(CONFIG_XWD_ENCODER)             += xwdenc.o
 +OBJS-$(CONFIG_Y41P_DECODER)            += y41pdec.o
 +OBJS-$(CONFIG_Y41P_ENCODER)            += y41penc.o
  OBJS-$(CONFIG_YOP_DECODER)             += yop.o
 +OBJS-$(CONFIG_YUV4_DECODER)            += yuv4dec.o
 +OBJS-$(CONFIG_YUV4_ENCODER)            += yuv4enc.o
  OBJS-$(CONFIG_ZLIB_DECODER)            += lcldec.o
  OBJS-$(CONFIG_ZLIB_ENCODER)            += lclenc.o
  OBJS-$(CONFIG_ZMBV_DECODER)            += zmbv.o
@@@ -580,40 -539,36 +581,40 @@@ OBJS-$(CONFIG_ADTS_MUXER)              
  OBJS-$(CONFIG_ADX_DEMUXER)             += adx.o
  OBJS-$(CONFIG_CAF_DEMUXER)             += mpeg4audio.o mpegaudiodata.o
  OBJS-$(CONFIG_DV_DEMUXER)              += dvdata.o
 -OBJS-$(CONFIG_DV_MUXER)                += dvdata.o
 -OBJS-$(CONFIG_FLAC_DEMUXER)            += flacdec.o flacdata.o flac.o
 -OBJS-$(CONFIG_FLAC_MUXER)              += flacdec.o flacdata.o flac.o
 +OBJS-$(CONFIG_DV_MUXER)                += dvdata.o timecode.o
 +OBJS-$(CONFIG_FLAC_DEMUXER)            += flacdec.o flacdata.o flac.o vorbis_data.o
 +OBJS-$(CONFIG_FLAC_MUXER)              += flacdec.o flacdata.o flac.o vorbis_data.o
  OBJS-$(CONFIG_FLV_DEMUXER)             += mpeg4audio.o
  OBJS-$(CONFIG_GXF_DEMUXER)             += mpeg12data.o
  OBJS-$(CONFIG_IFF_DEMUXER)             += iff.o
  OBJS-$(CONFIG_LATM_MUXER)              += mpeg4audio.o
 -OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER)    += xiph.o mpeg4audio.o \
 +OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER)    += xiph.o mpeg4audio.o vorbis_data.o \
                                            flacdec.o flacdata.o flac.o
  OBJS-$(CONFIG_MATROSKA_DEMUXER)        += mpeg4audio.o mpegaudiodata.o
  OBJS-$(CONFIG_MATROSKA_MUXER)          += xiph.o mpeg4audio.o \
                                            flacdec.o flacdata.o flac.o \
 -                                          mpegaudiodata.o
 +                                          mpegaudiodata.o vorbis_data.o
  OBJS-$(CONFIG_MP3_MUXER)               += mpegaudiodata.o mpegaudiodecheader.o
 -OBJS-$(CONFIG_MOV_DEMUXER)             += mpeg4audio.o mpegaudiodata.o
 +OBJS-$(CONFIG_MOV_DEMUXER)             += mpeg4audio.o mpegaudiodata.o timecode.o
  OBJS-$(CONFIG_MOV_MUXER)               += mpeg4audio.o mpegaudiodata.o
  OBJS-$(CONFIG_MPEGTS_MUXER)            += mpegvideo.o mpeg4audio.o
  OBJS-$(CONFIG_MPEGTS_DEMUXER)          += mpeg4audio.o mpegaudiodata.o
 +OBJS-$(CONFIG_MXF_MUXER)               += timecode.o
  OBJS-$(CONFIG_NUT_MUXER)               += mpegaudiodata.o
  OBJS-$(CONFIG_OGG_DEMUXER)             += flacdec.o flacdata.o flac.o \
 -                                          dirac.o mpeg12data.o
 -OBJS-$(CONFIG_OGG_MUXER)               += xiph.o flacdec.o flacdata.o flac.o
 +                                          dirac.o mpeg12data.o vorbis_data.o
 +OBJS-$(CONFIG_OGG_MUXER)               += xiph.o flacdec.o flacdata.o flac.o \
 +                                          vorbis_data.o
  OBJS-$(CONFIG_RTP_MUXER)               += mpeg4audio.o mpegvideo.o xiph.o
  OBJS-$(CONFIG_SPDIF_DEMUXER)           += aacadtsdec.o mpeg4audio.o
  OBJS-$(CONFIG_WEBM_MUXER)              += xiph.o mpeg4audio.o \
                                            flacdec.o flacdata.o flac.o \
 -                                          mpegaudiodata.o
 +                                          mpegaudiodata.o vorbis_data.o
  OBJS-$(CONFIG_WTV_DEMUXER)             += mpeg4audio.o mpegaudiodata.o
  
  # external codec libraries
 +OBJS-$(CONFIG_LIBAACPLUS_ENCODER)         += libaacplus.o
 +OBJS-$(CONFIG_LIBCELT_DECODER)            += libcelt_dec.o
  OBJS-$(CONFIG_LIBDIRAC_DECODER)           += libdiracdec.o
  OBJS-$(CONFIG_LIBDIRAC_ENCODER)           += libdiracenc.o libdirac_libschro.o
  OBJS-$(CONFIG_LIBFAAC_ENCODER)            += libfaac.o
@@@ -625,8 -580,7 +626,8 @@@ OBJS-$(CONFIG_LIBMP3LAME_ENCODER
  OBJS-$(CONFIG_LIBOPENCORE_AMRNB_DECODER)  += libopencore-amr.o
  OBJS-$(CONFIG_LIBOPENCORE_AMRNB_ENCODER)  += libopencore-amr.o
  OBJS-$(CONFIG_LIBOPENCORE_AMRWB_DECODER)  += libopencore-amr.o
 -OBJS-$(CONFIG_LIBOPENJPEG_DECODER)        += libopenjpeg.o
 +OBJS-$(CONFIG_LIBOPENJPEG_DECODER)        += libopenjpegdec.o
 +OBJS-$(CONFIG_LIBOPENJPEG_ENCODER)        += libopenjpegenc.o
  OBJS-$(CONFIG_LIBSCHROEDINGER_DECODER)    += libschroedingerdec.o \
                                               libschroedinger.o    \
                                               libdirac_libschro.o
@@@ -635,9 -589,7 +636,9 @@@ OBJS-$(CONFIG_LIBSCHROEDINGER_ENCODER
                                               libdirac_libschro.o
  OBJS-$(CONFIG_LIBSPEEX_DECODER)           += libspeexdec.o
  OBJS-$(CONFIG_LIBSPEEX_ENCODER)           += libspeexenc.o
 +OBJS-$(CONFIG_LIBSTAGEFRIGHT_H264_DECODER)+= libstagefright.o
  OBJS-$(CONFIG_LIBTHEORA_ENCODER)          += libtheoraenc.o
 +OBJS-$(CONFIG_LIBUTVIDEO_DECODER)         += libutvideo.o
  OBJS-$(CONFIG_LIBVO_AACENC_ENCODER)       += libvo-aacenc.o mpeg4audio.o
  OBJS-$(CONFIG_LIBVO_AMRWBENC_ENCODER)     += libvo-amrwbenc.o
  OBJS-$(CONFIG_LIBVORBIS_ENCODER)          += libvorbis.o vorbis_data.o
@@@ -659,8 -611,7 +660,8 @@@ OBJS-$(CONFIG_DIRAC_PARSER)            
  OBJS-$(CONFIG_DNXHD_PARSER)            += dnxhd_parser.o
  OBJS-$(CONFIG_DVBSUB_PARSER)           += dvbsub_parser.o
  OBJS-$(CONFIG_DVDSUB_PARSER)           += dvdsub_parser.o
 -OBJS-$(CONFIG_FLAC_PARSER)             += flac_parser.o flacdata.o flac.o
 +OBJS-$(CONFIG_FLAC_PARSER)             += flac_parser.o flacdata.o flac.o \
 +                                          vorbis_data.o
  OBJS-$(CONFIG_GSM_PARSER)              += gsm_parser.o
  OBJS-$(CONFIG_H261_PARSER)             += h261_parser.o
  OBJS-$(CONFIG_H263_PARSER)             += h263_parser.o
@@@ -711,7 -662,6 +712,7 @@@ OBJS-$(CONFIG_TEXT2MOVSUB_BSF
  # thread libraries
  OBJS-$(HAVE_PTHREADS)                  += pthread.o
  OBJS-$(HAVE_W32THREADS)                += pthread.o
 +OBJS-$(HAVE_OS2THREADS)                += pthread.o
  
  OBJS-$(CONFIG_MLIB)                    += mlib/dsputil_mlib.o           \
  
@@@ -731,12 -681,14 +732,12 @@@ SKIPHEADERS-$(CONFIG_DXVA2)            
  SKIPHEADERS-$(CONFIG_LIBDIRAC)         += libdirac.h
  SKIPHEADERS-$(CONFIG_LIBSCHROEDINGER)  += libschroedinger.h
  SKIPHEADERS-$(CONFIG_VAAPI)            += vaapi_internal.h
 -SKIPHEADERS-$(CONFIG_VDA)              += vda.h vda_internal.h
 +SKIPHEADERS-$(CONFIG_VDA)              += vda_internal.h
  SKIPHEADERS-$(CONFIG_VDPAU)            += vdpau.h
  SKIPHEADERS-$(CONFIG_XVMC)             += xvmc.h
  SKIPHEADERS-$(HAVE_W32THREADS)         += w32pthreads.h
  
 -EXAMPLES = api
 -
 -TESTPROGS = cabac dct fft fft-fixed h264 iirfilter rangecoder
 +TESTPROGS = cabac dct fft fft-fixed h264 iirfilter rangecoder snowenc
  TESTPROGS-$(HAVE_MMX) += motion
  TESTOBJS = dctref.o
  
@@@ -782,10 -734,3 +783,10 @@@ $(SUBDIR)motionpixels.o: $(SUBDIR)motio
  $(SUBDIR)pcm.o: $(SUBDIR)pcm_tables.h
  $(SUBDIR)qdm2.o: $(SUBDIR)qdm2_tables.h
  endif
 +
 +CODEC_NAMES_SH := $(SRC_PATH)/$(SUBDIR)codec_names.sh
 +AVCODEC_H      := $(SRC_PATH)/$(SUBDIR)avcodec.h
 +$(SUBDIR)codec_names.h: $(CODEC_NAMES_SH) config.h $(AVCODEC_H)
 +      $(CC) $(CPPFLAGS) $(CFLAGS) -E $(AVCODEC_H) | \
 +      $(CODEC_NAMES_SH) config.h $@
 +$(SUBDIR)utils.o: $(SUBDIR)codec_names.h
diff --combined libavcodec/aacenc.c
@@@ -2,20 -2,20 +2,20 @@@
   * AAC encoder
   * Copyright (C) 2008 Konstantin Shishkov
   *
 - * 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
   */
  
@@@ -200,8 -200,8 +200,8 @@@ WINDOW_FUNC(long_start
      float *out = sce->ret;
  
      dsp->vector_fmul(out, audio, lwindow, 1024);
-     memcpy(out + 1024, audio, sizeof(out[0]) * 448);
-     dsp->vector_fmul_reverse(out + 1024 + 448, audio, swindow, 128);
+     memcpy(out + 1024, audio + 1024, sizeof(out[0]) * 448);
+     dsp->vector_fmul_reverse(out + 1024 + 448, audio + 1024 + 448, swindow, 128);
      memset(out + 1024 + 576, 0, sizeof(out[0]) * 448);
  }
  
@@@ -487,10 -487,10 +487,10 @@@ static void deinterleave_input_samples(
          const float *sptr = samples + channel_map[ch];
  
          /* copy last 1024 samples of previous frame to the start of the current frame */
-         memcpy(&s->planar_samples[ch][0], &s->planar_samples[ch][1024], 1024 * sizeof(s->planar_samples[0][0]));
+         memcpy(&s->planar_samples[ch][1024], &s->planar_samples[ch][2048], 1024 * sizeof(s->planar_samples[0][0]));
  
          /* deinterleave */
-         for (i = 1024; i < 1024 * 2; i++) {
+         for (i = 2048; i < 3072; i++) {
              s->planar_samples[ch][i] = *sptr;
              sptr += sinc;
          }
@@@ -745,7 -745,7 +745,7 @@@ static av_cold int aac_encode_init(AVCo
      if (ret = ff_psy_init(&s->psy, avctx, 2, sizes, lengths, s->chan_map[0], grouping))
          goto fail;
      s->psypp = ff_psy_preprocess_init(avctx);
 -    s->coder = &ff_aac_coders[2];
 +    s->coder = &ff_aac_coders[s->options.aac_coder];
  
      s->lambda = avctx->global_quality ? avctx->global_quality : 120;
  
@@@ -766,7 -766,6 +766,7 @@@ static const AVOption aacenc_options[] 
          {"auto",     "Selected by the Encoder", 0, AV_OPT_TYPE_CONST, {.dbl = -1 }, INT_MIN, INT_MAX, AACENC_FLAGS, "stereo_mode"},
          {"ms_off",   "Disable Mid/Side coding", 0, AV_OPT_TYPE_CONST, {.dbl =  0 }, INT_MIN, INT_MAX, AACENC_FLAGS, "stereo_mode"},
          {"ms_force", "Force Mid/Side for the whole frame if possible", 0, AV_OPT_TYPE_CONST, {.dbl =  1 }, INT_MIN, INT_MAX, AACENC_FLAGS, "stereo_mode"},
 +    {"aac_coder", "", offsetof(AACEncContext, options.aac_coder), AV_OPT_TYPE_INT, {.dbl = 2}, 0, AAC_CODER_NB-1, AACENC_FLAGS},
      {NULL}
  };
  
diff --combined libavcodec/aacsbr.c
@@@ -3,20 -3,20 +3,20 @@@
   * Copyright (c) 2008-2009 Robert Swain ( rob opendot cl )
   * Copyright (c) 2009-2010 Alex Converse <alex.converse@gmail.com>
   *
 - * 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
   */
  
  #include "aacsbrdata.h"
  #include "fft.h"
  #include "aacps.h"
+ #include "sbrdsp.h"
  #include "libavutil/libm.h"
 +#include "libavutil/avassert.h"
  
  #include <stdint.h>
  #include <float.h>
 +#include <math.h>
  
  #define ENVELOPE_ADJUSTMENT_OFFSET 2
  #define NOISE_FLOOR_OFFSET 6.0f
@@@ -131,8 -130,6 +132,8 @@@ av_cold void ff_aac_sbr_init(void
  av_cold void ff_aac_sbr_ctx_init(AACContext *ac, SpectralBandReplication *sbr)
  {
      float mdct_scale;
 +    if(sbr->mdct.mdct_bits)
 +        return;
      sbr->kx[0] = sbr->kx[1] = 32; //Typo in spec, kx' inits to 32
      sbr->data[0].e_a[1] = sbr->data[1].e_a[1] = -1;
      sbr->data[0].synthesis_filterbank_samples_offset = SBR_SYNTHESIS_BUF_SIZE - (1280 - 128);
      ff_mdct_init(&sbr->mdct,     7, 1, 1.0 / (64 * mdct_scale));
      ff_mdct_init(&sbr->mdct_ana, 7, 1, -2.0 * mdct_scale);
      ff_ps_ctx_init(&sbr->ps);
+     ff_sbrdsp_init(&sbr->dsp);
  }
  
  av_cold void ff_aac_sbr_ctx_close(SpectralBandReplication *sbr)
@@@ -1143,33 -1141,21 +1145,21 @@@ static void sbr_dequant(SpectralBandRep
   * @param   x       pointer to the beginning of the first sample window
   * @param   W       array of complex-valued samples split into subbands
   */
- static void sbr_qmf_analysis(DSPContext *dsp, FFTContext *mdct, const float *in, float *x,
+ static void sbr_qmf_analysis(DSPContext *dsp, FFTContext *mdct,
+                              SBRDSPContext *sbrdsp, const float *in, float *x,
                               float z[320], float W[2][32][32][2])
  {
-     int i, k;
+     int i;
      memcpy(W[0], W[1], sizeof(W[0]));
      memcpy(x    , x+1024, (320-32)*sizeof(x[0]));
      memcpy(x+288, in,         1024*sizeof(x[0]));
      for (i = 0; i < 32; i++) { // numTimeSlots*RATE = 16*2 as 960 sample frames
                                 // are not supported
          dsp->vector_fmul_reverse(z, sbr_qmf_window_ds, x, 320);
-         for (k = 0; k < 64; k++) {
-             float f = z[k] + z[k + 64] + z[k + 128] + z[k + 192] + z[k + 256];
-             z[k] = f;
-         }
-         //Shuffle to IMDCT
-         z[64] = z[0];
-         for (k = 1; k < 32; k++) {
-             z[64+2*k-1] =  z[   k];
-             z[64+2*k  ] = -z[64-k];
-         }
-         z[64+63] = z[32];
+         sbrdsp->sum64x5(z);
+         sbrdsp->qmf_pre_shuffle(z);
          mdct->imdct_half(mdct, z, z+64);
-         for (k = 0; k < 32; k++) {
-             W[1][i][k][0] = -z[63-k];
-             W[1][i][k][1] = z[k];
-         }
+         sbrdsp->qmf_post_shuffle(W[1][i], z);
          x += 32;
      }
  }
   * (14496-3 sp04 p206)
   */
  static void sbr_qmf_synthesis(DSPContext *dsp, FFTContext *mdct,
+                               SBRDSPContext *sbrdsp,
                                float *out, float X[2][38][64],
                                float mdct_buf[2][64],
                                float *v0, int *v_off, const unsigned int div)
                  X[0][i][32+n] =  X[1][i][31-n];
              }
              mdct->imdct_half(mdct, mdct_buf[0], X[0][i]);
-             for (n = 0; n < 32; n++) {
-                 v[     n] =  mdct_buf[0][63 - 2*n];
-                 v[63 - n] = -mdct_buf[0][62 - 2*n];
-             }
+             sbrdsp->qmf_deint_neg(v, mdct_buf[0]);
          } else {
-             for (n = 1; n < 64; n+=2) {
-                 X[1][i][n] = -X[1][i][n];
-             }
+             sbrdsp->neg_odd_64(X[1][i]);
              mdct->imdct_half(mdct, mdct_buf[0], X[0][i]);
              mdct->imdct_half(mdct, mdct_buf[1], X[1][i]);
-             for (n = 0; n < 64; n++) {
-                 v[      n] = -mdct_buf[0][63 -   n] + mdct_buf[1][  n    ];
-                 v[127 - n] =  mdct_buf[0][63 -   n] + mdct_buf[1][  n    ];
-             }
+             sbrdsp->qmf_deint_bfly(v, mdct_buf[1], mdct_buf[0]);
          }
          dsp->vector_fmul_add(out, v                , sbr_qmf_window               , zero64, 64 >> div);
          dsp->vector_fmul_add(out, v + ( 192 >> div), sbr_qmf_window + ( 64 >> div), out   , 64 >> div);
      }
  }
  
- static void autocorrelate(const float x[40][2], float phi[3][2][2], int lag)
- {
-     int i;
-     float real_sum = 0.0f;
-     float imag_sum = 0.0f;
-     if (lag) {
-         for (i = 1; i < 38; i++) {
-             real_sum += x[i][0] * x[i+lag][0] + x[i][1] * x[i+lag][1];
-             imag_sum += x[i][0] * x[i+lag][1] - x[i][1] * x[i+lag][0];
-         }
-         phi[2-lag][1][0] = real_sum + x[ 0][0] * x[lag][0] + x[ 0][1] * x[lag][1];
-         phi[2-lag][1][1] = imag_sum + x[ 0][0] * x[lag][1] - x[ 0][1] * x[lag][0];
-         if (lag == 1) {
-             phi[0][0][0] = real_sum + x[38][0] * x[39][0] + x[38][1] * x[39][1];
-             phi[0][0][1] = imag_sum + x[38][0] * x[39][1] - x[38][1] * x[39][0];
-         }
-     } else {
-         for (i = 1; i < 38; i++) {
-             real_sum += x[i][0] * x[i][0] + x[i][1] * x[i][1];
-         }
-         phi[2][1][0] = real_sum + x[ 0][0] * x[ 0][0] + x[ 0][1] * x[ 0][1];
-         phi[1][0][0] = real_sum + x[38][0] * x[38][0] + x[38][1] * x[38][1];
-     }
- }
  /** High Frequency Generation (14496-3 sp04 p214+) and Inverse Filtering
   * (14496-3 sp04 p214)
   * Warning: This routine does not seem numerically stable.
   */
- static void sbr_hf_inverse_filter(float (*alpha0)[2], float (*alpha1)[2],
+ static void sbr_hf_inverse_filter(SBRDSPContext *dsp,
+                                   float (*alpha0)[2], float (*alpha1)[2],
                                    const float X_low[32][40][2], int k0)
  {
      int k;
      for (k = 0; k < k0; k++) {
-         float phi[3][2][2], dk;
+         LOCAL_ALIGNED_16(float, phi, [3], [2][2]);
+         float dk;
  
-         autocorrelate(X_low[k], phi, 0);
-         autocorrelate(X_low[k], phi, 1);
-         autocorrelate(X_low[k], phi, 2);
+         dsp->autocorrelate(X_low[k], phi);
  
          dk =  phi[2][1][0] * phi[1][0][0] -
               (phi[1][1][0] * phi[1][1][0] + phi[1][1][1] * phi[1][1][1]) / 1.000001f;
@@@ -1365,12 -1319,11 +1323,11 @@@ static int sbr_hf_gen(AACContext *ac, S
                        const float bw_array[5], const uint8_t *t_env,
                        int bs_num_env)
  {
-     int i, j, x;
+     int j, x;
      int g = 0;
      int k = sbr->kx[1];
      for (j = 0; j < sbr->num_patches; j++) {
          for (x = 0; x < sbr->patch_num_subbands[j]; x++, k++) {
-             float alpha[4];
              const int p = sbr->patch_start_subband[j] + x;
              while (g <= sbr->n_q && k >= sbr->f_tablenoise[g])
                  g++;
                  return -1;
              }
  
-             alpha[0] = alpha1[p][0] * bw_array[g] * bw_array[g];
-             alpha[1] = alpha1[p][1] * bw_array[g] * bw_array[g];
-             alpha[2] = alpha0[p][0] * bw_array[g];
-             alpha[3] = alpha0[p][1] * bw_array[g];
-             for (i = 2 * t_env[0]; i < 2 * t_env[bs_num_env]; i++) {
-                 const int idx = i + ENVELOPE_ADJUSTMENT_OFFSET;
-                 X_high[k][idx][0] =
-                     X_low[p][idx - 2][0] * alpha[0] -
-                     X_low[p][idx - 2][1] * alpha[1] +
-                     X_low[p][idx - 1][0] * alpha[2] -
-                     X_low[p][idx - 1][1] * alpha[3] +
-                     X_low[p][idx][0];
-                 X_high[k][idx][1] =
-                     X_low[p][idx - 2][1] * alpha[0] +
-                     X_low[p][idx - 2][0] * alpha[1] +
-                     X_low[p][idx - 1][1] * alpha[2] +
-                     X_low[p][idx - 1][0] * alpha[3] +
-                     X_low[p][idx][1];
-             }
+             sbr->dsp.hf_gen(X_high[k] + ENVELOPE_ADJUSTMENT_OFFSET,
+                             X_low[p]  + ENVELOPE_ADJUSTMENT_OFFSET,
+                             alpha0[p], alpha1[p], bw_array[g],
+                             2 * t_env[0], 2 * t_env[bs_num_env]);
          }
      }
      if (k < sbr->m[1] + sbr->kx[1])
@@@ -1461,7 -1398,6 +1402,7 @@@ static void sbr_mapping(AACContext *ac
          uint16_t *table = ch_data->bs_freq_res[e + 1] ? sbr->f_tablehigh : sbr->f_tablelow;
          int k;
  
 +        av_assert0(sbr->kx[1] <= table[0]);
          for (i = 0; i < ilim; i++)
              for (m = table[i]; m < table[i + 1]; m++)
                  sbr->e_origmapped[e][m - sbr->kx[1]] = ch_data->env_facs[e+1][i];
  static void sbr_env_estimate(float (*e_curr)[48], float X_high[64][40][2],
                               SpectralBandReplication *sbr, SBRData *ch_data)
  {
-     int e, i, m;
+     int e, m;
+     int kx1 = sbr->kx[1];
  
      if (sbr->bs_interpol_freq) {
          for (e = 0; e < ch_data->bs_num_env; e++) {
              int iub = ch_data->t_env[e + 1] * 2 + ENVELOPE_ADJUSTMENT_OFFSET;
  
              for (m = 0; m < sbr->m[1]; m++) {
-                 float sum = 0.0f;
-                 for (i = ilb; i < iub; i++) {
-                     sum += X_high[m + sbr->kx[1]][i][0] * X_high[m + sbr->kx[1]][i][0] +
-                            X_high[m + sbr->kx[1]][i][1] * X_high[m + sbr->kx[1]][i][1];
-                 }
+                 float sum = sbr->dsp.sum_square(X_high[m+kx1] + ilb, iub - ilb);
                  e_curr[e][m] = sum * recip_env_size;
              }
          }
                  const int den = env_size * (table[p + 1] - table[p]);
  
                  for (k = table[p]; k < table[p + 1]; k++) {
-                     for (i = ilb; i < iub; i++) {
-                         sum += X_high[k][i][0] * X_high[k][i][0] +
-                                X_high[k][i][1] * X_high[k][i][1];
-                     }
+                     sum += sbr->dsp.sum_square(X_high[k] + ilb, iub - ilb);
                  }
                  sum /= den;
                  for (k = table[p]; k < table[p + 1]; k++) {
-                     e_curr[e][k - sbr->kx[1]] = sum;
+                     e_curr[e][k - kx1] = sum;
                  }
              }
          }
@@@ -1652,55 -1581,35 +1586,35 @@@ static void sbr_hf_assemble(float Y[2][
      for (e = 0; e < ch_data->bs_num_env; e++) {
          for (i = 2 * ch_data->t_env[e]; i < 2 * ch_data->t_env[e + 1]; i++) {
              int phi_sign = (1 - 2*(kx & 1));
+             LOCAL_ALIGNED_16(float, g_filt_tab, [48]);
+             LOCAL_ALIGNED_16(float, q_filt_tab, [48]);
+             float *g_filt, *q_filt;
  
              if (h_SL && e != e_a[0] && e != e_a[1]) {
+                 g_filt = g_filt_tab;
+                 q_filt = q_filt_tab;
                  for (m = 0; m < m_max; m++) {
                      const int idx1 = i + h_SL;
-                     float g_filt = 0.0f;
-                     for (j = 0; j <= h_SL; j++)
-                         g_filt += g_temp[idx1 - j][m] * h_smooth[j];
-                     Y[1][i][m + kx][0] =
-                         X_high[m + kx][i + ENVELOPE_ADJUSTMENT_OFFSET][0] * g_filt;
-                     Y[1][i][m + kx][1] =
-                         X_high[m + kx][i + ENVELOPE_ADJUSTMENT_OFFSET][1] * g_filt;
+                     g_filt[m] = 0.0f;
+                     q_filt[m] = 0.0f;
+                     for (j = 0; j <= h_SL; j++) {
+                         g_filt[m] += g_temp[idx1 - j][m] * h_smooth[j];
+                         q_filt[m] += q_temp[idx1 - j][m] * h_smooth[j];
+                     }
                  }
              } else {
-                 for (m = 0; m < m_max; m++) {
-                     const float g_filt = g_temp[i + h_SL][m];
-                     Y[1][i][m + kx][0] =
-                         X_high[m + kx][i + ENVELOPE_ADJUSTMENT_OFFSET][0] * g_filt;
-                     Y[1][i][m + kx][1] =
-                         X_high[m + kx][i + ENVELOPE_ADJUSTMENT_OFFSET][1] * g_filt;
-                 }
+                 g_filt = g_temp[i + h_SL];
+                 q_filt = q_temp[i];
              }
  
+             sbr->dsp.hf_g_filt(Y[1][i] + kx, X_high + kx, g_filt, m_max,
+                                i + ENVELOPE_ADJUSTMENT_OFFSET);
              if (e != e_a[0] && e != e_a[1]) {
-                 for (m = 0; m < m_max; m++) {
-                     indexnoise = (indexnoise + 1) & 0x1ff;
-                     if (sbr->s_m[e][m]) {
-                         Y[1][i][m + kx][0] +=
-                             sbr->s_m[e][m] * phi[0][indexsine];
-                         Y[1][i][m + kx][1] +=
-                             sbr->s_m[e][m] * (phi[1][indexsine] * phi_sign);
-                     } else {
-                         float q_filt;
-                         if (h_SL) {
-                             const int idx1 = i + h_SL;
-                             q_filt = 0.0f;
-                             for (j = 0; j <= h_SL; j++)
-                                 q_filt += q_temp[idx1 - j][m] * h_smooth[j];
-                         } else {
-                             q_filt = q_temp[i][m];
-                         }
-                         Y[1][i][m + kx][0] +=
-                             q_filt * sbr_noise_table[indexnoise][0];
-                         Y[1][i][m + kx][1] +=
-                             q_filt * sbr_noise_table[indexnoise][1];
-                     }
-                     phi_sign = -phi_sign;
-                 }
+                 sbr->dsp.hf_apply_noise[indexsine](Y[1][i] + kx, sbr->s_m[e],
+                                                    q_filt, indexnoise,
+                                                    kx, m_max);
              } else {
-                 indexnoise = (indexnoise + m_max) & 0x1ff;
                  for (m = 0; m < m_max; m++) {
                      Y[1][i][m + kx][0] +=
                          sbr->s_m[e][m] * phi[0][indexsine];
                      phi_sign = -phi_sign;
                  }
              }
+             indexnoise = (indexnoise + m_max) & 0x1ff;
              indexsine = (indexsine + 1) & 3;
          }
      }
@@@ -1728,12 -1638,12 +1643,12 @@@ void ff_sbr_apply(AACContext *ac, Spect
      }
      for (ch = 0; ch < nch; ch++) {
          /* decode channel */
-         sbr_qmf_analysis(&ac->dsp, &sbr->mdct_ana, ch ? R : L, sbr->data[ch].analysis_filterbank_samples,
+         sbr_qmf_analysis(&ac->dsp, &sbr->mdct_ana, &sbr->dsp, ch ? R : L, sbr->data[ch].analysis_filterbank_samples,
                           (float*)sbr->qmf_filter_scratch,
                           sbr->data[ch].W);
          sbr_lf_gen(ac, sbr, sbr->X_low, sbr->data[ch].W);
          if (sbr->start) {
-             sbr_hf_inverse_filter(sbr->alpha0, sbr->alpha1, sbr->X_low, sbr->k[0]);
+             sbr_hf_inverse_filter(&sbr->dsp, sbr->alpha0, sbr->alpha1, sbr->X_low, sbr->k[0]);
              sbr_chirp(sbr, &sbr->data[ch]);
              sbr_hf_gen(ac, sbr, sbr->X_high, sbr->X_low, sbr->alpha0, sbr->alpha1,
                         sbr->data[ch].bw_array, sbr->data[ch].t_env,
          nch = 2;
      }
  
-     sbr_qmf_synthesis(&ac->dsp, &sbr->mdct, L, sbr->X[0], sbr->qmf_filter_scratch,
+     sbr_qmf_synthesis(&ac->dsp, &sbr->mdct, &sbr->dsp, L, sbr->X[0], sbr->qmf_filter_scratch,
                        sbr->data[0].synthesis_filterbank_samples,
                        &sbr->data[0].synthesis_filterbank_samples_offset,
                        downsampled);
      if (nch == 2)
-         sbr_qmf_synthesis(&ac->dsp, &sbr->mdct, R, sbr->X[1], sbr->qmf_filter_scratch,
+         sbr_qmf_synthesis(&ac->dsp, &sbr->mdct, &sbr->dsp, R, sbr->X[1], sbr->qmf_filter_scratch,
                            sbr->data[1].synthesis_filterbank_samples,
                            &sbr->data[1].synthesis_filterbank_samples_offset,
                            downsampled);
diff --combined libavcodec/aacsbrdata.h
@@@ -2,20 -2,20 +2,20 @@@
   * AAC Spectral Band Replication decoding data
   * Copyright (c) 2008-2009 Robert Swain ( rob opendot cl )
   *
 - * 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
   */
  
@@@ -352,7 -352,8 +352,8 @@@ static DECLARE_ALIGNED(16, float, sbr_q
       0.8537385600,
  };
  
- static const float sbr_noise_table[512][2] = {
+ /* First two entries repeated at end to simplify SIMD implementations. */
+ const DECLARE_ALIGNED(16, float, ff_sbr_noise_table)[][2] = {
  {-0.99948153278296, -0.59483417516607}, { 0.97113454393991, -0.67528515225647},
  { 0.14130051758487, -0.95090983575689}, {-0.47005496701697, -0.37340549728647},
  { 0.80705063769351,  0.29653668284408}, {-0.38981478896926,  0.89572605717087},
  {-0.93412041758744,  0.41374052024363}, { 0.96063943315511,  0.93116709541280},
  { 0.97534253457837,  0.86150930812689}, { 0.99642466504163,  0.70190043427512},
  {-0.94705089665984, -0.29580042814306}, { 0.91599807087376, -0.98147830385781},
+ {-0.99948153278296, -0.59483417516607}, { 0.97113454393991, -0.67528515225647},
  };
  
  #endif /* AVCODEC_AACSBRDATA_H */
@@@ -3,20 -3,20 +3,20 @@@
   *
   * Copyright (c) 2008 Vladimir Voroshilov
   *
 - * 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
   */
  
@@@ -142,4 -142,3 +142,3 @@@ void ff_tilt_compensation(float *mem, f
      samples[0] -= tilt * *mem;
      *mem = new_tilt_mem;
  }
diff --combined libavcodec/allcodecs.c
@@@ -2,20 -2,20 +2,20 @@@
   * Provide registration of all codecs, parsers and bitstream filters for libavcodec.
   * Copyright (c) 2002 Fabrice Bellard
   *
 - * 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
   */
  
@@@ -58,10 -58,8 +58,10 @@@ void avcodec_register_all(void
      REGISTER_HWACCEL (H264_DXVA2, h264_dxva2);
      REGISTER_HWACCEL (H264_VAAPI, h264_vaapi);
      REGISTER_HWACCEL (H264_VDA, h264_vda);
 +    REGISTER_HWACCEL (MPEG1_VDPAU, mpeg1_vdpau);
      REGISTER_HWACCEL (MPEG2_DXVA2, mpeg2_dxva2);
      REGISTER_HWACCEL (MPEG2_VAAPI, mpeg2_vaapi);
 +    REGISTER_HWACCEL (MPEG2_VDPAU, mpeg2_vdpau);
      REGISTER_HWACCEL (MPEG4_VAAPI, mpeg4_vaapi);
      REGISTER_HWACCEL (VC1_DXVA2, vc1_dxva2);
      REGISTER_HWACCEL (VC1_VAAPI, vc1_vaapi);
      REGISTER_ENCODER (A64MULTI, a64multi);
      REGISTER_ENCODER (A64MULTI5, a64multi5);
      REGISTER_DECODER (AASC, aasc);
 -    REGISTER_DECODER (AMV, amv);
 +    REGISTER_ENCDEC  (AMV, amv);
      REGISTER_DECODER (ANM, anm);
      REGISTER_DECODER (ANSI, ansi);
      REGISTER_ENCDEC  (ASV1, asv1);
      REGISTER_ENCDEC  (ASV2, asv2);
      REGISTER_DECODER (AURA, aura);
      REGISTER_DECODER (AURA2, aura2);
 +    REGISTER_ENCDEC  (AVRP, avrp);
      REGISTER_DECODER (AVS, avs);
      REGISTER_DECODER (BETHSOFTVID, bethsoftvid);
      REGISTER_DECODER (BFI, bfi);
@@@ -94,7 -91,6 +94,7 @@@
      REGISTER_DECODER (CSCD, cscd);
      REGISTER_DECODER (CYUV, cyuv);
      REGISTER_DECODER (DFA, dfa);
 +    REGISTER_DECODER (DIRAC, dirac);
      REGISTER_ENCDEC  (DNXHD, dnxhd);
      REGISTER_ENCDEC  (DPX, dpx);
      REGISTER_DECODER (DSICINVIDEO, dsicinvideo);
      REGISTER_DECODER (EIGHTSVX_EXP, eightsvx_exp);
      REGISTER_DECODER (EIGHTSVX_FIB, eightsvx_fib);
      REGISTER_DECODER (ESCAPE124, escape124);
 +    REGISTER_DECODER (ESCAPE130, escape130);
      REGISTER_ENCDEC  (FFV1, ffv1);
      REGISTER_ENCDEC  (FFVHUFF, ffvhuff);
      REGISTER_ENCDEC  (FLASHSV, flashsv);
 -    REGISTER_DECODER (FLASHSV2, flashsv2);
 +    REGISTER_ENCDEC  (FLASHSV2, flashsv2);
      REGISTER_DECODER (FLIC, flic);
      REGISTER_ENCDEC  (FLV, flv);
      REGISTER_DECODER (FOURXM, fourxm);
      REGISTER_DECODER (H263I, h263i);
      REGISTER_ENCODER (H263P, h263p);
      REGISTER_DECODER (H264, h264);
 +    REGISTER_DECODER (H264_CRYSTALHD, h264_crystalhd);
      REGISTER_DECODER (H264_VDPAU, h264_vdpau);
      REGISTER_ENCDEC  (HUFFYUV, huffyuv);
      REGISTER_DECODER (IDCIN, idcin);
      REGISTER_DECODER (INDEO4, indeo4);
      REGISTER_DECODER (INDEO5, indeo5);
      REGISTER_DECODER (INTERPLAY_VIDEO, interplay_video);
 +    REGISTER_ENCDEC  (JPEG2000, jpeg2000);
      REGISTER_ENCDEC  (JPEGLS, jpegls);
      REGISTER_DECODER (JV, jv);
      REGISTER_DECODER (KGV1, kgv1);
      REGISTER_ENCDEC  (MPEG1VIDEO, mpeg1video);
      REGISTER_ENCDEC  (MPEG2VIDEO, mpeg2video);
      REGISTER_ENCDEC  (MPEG4, mpeg4);
 +    REGISTER_DECODER (MPEG4_CRYSTALHD, mpeg4_crystalhd);
      REGISTER_DECODER (MPEG4_VDPAU, mpeg4_vdpau);
 +    REGISTER_DECODER (MPEGVIDEO, mpegvideo);
      REGISTER_DECODER (MPEG_VDPAU, mpeg_vdpau);
      REGISTER_DECODER (MPEG1_VDPAU, mpeg1_vdpau);
 +    REGISTER_DECODER (MPEG2_CRYSTALHD, mpeg2_crystalhd);
 +    REGISTER_DECODER (MSMPEG4_CRYSTALHD, msmpeg4_crystalhd);
      REGISTER_DECODER (MSMPEG4V1, msmpeg4v1);
      REGISTER_ENCDEC  (MSMPEG4V2, msmpeg4v2);
      REGISTER_ENCDEC  (MSMPEG4V3, msmpeg4v3);
      REGISTER_DECODER (MSRLE, msrle);
 -    REGISTER_DECODER (MSVIDEO1, msvideo1);
 +    REGISTER_ENCDEC  (MSVIDEO1, msvideo1);
      REGISTER_DECODER (MSZH, mszh);
      REGISTER_DECODER (MXPEG, mxpeg);
      REGISTER_DECODER (NUV, nuv);
      REGISTER_DECODER (PICTOR, pictor);
      REGISTER_ENCDEC  (PNG, png);
      REGISTER_ENCDEC  (PPM, ppm);
 -    REGISTER_DECODER (PRORES, prores);
 +    REGISTER_ENCDEC  (PRORES, prores);
 +    REGISTER_DECODER (PRORES_LGPL, prores_lgpl);
      REGISTER_DECODER (PTX, ptx);
      REGISTER_DECODER (QDRAW, qdraw);
      REGISTER_DECODER (QPEG, qpeg);
      REGISTER_ENCDEC  (QTRLE, qtrle);
 -    REGISTER_DECODER (R10K,  r10k);
 -    REGISTER_DECODER (R210,  r210);
 +    REGISTER_ENCDEC  (R10K,  r10k);
 +    REGISTER_ENCDEC  (R210,  r210);
      REGISTER_ENCDEC  (RAWVIDEO, rawvideo);
      REGISTER_DECODER (RL2, rl2);
      REGISTER_ENCDEC  (ROQ, roq);
      REGISTER_DECODER (UTVIDEO, utvideo);
      REGISTER_ENCDEC  (V210,  v210);
      REGISTER_DECODER (V210X, v210x);
 +    REGISTER_ENCDEC  (V308, v308);
      REGISTER_ENCDEC  (V410, v410);
      REGISTER_DECODER (VB, vb);
      REGISTER_DECODER (VBLE, vble);
      REGISTER_DECODER (VC1, vc1);
 +    REGISTER_DECODER (VC1_CRYSTALHD, vc1_crystalhd);
      REGISTER_DECODER (VC1_VDPAU, vc1_vdpau);
      REGISTER_DECODER (VC1IMAGE, vc1image);
      REGISTER_DECODER (VCR1, vcr1);
      REGISTER_ENCDEC  (WMV1, wmv1);
      REGISTER_ENCDEC  (WMV2, wmv2);
      REGISTER_DECODER (WMV3, wmv3);
 +    REGISTER_DECODER (WMV3_CRYSTALHD, wmv3_crystalhd);
      REGISTER_DECODER (WMV3_VDPAU, wmv3_vdpau);
      REGISTER_DECODER (WMV3IMAGE, wmv3image);
      REGISTER_DECODER (WNV1, wnv1);
      REGISTER_DECODER (XAN_WC4, xan_wc4);
      REGISTER_DECODER (XL, xl);
      REGISTER_ENCDEC  (XWD, xwd);
 +    REGISTER_ENCDEC  (Y41P, y41p);
      REGISTER_DECODER (YOP, yop);
 +    REGISTER_ENCDEC  (YUV4, yuv4);
      REGISTER_ENCDEC  (ZLIB, zlib);
      REGISTER_ENCDEC  (ZMBV, zmbv);
  
      REGISTER_DECODER (BINKAUDIO_RDFT, binkaudio_rdft);
      REGISTER_DECODER (BMV_AUDIO, bmv_audio);
      REGISTER_DECODER (COOK, cook);
 -    REGISTER_DECODER (DCA, dca);
 +    REGISTER_ENCDEC  (DCA, dca);
      REGISTER_DECODER (DSICINAUDIO, dsicinaudio);
      REGISTER_ENCDEC  (EAC3, eac3);
 +    REGISTER_DECODER (FFWAVESYNTH, ffwavesynth);
      REGISTER_ENCDEC  (FLAC, flac);
 +    REGISTER_ENCDEC  (G723_1, g723_1);
 +    REGISTER_DECODER (G729, g729);
      REGISTER_DECODER (GSM, gsm);
      REGISTER_DECODER (GSM_MS, gsm_ms);
      REGISTER_DECODER (IMC, imc);
      REGISTER_DECODER (SHORTEN, shorten);
      REGISTER_DECODER (SIPR, sipr);
      REGISTER_DECODER (SMACKAUD, smackaud);
 +    REGISTER_ENCDEC  (SONIC, sonic);
 +    REGISTER_ENCODER (SONIC_LS, sonic_ls);
      REGISTER_DECODER (TRUEHD, truehd);
      REGISTER_DECODER (TRUESPEECH, truespeech);
      REGISTER_DECODER (TTA, tta);
      REGISTER_DECODER (VMDAUDIO, vmdaudio);
      REGISTER_ENCDEC  (VORBIS, vorbis);
      REGISTER_DECODER (WAVPACK, wavpack);
 +    REGISTER_DECODER (WMALOSSLESS, wmalossless);
      REGISTER_DECODER (WMAPRO, wmapro);
      REGISTER_ENCDEC  (WMAV1, wmav1);
      REGISTER_ENCDEC  (WMAV2, wmav2);
      REGISTER_ENCDEC  (DVBSUB, dvbsub);
      REGISTER_ENCDEC  (DVDSUB, dvdsub);
      REGISTER_DECODER (PGSSUB, pgssub);
 -    REGISTER_DECODER (SRT, srt);
 +    REGISTER_ENCDEC  (SRT, srt);
      REGISTER_ENCDEC  (XSUB, xsub);
  
      /* external libraries */
 +    REGISTER_ENCODER (LIBAACPLUS, libaacplus);
 +    REGISTER_DECODER (LIBCELT, libcelt);
      REGISTER_ENCDEC  (LIBDIRAC, libdirac);
      REGISTER_ENCODER (LIBFAAC, libfaac);
      REGISTER_ENCDEC  (LIBGSM, libgsm);
      REGISTER_ENCODER (LIBMP3LAME, libmp3lame);
      REGISTER_ENCDEC  (LIBOPENCORE_AMRNB, libopencore_amrnb);
      REGISTER_DECODER (LIBOPENCORE_AMRWB, libopencore_amrwb);
 -    REGISTER_DECODER (LIBOPENJPEG, libopenjpeg);
 +    REGISTER_ENCDEC (LIBOPENJPEG, libopenjpeg);
      REGISTER_ENCDEC  (LIBSCHROEDINGER, libschroedinger);
      REGISTER_ENCDEC  (LIBSPEEX, libspeex);
 +    REGISTER_DECODER (LIBSTAGEFRIGHT_H264, libstagefright_h264);
      REGISTER_ENCODER (LIBTHEORA, libtheora);
 +    REGISTER_DECODER (LIBUTVIDEO, libutvideo);
      REGISTER_ENCODER (LIBVO_AACENC, libvo_aacenc);
      REGISTER_ENCODER (LIBVO_AMRWBENC, libvo_amrwbenc);
      REGISTER_ENCODER (LIBVORBIS, libvorbis);
      REGISTER_ENCDEC  (LIBVPX, libvpx);
      REGISTER_ENCODER (LIBX264, libx264);
 +    REGISTER_ENCODER (LIBX264RGB, libx264rgb);
      REGISTER_ENCODER (LIBXAVS, libxavs);
      REGISTER_ENCODER (LIBXVID, libxvid);
  
 +    /* text */
 +    REGISTER_DECODER (BINTEXT, bintext);
 +    REGISTER_DECODER  (XBIN, xbin);
 +    REGISTER_DECODER  (IDF, idf);
 +
      /* parsers */
      REGISTER_PARSER  (AAC, aac);
      REGISTER_PARSER  (AAC_LATM, aac_latm);
      REGISTER_BSF     (REMOVE_EXTRADATA, remove_extradata);
      REGISTER_BSF     (TEXT2MOVSUB, text2movsub);
  }
diff --combined libavcodec/alsdec.c
@@@ -2,20 -2,20 +2,20 @@@
   * MPEG-4 ALS decoder
   * Copyright (c) 2009 Thilo Borgmann <thilo.borgmann _at_ googlemail.com>
   *
 - * 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
   */
  
@@@ -394,7 -394,7 +394,7 @@@ static av_cold int read_specific_config
          if (get_bits_left(&gb) < 32)
              return -1;
  
 -        if (avctx->err_recognition & AV_EF_CRCCHECK) {
 +        if (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL)) {
              ctx->crc_table = av_crc_get_table(AV_CRC_32_IEEE_LE);
              ctx->crc       = 0xFFFFFFFF;
              ctx->crc_org   = ~get_bits_long(&gb, 32);
@@@ -1012,7 -1012,7 +1012,7 @@@ static void zero_remaining(unsigned in
      unsigned int count = 0;
  
      while (b < b_max)
 -        count += div_blocks[b];
 +        count += div_blocks[b++];
  
      if (count)
          memset(buf, 0, sizeof(*buf) * count);
@@@ -1442,7 -1442,7 +1442,7 @@@ static int decode_frame(AVCodecContext 
          ctx->cur_frame_length = sconf->frame_length;
  
      // decode the frame data
 -    if ((invalid_frame = read_frame_data(ctx, ra_frame) < 0))
 +    if ((invalid_frame = read_frame_data(ctx, ra_frame)) < 0)
          av_log(ctx->avctx, AV_LOG_WARNING,
                 "Reading frame data failed. Skipping RA unit.\n");
  
      }
  
      // update CRC
 -    if (sconf->crc_enabled && (avctx->err_recognition & AV_EF_CRCCHECK)) {
 +    if (sconf->crc_enabled && (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL))) {
          int swap = HAVE_BIGENDIAN != sconf->msb_first;
  
          if (ctx->avctx->bits_per_raw_sample == 24) {
@@@ -1712,7 -1712,7 +1712,7 @@@ static av_cold int decode_init(AVCodecC
  
      // allocate crc buffer
      if (HAVE_BIGENDIAN != sconf->msb_first && sconf->crc_enabled &&
 -        (avctx->err_recognition & AV_EF_CRCCHECK)) {
 +        (avctx->err_recognition & (AV_EF_CRCCHECK|AV_EF_CAREFUL))) {
          ctx->crc_buffer = av_malloc(sizeof(*ctx->crc_buffer) *
                                      ctx->cur_frame_length *
                                      avctx->channels *
@@@ -1755,4 -1755,3 +1755,3 @@@ AVCodec ff_als_decoder = 
      .capabilities = CODEC_CAP_SUBFRAMES | CODEC_CAP_DR1,
      .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 Audio Lossless Coding (ALS)"),
  };
diff --combined libavcodec/amrnbdata.h
@@@ -3,20 -3,20 +3,20 @@@
   * Copyright (c) 2006-2007 Robert Swain
   * Copyright (c) 2009 Colin McQuillan
   *
 - * 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
   */
  
@@@ -1655,10 -1655,10 +1655,10 @@@ static const float ir_filter_medium[AMR
   0.016998,  0.023804, -0.041779,  0.025696,  0.019989,
  };
  
 -static const float *ir_filters_lookup[2]           = {
 +static const float * const ir_filters_lookup[2]           = {
      ir_filter_strong,           ir_filter_medium
  };
 -static const float *ir_filters_lookup_MODE_7k95[2] = {
 +static const float * const ir_filters_lookup_MODE_7k95[2] = {
      ir_filter_strong_MODE_7k95, ir_filter_medium
  };
  
@@@ -1669,4 -1669,3 +1669,3 @@@ static const float highpass_poles[2] = 
  static const float highpass_gain     = 0.939819335;
  
  #endif /* AVCODEC_AMRNBDATA_H */
diff --combined libavcodec/arm/Makefile
@@@ -1,6 -1,8 +1,8 @@@
  OBJS-$(CONFIG_AC3DSP)                  += arm/ac3dsp_init_arm.o         \
                                            arm/ac3dsp_arm.o
  
+ OBJS-$(CONFIG_AAC_DECODER)             += arm/sbrdsp_init_arm.o
  OBJS-$(CONFIG_DCA_DECODER)             += arm/dcadsp_init_arm.o         \
  
  ARMV6-OBJS-$(CONFIG_AC3DSP)            += arm/ac3dsp_armv6.o
@@@ -11,8 -13,7 +13,8 @@@ ARMV6-OBJS-$(CONFIG_MPEGAUDIODSP)      
  OBJS-$(CONFIG_VP5_DECODER)             += arm/vp56dsp_init_arm.o
  OBJS-$(CONFIG_VP6_DECODER)             += arm/vp56dsp_init_arm.o
  OBJS-$(CONFIG_VP8_DECODER)             += arm/vp8dsp_init_arm.o
 -ARMV6-OBJS-$(CONFIG_VP8_DECODER)       += arm/vp8_armv6.o
 +ARMV6-OBJS-$(CONFIG_VP8_DECODER)       += arm/vp8_armv6.o               \
 +                                          arm/vp8dsp_armv6.o
  
  OBJS-$(CONFIG_H264DSP)                 += arm/h264dsp_init_arm.o
  OBJS-$(CONFIG_H264PRED)                += arm/h264pred_init_arm.o
@@@ -61,6 -62,8 +63,8 @@@ NEON-OBJS-$(CONFIG_H264PRED)           
  
  NEON-OBJS-$(CONFIG_AC3DSP)             += arm/ac3dsp_neon.o
  
+ NEON-OBJS-$(CONFIG_AAC_DECODER)        += arm/sbrdsp_neon.o
  NEON-OBJS-$(CONFIG_DCA_DECODER)        += arm/dcadsp_neon.o             \
                                            arm/synth_filter_neon.o       \
  
diff --combined libavcodec/atrac.c
@@@ -3,20 -3,20 +3,20 @@@
   * Copyright (c) 2006-2008 Maxim Poliakovski
   * Copyright (c) 2006-2008 Benjamin Larsson
   *
 - * 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
   */
  
@@@ -117,4 -117,3 +117,3 @@@ void atrac_iqmf (float *inlo, float *in
      /* Update the delay buffer. */
      memcpy(delayBuf, temp + nIn*2, 46*sizeof(float));
  }
diff --combined libavcodec/aura.c
@@@ -1,20 -1,20 +1,20 @@@
  /*
   * Aura 2 decoder
   *
 - * 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
   */
  
@@@ -39,7 -39,6 +39,7 @@@ static av_cold int aura_decode_init(AVC
      if (avctx->width & 0x3)
          return -1;
      avctx->pix_fmt = PIX_FMT_YUV422P;
 +    avcodec_get_frame_defaults(&s->frame);
  
      return 0;
  }
@@@ -134,4 -133,3 +134,3 @@@ AVCodec ff_aura2_decoder = 
      .capabilities   = CODEC_CAP_DR1,
      .long_name = NULL_IF_CONFIG_SMALL("Auravision Aura 2"),
  };
diff --combined libavcodec/avcodec.h
@@@ -1,20 -1,20 +1,20 @@@
  /*
   * copyright (c) 2001 Fabrice Bellard
   *
 - * 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
   */
  
@@@ -34,7 -34,6 +34,7 @@@
  #include "libavutil/log.h"
  #include "libavutil/pixfmt.h"
  #include "libavutil/rational.h"
 +#include "libavutil/audioconvert.h"
  
  #include "libavcodec/version.h"
  /**
@@@ -79,8 -78,7 +79,8 @@@
   *
   * If you add a codec ID to this list, add it so that
   * 1. no value of a existing codec ID changes (that would break ABI),
 - * 2. it is as close as possible to similar codecs.
 + * 2. Give it a value which when taken as ASCII is recognized uniquely by a human as this specific codec.
 + *    This ensures that 2 forks can independantly add CodecIDs without producing conflicts.
   */
  enum CodecID {
      CODEC_ID_NONE,
      CODEC_ID_WMV3IMAGE,
      CODEC_ID_VC1IMAGE,
  #if LIBAVCODEC_VERSION_MAJOR == 53
 -    CODEC_ID_G723_1,
 -    CODEC_ID_G729,
 +    CODEC_ID_G723_1_DEPRECATED,
 +    CODEC_ID_G729_DEPRECATED,
  #endif
 -    CODEC_ID_UTVIDEO,
 +    CODEC_ID_UTVIDEO_DEPRECATED,
      CODEC_ID_BMV_VIDEO,
      CODEC_ID_VBLE,
      CODEC_ID_DXTORY,
      CODEC_ID_V410,
      CODEC_ID_XWD,
 +    CODEC_ID_Y41P       = MKBETAG('Y','4','1','P'),
 +    CODEC_ID_UTVIDEO = 0x800,
 +    CODEC_ID_ESCAPE130  = MKBETAG('E','1','3','0'),
 +    CODEC_ID_AVRP       = MKBETAG('A','V','R','P'),
 +
 +    CODEC_ID_G2M        = MKBETAG( 0 ,'G','2','M'),
 +    CODEC_ID_V308       = MKBETAG('V','3','0','8'),
 +    CODEC_ID_YUV4       = MKBETAG('Y','U','V','4'),
  
      /* various PCM "codecs" */
      CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the start of audio codecs
      CODEC_ID_MACE3,
      CODEC_ID_MACE6,
      CODEC_ID_VMDAUDIO,
 -#if LIBAVCODEC_VERSION_MAJOR == 53
 -    CODEC_ID_SONIC,
 -    CODEC_ID_SONIC_LS,
 -#endif
      CODEC_ID_FLAC,
      CODEC_ID_MP3ADU,
      CODEC_ID_MP3ON4,
      CODEC_ID_QDMC,
      CODEC_ID_CELT,
  #if LIBAVCODEC_VERSION_MAJOR > 53
 -    CODEC_ID_G723_1,
 -    CODEC_ID_G729,
 +    CODEC_ID_G723_1_DEPRECATED,
 +    CODEC_ID_G729_DEPRECATED,
      CODEC_ID_8SVX_EXP,
      CODEC_ID_8SVX_FIB,
  #endif
      CODEC_ID_BMV_AUDIO,
 +    CODEC_ID_G729 = 0x15800,
 +    CODEC_ID_G723_1= 0x15801,
 +    CODEC_ID_FFWAVESYNTH = MKBETAG('F','F','W','S'),
 +    CODEC_ID_8SVX_RAW   = MKBETAG('8','S','V','X'),
 +    CODEC_ID_SONIC       = MKBETAG('S','O','N','C'),
 +    CODEC_ID_SONIC_LS    = MKBETAG('S','O','N','L'),
  
      /* subtitle codecs */
      CODEC_ID_FIRST_SUBTITLE = 0x17000,          ///< A dummy ID pointing at the start of subtitle codecs.
      CODEC_ID_HDMV_PGS_SUBTITLE,
      CODEC_ID_DVB_TELETEXT,
      CODEC_ID_SRT,
 +    CODEC_ID_MICRODVD   = MKBETAG('m','D','V','D'),
  
      /* other specific kind of codecs (generally used for attachments) */
      CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.
      CODEC_ID_TTF = 0x18000,
 +    CODEC_ID_BINTEXT    = MKBETAG('B','T','X','T'),
 +    CODEC_ID_XBIN       = MKBETAG('X','B','I','N'),
 +    CODEC_ID_IDF        = MKBETAG( 0 ,'I','D','F'),
  
      CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it
  
   * Note: If the first 23 bits of the additional bytes are not 0, then damaged
   * MPEG bitstreams could cause overread and segfault.
   */
 -#define FF_INPUT_BUFFER_PADDING_SIZE 8
 +#define FF_INPUT_BUFFER_PADDING_SIZE 16
  
  /**
   * minimum encoding buffer size
@@@ -504,7 -488,6 +504,7 @@@ enum AVColorTransferCharacteristic
      AVCOL_TRC_UNSPECIFIED=2,
      AVCOL_TRC_GAMMA22    =4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
      AVCOL_TRC_GAMMA28    =5, ///< also ITU-R BT470BG
 +    AVCOL_TRC_SMPTE240M  =7,
      AVCOL_TRC_NB           , ///< Not part of ABI
  };
  
@@@ -516,7 -499,6 +516,7 @@@ enum AVColorSpace
      AVCOL_SPC_BT470BG    =5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
      AVCOL_SPC_SMPTE170M  =6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above
      AVCOL_SPC_SMPTE240M  =7,
 +    AVCOL_SPC_YCGCO      =8,
      AVCOL_SPC_NB           , ///< Not part of ABI
  };
  
@@@ -604,10 -586,8 +604,10 @@@ typedef struct RcOverride
  #define CODEC_FLAG2_STRICT_GOP    0x00000002 ///< Strictly enforce GOP size.
  #define CODEC_FLAG2_NO_OUTPUT     0x00000004 ///< Skip bitstream encoding.
  #define CODEC_FLAG2_LOCAL_HEADER  0x00000008 ///< Place global headers at every keyframe instead of in extradata.
 +#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format. DEPRECATED!!!!
  #define CODEC_FLAG2_SKIP_RD       0x00004000 ///< RD optimal MB level residual skipping
  #define CODEC_FLAG2_CHUNKS        0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
 +#define CODEC_FLAG2_SHOW_ALL      0x00400000 ///< Show all frames before the first keyframe
  
  /* Unsupported options :
   *              Syntax Arithmetic coding (SAC)
   * Codec should fill in channel configuration and samplerate instead of container
   */
  #define CODEC_CAP_CHANNEL_CONF     0x0400
 +
  /**
   * Codec is able to deal with negative linesizes
   */
  #define CODEC_CAP_NEG_LINESIZES    0x0800
 +
  /**
   * Codec supports frame-level multithreading.
   */
   * Audio encoder supports receiving a different number of samples in each call.
   */
  #define CODEC_CAP_VARIABLE_FRAME_SIZE 0x10000
 +/**
 + * Codec is lossless.
 + */
 +#define CODEC_CAP_LOSSLESS         0x80000000
  
  //The following defines may change, don't expect compatibility if you use them.
  #define MB_TYPE_INTRA4x4   0x0001
@@@ -875,12 -849,9 +875,12 @@@ enum AVSideDataParamChangeFlags 
  /**
   * Audio Video Frame.
   * New fields can be added to the end of AVFRAME with minor version
 - * bumps. Removal, reordering and changes to existing fields require
 + * bumps. Similarly fields that are marked as to be only accessed by
 + * av_opt_ptr() can be reordered. This allows 2 forks to add fields
 + * without breaking compatibility with each other.
 + * Removal, reordering and changes in the remaining cases require
   * a major version bump.
 - * sizeof(AVFrame) must not be used outside libav*.
 + * sizeof(AVFrame) must not be used outside libavcodec.
   */
  typedef struct AVFrame {
  #define AV_NUM_DATA_POINTERS 8
      int64_t reordered_opaque;
  
      /**
 -     * hardware accelerator private data (Libav-allocated)
 +     * hardware accelerator private data (FFmpeg-allocated)
       * - encoding: unused
       * - decoding: Set by libavcodec
       */
       * - decoding: Read by user.
       */
      int format;
 +
 +    /**
 +     * frame timestamp estimated using various heuristics, in stream time base
 +     * Code outside libavcodec should access this field using:
 +     *  av_opt_ptr(avcodec_get_frame_class(), frame, "best_effort_timestamp");
 +     * - encoding: unused
 +     * - decoding: set by libavcodec, read by user.
 +     */
 +    int64_t best_effort_timestamp;
 +
 +    /**
 +     * reordered pos from the last AVPacket that has been input into the decoder
 +     * Code outside libavcodec should access this field using:
 +     *  av_opt_ptr(avcodec_get_frame_class(), frame, "pkt_pos");
 +     * - encoding: unused
 +     * - decoding: Read by user.
 +     */
 +    int64_t pkt_pos;
 +
  } AVFrame;
  
  struct AVCodecInternal;
@@@ -1232,8 -1184,6 +1232,8 @@@ enum AVFieldOrder 
   * New fields can be added to the end with minor version bumps.
   * Removal, reordering and changes to existing fields require a major
   * version bump.
 + * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user
 + * applications.
   * sizeof(AVCodecContext) must not be used outside libav*.
   */
  typedef struct AVCodecContext {
      int frame_number;   ///< audio or video frame number
  
      /**
 -     * Number of frames the decoded output will be delayed relative to
 -     * the encoded input.
 +     * Encoding: Number of frames delay there will be from the encoder input to
 +     *           the decoder output. (we assume the decoder matches the spec)
 +     * Decoding: Number of frames delay in addition to what a standard decoder
 +     *           as specified in the spec would produce.
       * - encoding: Set by libavcodec.
 -     * - decoding: unused
 +     * - decoding: Set by libavcodec.
       */
      int delay;
  
      int max_prediction_order;
  
      /**
 -     * GOP timecode frame start number, in non drop frame format
 -     * - encoding: Set by user.
 -     * - decoding: unused
 +     * GOP timecode frame start number
 +     * - encoding: Set by user, in non drop frame format
 +     * - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset)
       */
      int64_t timecode_frame_start;
  
      /**
       * Audio channel layout.
       * - encoding: set by user.
 -     * - decoding: set by libavcodec.
 +     * - decoding: set by user, may be overwritten by libavcodec.
       */
      uint64_t channel_layout;
  
       * Hardware accelerator context.
       * For some hardware accelerators, a global context needs to be
       * provided by the user. In that case, this holds display-dependent
 -     * data Libav cannot instantiate itself. Please refer to the
 -     * Libav HW accelerator documentation to know how to fill this
 +     * data FFmpeg cannot instantiate itself. Please refer to the
 +     * FFmpeg HW accelerator documentation to know how to fill this
       * is. e.g. for VA API, this is a struct vaapi_context.
       * - encoding: unused
       * - decoding: Set by user
      enum AVAudioServiceType audio_service_type;
  
      /**
 -     * Used to request a sample format from the decoder.
 -     * - encoding: unused.
 +     * desired sample format
 +     * - encoding: Not used.
       * - decoding: Set by user.
 +     * Decoder will decode to this format if it can.
       */
      enum AVSampleFormat request_sample_fmt;
  
  #define AV_EF_BUFFER    (1<<2)
  #define AV_EF_EXPLODE   (1<<3)
  
 +#define AV_EF_CAREFUL    (1<<16)
 +#define AV_EF_COMPLIANT  (1<<17)
 +#define AV_EF_AGGRESSIVE (1<<18)
 +
      /**
       * Private context used for internal data.
       *
       * - decoding: Set by libavcodec
       */
      enum AVFieldOrder field_order;
 +
 +    /**
 +     * Current statistics for PTS correction.
 +     * - decoding: maintained and used by libavcodec, not intended to be used by user apps
 +     * - encoding: unused
 +     */
 +    int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far
 +    int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far
 +    int64_t pts_correction_last_pts;       /// PTS of the last frame
 +    int64_t pts_correction_last_dts;       /// DTS of the last frame
 +
  } AVCodecContext;
  
  /**
@@@ -3157,11 -3089,6 +3157,11 @@@ uint8_t* av_packet_new_side_data(AVPack
  uint8_t* av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
                                   int *size);
  
 +int av_packet_merge_side_data(AVPacket *pkt);
 +
 +int av_packet_split_side_data(AVPacket *pkt);
 +
 +
  /* resample.c */
  
  struct ReSampleContext;
@@@ -3319,12 -3246,6 +3319,12 @@@ int avpicture_layout(const AVPicture* s
  int avpicture_get_size(enum PixelFormat pix_fmt, int width, int height);
  void avcodec_get_chroma_sub_sample(enum PixelFormat pix_fmt, int *h_shift, int *v_shift);
  
 +/**
 + * Get the name of a codec.
 + * @return  a static string identifying the codec; never NULL
 + */
 +const char *avcodec_get_name(enum CodecID id);
 +
  void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
  
  /**
@@@ -3365,8 -3286,7 +3365,8 @@@ size_t av_get_codec_tag_string(char *bu
   * @param[in] dst_pix_fmt destination pixel format
   * @param[in] src_pix_fmt source pixel format
   * @param[in] has_alpha Whether the source pixel format alpha channel is used.
 - * @return Combination of flags informing you what kind of losses will occur.
 + * @return Combination of flags informing you what kind of losses will occur
 + * (maximum loss for an invalid dst_pix_fmt).
   */
  int avcodec_get_pix_fmt_loss(enum PixelFormat dst_pix_fmt, enum PixelFormat src_pix_fmt,
                               int has_alpha);
   * The pixel formats from which it chooses one, are determined by the
   * pix_fmt_mask parameter.
   *
 + * Note, only the first 64 pixel formats will fit in pix_fmt_mask.
 + *
   * @code
   * src_pix_fmt = PIX_FMT_YUV420P;
 - * pix_fmt_mask = (1 << PIX_FMT_YUV422P) || (1 << PIX_FMT_RGB24);
 + * pix_fmt_mask = (1 << PIX_FMT_YUV422P) | (1 << PIX_FMT_RGB24);
   * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss);
   * @endcode
   *
  enum PixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum PixelFormat src_pix_fmt,
                                int has_alpha, int *loss_ptr);
  
 +/**
 + * Find the best pixel format to convert to given a certain source pixel
 + * format and a selection of two destination pixel formats. When converting from
 + * one pixel format to another, information loss may occur.  For example, when converting
 + * from RGB24 to GRAY, the color information will be lost. Similarly, other losses occur when
 + * converting from some formats to other formats. avcodec_find_best_pix_fmt2() selects which of
 + * the given pixel formats should be used to suffer the least amount of loss.
 + *
 + * If one of the destination formats is PIX_FMT_NONE the other pixel format (if valid) will be
 + * returned.
 + *
 + * @code
 + * src_pix_fmt = PIX_FMT_YUV420P;
 + * dst_pix_fmt1= PIX_FMT_RGB24;
 + * dst_pix_fmt2= PIX_FMT_GRAY8;
 + * dst_pix_fmt3= PIX_FMT_RGB8;
 + * loss= FF_LOSS_CHROMA; // don't care about chroma loss, so chroma loss will be ignored.
 + * dst_pix_fmt = avcodec_find_best_pix_fmt2(dst_pix_fmt1, dst_pix_fmt2, src_pix_fmt, alpha, &loss);
 + * dst_pix_fmt = avcodec_find_best_pix_fmt2(dst_pix_fmt, dst_pix_fmt3, src_pix_fmt, alpha, &loss);
 + * @endcode
 + *
 + * @param[in] dst_pix_fmt1 One of the two destination pixel formats to choose from
 + * @param[in] dst_pix_fmt2 The other of the two destination pixel formats to choose from
 + * @param[in] src_pix_fmt Source pixel format
 + * @param[in] has_alpha Whether the source pixel format alpha channel is used.
 + * @param[in, out] loss_ptr Combination of loss flags. In: selects which of the losses to ignore, i.e.
 + *                               NULL or value of zero means we care about all losses. Out: the loss
 + *                               that occurs when converting from src to selected dst pixel format.
 + * @return The best pixel format to convert to or -1 if none was found.
 + */
 +enum PixelFormat avcodec_find_best_pix_fmt2(enum PixelFormat dst_pix_fmt1, enum PixelFormat dst_pix_fmt2,
 +                                            enum PixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
 +
 +
  /* deinterlace a picture */
  /* deinterlace - if not supported return -1 */
  int avpicture_deinterlace(AVPicture *dst, const AVPicture *src,
@@@ -3513,22 -3397,6 +3513,22 @@@ void avcodec_string(char *buf, int buf_
   */
  const char *av_get_profile_name(const AVCodec *codec, int profile);
  
 +#if FF_API_ALLOC_CONTEXT
 +/**
 + * Set the fields of the given AVCodecContext to default values.
 + *
 + * @param s The AVCodecContext of which the fields should be set to default values.
 + * @deprecated use avcodec_get_context_defaults3
 + */
 +attribute_deprecated
 +void avcodec_get_context_defaults(AVCodecContext *s);
 +
 +/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
 + *  we WILL change its arguments and name a few times! */
 +attribute_deprecated
 +void avcodec_get_context_defaults2(AVCodecContext *s, enum AVMediaType);
 +#endif
 +
  /**
   * Set the fields of the given AVCodecContext to default values corresponding
   * to the given codec (defaults may be codec-dependent).
   */
  int avcodec_get_context_defaults3(AVCodecContext *s, AVCodec *codec);
  
 +#if FF_API_ALLOC_CONTEXT
 +/**
 + * Allocate an AVCodecContext and set its fields to default values.  The
 + * resulting struct can be deallocated by simply calling av_free().
 + *
 + * @return An AVCodecContext filled with default values or NULL on failure.
 + * @see avcodec_get_context_defaults
 + *
 + * @deprecated use avcodec_alloc_context3()
 + */
 +attribute_deprecated
 +AVCodecContext *avcodec_alloc_context(void);
 +
 +/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
 + *  we WILL change its arguments and name a few times! */
 +attribute_deprecated
 +AVCodecContext *avcodec_alloc_context2(enum AVMediaType);
 +#endif
 +
  /**
   * Allocate an AVCodecContext and set its fields to default values.  The
   * resulting struct can be deallocated by simply calling av_free().
   * @param codec if non-NULL, allocate private data and initialize defaults
   *              for the given codec. It is illegal to then call avcodec_open2()
   *              with a different codec.
+  *              If NULL, then the codec-specific defaults won't be initialized,
+  *              which may result in suboptimal default settings (this is
+  *              important mainly for encoders, e.g. libx264).
   *
   * @return An AVCodecContext filled with default values or NULL on failure.
   * @see avcodec_get_context_defaults
@@@ -3641,40 -3493,6 +3644,40 @@@ int avcodec_default_execute(AVCodecCont
  int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);
  //FIXME func typedef
  
 +#if FF_API_AVCODEC_OPEN
 +/**
 + * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
 + * function the context has to be allocated.
 + *
 + * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
 + * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
 + * retrieving a codec.
 + *
 + * @warning This function is not thread safe!
 + *
 + * @code
 + * avcodec_register_all();
 + * codec = avcodec_find_decoder(CODEC_ID_H264);
 + * if (!codec)
 + *     exit(1);
 + *
 + * context = avcodec_alloc_context3(codec);
 + *
 + * if (avcodec_open(context, codec) < 0)
 + *     exit(1);
 + * @endcode
 + *
 + * @param avctx The context which will be set up to use the given codec.
 + * @param codec The codec to use within the context.
 + * @return zero on success, a negative value on error
 + * @see avcodec_alloc_context3, avcodec_find_decoder, avcodec_find_encoder, avcodec_close
 + *
 + * @deprecated use avcodec_open2
 + */
 +attribute_deprecated
 +int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
 +#endif
 +
  /**
   * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
   * function the context has to be allocated with avcodec_alloc_context3().
@@@ -3847,7 -3665,7 +3850,7 @@@ int avcodec_decode_audio4(AVCodecContex
   */
  int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
                           int *got_picture_ptr,
 -                         AVPacket *avpkt);
 +                         const AVPacket *avpkt);
  
  /**
   * Decode a subtitle message.
@@@ -4257,15 -4075,6 +4260,15 @@@ void *av_fast_realloc(void *ptr, unsign
  void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size);
  
  /**
 + * Same behaviour av_fast_malloc but the buffer has additional
 + * FF_INPUT_PADDING_SIZE at the end which will will always be 0.
 + *
 + * In addition the whole buffer will initially and after resizes
 + * be 0-initialized so that no uninitialized data will ever appear.
 + */
 +void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size);
 +
 +/**
   * Copy image src to dst. Wraps av_picture_data_copy() above.
   */
  void av_picture_copy(AVPicture *dst, const AVPicture *src,
@@@ -4294,7 -4103,7 +4297,7 @@@ unsigned int av_xiphlacing(unsigned cha
  
  /**
   * Log a generic warning message about a missing feature. This function is
 - * intended to be used internally by Libav (libavcodec, libavformat, etc.)
 + * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
   * only, and would normally not be used by applications.
   * @param[in] avc a pointer to an arbitrary struct of which the first field is
   * a pointer to an AVClass struct
@@@ -4308,7 -4117,7 +4311,7 @@@ void av_log_missing_feature(void *avc, 
  
  /**
   * Log a generic warning message asking for a sample. This function is
 - * intended to be used internally by Libav (libavcodec, libavformat, etc.)
 + * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.)
   * only, and would normally not be used by applications.
   * @param[in] avc a pointer to an arbitrary struct of which the first field is
   * a pointer to an AVClass struct
@@@ -4345,7 -4154,7 +4348,7 @@@ enum AVLockOp 
   * lockmgr should store/get a pointer to a user allocated mutex. It's
   * NULL upon AV_LOCK_CREATE and != NULL for all other ops.
   *
 - * @param cb User defined callback. Note: Libav may invoke calls to this
 + * @param cb User defined callback. Note: FFmpeg may invoke calls to this
   *           callback during the call to av_lockmgr_register().
   *           Thus, the application must be prepared to handle that.
   *           If cb is set to NULL the lockmgr will be unregistered.
@@@ -4367,12 -4176,4 +4370,12 @@@ enum AVMediaType avcodec_get_type(enum 
   */
  const AVClass *avcodec_get_class(void);
  
 +/**
 + * Get the AVClass for AVFrame. It can be used in combination with
 + * AV_OPT_SEARCH_FAKE_OBJ for examining options.
 + *
 + * @see av_opt_find().
 + */
 +const AVClass *avcodec_get_frame_class(void);
 +
  #endif /* AVCODEC_AVCODEC_H */
diff --combined libavcodec/bitstream.c
@@@ -6,20 -6,20 +6,20 @@@
   *
   * alternative bitstream reader & writer by Michael Niedermayer <michaelni@gmx.at>
   *
 - * 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
   */
  
@@@ -105,8 -105,8 +105,8 @@@ static int alloc_table(VLC *vlc, int si
          if(use_static)
              abort(); // cannot do anything, init_vlc() is used with too little memory
          vlc->table_allocated += (1 << vlc->bits);
 -        vlc->table = av_realloc(vlc->table,
 -                                sizeof(VLC_TYPE) * 2 * vlc->table_allocated);
 +        vlc->table = av_realloc_f(vlc->table,
 +                                  vlc->table_allocated, sizeof(VLC_TYPE) * 2);
          if (!vlc->table)
              return -1;
      }
@@@ -322,4 -322,3 +322,3 @@@ void free_vlc(VLC *vlc
  {
      av_freep(&vlc->table);
  }
diff --combined libavcodec/cscd.c
@@@ -2,20 -2,20 +2,20 @@@
   * CamStudio decoder
   * Copyright (c) 2006 Reimar Doeffinger
   *
 - * 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
   */
  #include <stdio.h>
@@@ -149,7 -149,7 +149,7 @@@ static int decode_frame(AVCodecContext 
  
      if (c->pic.data[0])
          avctx->release_buffer(avctx, &c->pic);
 -    c->pic.reference = 1;
 +    c->pic.reference = 3;
      c->pic.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_READABLE |
                            FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE;
      if (avctx->get_buffer(avctx, &c->pic) < 0) {
@@@ -231,7 -231,6 +231,7 @@@ static av_cold int decode_init(AVCodecC
              return 1;
      }
      c->bpp = avctx->bits_per_coded_sample;
 +    avcodec_get_frame_defaults(&c->pic);
      c->pic.data[0] = NULL;
      c->linelen = avctx->width * avctx->bits_per_coded_sample / 8;
      c->height = avctx->height;
@@@ -266,4 -265,3 +266,3 @@@ AVCodec ff_cscd_decoder = 
      .capabilities   = CODEC_CAP_DR1,
      .long_name = NULL_IF_CONFIG_SMALL("CamStudio"),
  };
diff --combined libavcodec/dvdata.c
@@@ -2,20 -2,20 +2,20 @@@
   * Constants for DV codec
   * Copyright (c) 2002 Fabrice Bellard
   *
 - * 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
   */
  
@@@ -25,7 -25,6 +25,7 @@@
   */
  
  #include "libavutil/rational.h"
 +#include "libavutil/intreadwrite.h"
  #include "avcodec.h"
  #include "dvdata.h"
  
@@@ -246,25 -245,20 +246,25 @@@ static const DVprofile dv_profiles[] = 
      }
  };
  
 -const DVprofile* avpriv_dv_frame_profile(const DVprofile *sys,
 +const DVprofile* avpriv_dv_frame_profile2(AVCodecContext* codec, const DVprofile *sys,
                                    const uint8_t* frame, unsigned buf_size)
  {
 -   int i;
 +   int i, dsf, stype;
  
 -   int dsf = (frame[3] & 0x80) >> 7;
 +   if(buf_size < DV_PROFILE_BYTES)
 +       return NULL;
  
 -   int stype = frame[80*5 + 48 + 3] & 0x1f;
 +   dsf = (frame[3] & 0x80) >> 7;
 +   stype = frame[80*5 + 48 + 3] & 0x1f;
  
     /* 576i50 25Mbps 4:1:1 is a special case */
     if (dsf == 1 && stype == 0 && frame[4] & 0x07 /* the APT field */) {
         return &dv_profiles[2];
     }
  
 +   if(codec && codec->codec_tag==AV_RL32("dvsd") &&  codec->width==720 && codec->height==576)
 +       return &dv_profiles[1];
 +
     for (i=0; i<FF_ARRAY_ELEMS(dv_profiles); i++)
         if (dsf == dv_profiles[i].dsf && stype == dv_profiles[i].video_stype)
             return &dv_profiles[i];
     return NULL;
  }
  
 +const DVprofile* avpriv_dv_frame_profile(const DVprofile *sys,
 +                                  const uint8_t* frame, unsigned buf_size)
 +{
 +    return avpriv_dv_frame_profile2(NULL, sys, frame, buf_size);
 +}
 +
  const DVprofile* avpriv_dv_codec_profile(AVCodecContext* codec)
  {
      int i;
  
      for (i=0; i<FF_ARRAY_ELEMS(dv_profiles); i++)
 -       if (codec->height  == dv_profiles[i].height  &&
 -           codec->pix_fmt == dv_profiles[i].pix_fmt &&
 -           codec->width   == dv_profiles[i].width)
 +       if (codec->coded_height == dv_profiles[i].height  &&
 +           codec->pix_fmt      == dv_profiles[i].pix_fmt &&
 +           codec->coded_width  == dv_profiles[i].width)
                 return &dv_profiles[i];
  
      return NULL;
  }
diff --combined libavcodec/dxa.c
@@@ -2,20 -2,20 +2,20 @@@
   * Feeble Files/ScummVM DXA decoder
   * Copyright (c) 2007 Konstantin Shishkov
   *
 - * 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
   */
  
@@@ -209,7 -209,7 +209,7 @@@ static int decode_frame(AVCodecContext 
              r = *buf++;
              g = *buf++;
              b = *buf++;
 -            c->pal[i] = (r << 16) | (g << 8) | b;
 +            c->pal[i] = 0xFF << 24 | r << 16 | g << 8 | b;
          }
          pc = 1;
          buf_size -= 768+4;
@@@ -295,9 -295,6 +295,9 @@@ static av_cold int decode_init(AVCodecC
      c->avctx = avctx;
      avctx->pix_fmt = PIX_FMT_PAL8;
  
 +    avcodec_get_frame_defaults(&c->pic);
 +    avcodec_get_frame_defaults(&c->prev);
 +
      c->dsize = avctx->width * avctx->height * 2;
      if((c->decomp_buf = av_malloc(c->dsize)) == NULL) {
          av_log(avctx, AV_LOG_ERROR, "Can't allocate decompression buffer.\n");
@@@ -331,4 -328,3 +331,3 @@@ AVCodec ff_dxa_decoder = 
      .capabilities   = CODEC_CAP_DR1,
      .long_name = NULL_IF_CONFIG_SMALL("Feeble Files/ScummVM DXA"),
  };
diff --combined libavcodec/dxva2.c
@@@ -3,20 -3,20 +3,20 @@@
   *
   * copyright (c) 2010 Laurent Aimar
   *
 - * 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
   */
  
@@@ -151,4 -151,3 +151,3 @@@ end
          ff_draw_horiz_band(s, 0, s->avctx->height);
      return result;
  }
diff --combined libavcodec/dxva2_h264.c
@@@ -3,20 -3,20 +3,20 @@@
   *
   * copyright (c) 2009 Laurent Aimar
   *
 - * 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
   */
  
@@@ -95,7 -95,7 +95,7 @@@ static void fill_picture_parameters(str
      pp->wBitFields                    = ((s->picture_structure != PICT_FRAME) <<  0) |
                                          (h->sps.mb_aff                        <<  1) |
                                          (h->sps.residual_color_transform_flag <<  2) |
 -                                        /* sp_for_switch_flag (not implemented by Libav) */
 +                                        /* sp_for_switch_flag (not implemented by FFmpeg) */
                                          (0                                    <<  3) |
                                          (h->sps.chroma_format_idc             <<  4) |
                                          ((h->nal_ref_idc != 0)                <<  6) |
      pp->deblocking_filter_control_present_flag = h->pps.deblocking_filter_parameters_present;
      pp->redundant_pic_cnt_present_flag= h->pps.redundant_pic_cnt_present;
      pp->Reserved8BitsB                = 0;
 -    pp->slice_group_change_rate_minus1= 0;  /* XXX not implemented by Libav */
 -    //pp->SliceGroupMap[810];               /* XXX not implemented by Libav */
 +    pp->slice_group_change_rate_minus1= 0;  /* XXX not implemented by FFmpeg */
 +    //pp->SliceGroupMap[810];               /* XXX not implemented by FFmpeg */
  }
  
  static void fill_scaling_lists(struct dxva_context *ctx, const H264Context *h, DXVA_Qmatrix_H264 *qm)
@@@ -258,7 -258,7 +258,7 @@@ static void fill_slice_long(AVCodecCont
              }
          }
      }
 -    slice->slice_qs_delta    = 0; /* XXX not implemented by Libav */
 +    slice->slice_qs_delta    = 0; /* XXX not implemented by FFmpeg */
      slice->slice_qp_delta    = s->qscale - h->pps.init_qp;
      slice->redundant_pic_cnt = h->redundant_pic_count;
      if (h->slice_type == AV_PICTURE_TYPE_B)
@@@ -448,4 -448,3 +448,3 @@@ AVHWAccel ff_h264_dxva2_hwaccel = 
      .end_frame      = end_frame,
      .priv_data_size = sizeof(struct dxva2_picture_context),
  };
diff --combined libavcodec/dxva2_mpeg2.c
@@@ -3,20 -3,20 +3,20 @@@
   *
   * copyright (c) 2010 Laurent Aimar
   *
 - * 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
   */
  
@@@ -109,10 -109,10 +109,10 @@@ static void fill_quantization_matrices(
          qm->bNewQmatrix[i] = 1;
      for (i = 0; i < 64; i++) {
          int n = s->dsp.idct_permutation[ff_zigzag_direct[i]];
 -        qm->Qmatrix[0][i] = s->intra_matrix[n];;
 -        qm->Qmatrix[1][i] = s->inter_matrix[n];;
 -        qm->Qmatrix[2][i] = s->chroma_intra_matrix[n];;
 -        qm->Qmatrix[3][i] = s->chroma_inter_matrix[n];;
 +        qm->Qmatrix[0][i] = s->intra_matrix[n];
 +        qm->Qmatrix[1][i] = s->inter_matrix[n];
 +        qm->Qmatrix[2][i] = s->chroma_intra_matrix[n];
 +        qm->Qmatrix[3][i] = s->chroma_inter_matrix[n];
      }
  }
  
@@@ -270,4 -270,3 +270,3 @@@ AVHWAccel ff_mpeg2_dxva2_hwaccel = 
      .end_frame      = end_frame,
      .priv_data_size = sizeof(struct dxva2_picture_context),
  };
diff --combined libavcodec/dxva2_vc1.c
@@@ -3,20 -3,20 +3,20 @@@
   *
   * copyright (c) 2010 Laurent Aimar
   *
 - * 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
   */
  
@@@ -286,4 -286,3 +286,3 @@@ AVHWAccel ff_vc1_dxva2_hwaccel = 
      .end_frame      = end_frame,
      .priv_data_size = sizeof(struct dxva2_picture_context),
  };
diff --combined libavcodec/escape124.c
@@@ -2,20 -2,20 +2,20 @@@
   * Escape 124 Video Decoder
   * Copyright (C) 2008 Eli Friedman (eli.friedman@gmail.com)
   *
 - * 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
   */
  
@@@ -61,7 -61,6 +61,7 @@@ static av_cold int escape124_decode_ini
  {
      Escape124Context *s = avctx->priv_data;
  
 +    avcodec_get_frame_defaults(&s->frame);
      avctx->pix_fmt = PIX_FMT_RGB555;
  
      s->num_superblocks = ((unsigned)avctx->width / 8) *
@@@ -215,8 -214,7 +215,8 @@@ static int escape124_decode_frame(AVCod
      uint16_t* old_frame_data, *new_frame_data;
      unsigned old_stride, new_stride;
  
 -    AVFrame new_frame = { { 0 } };
 +    AVFrame new_frame;
 +    avcodec_get_frame_defaults(&new_frame);
  
      init_get_bits(&gb, buf, buf_size * 8);
  
@@@ -376,4 -374,3 +376,3 @@@ AVCodec ff_escape124_decoder = 
      .capabilities   = CODEC_CAP_DR1,
      .long_name = NULL_IF_CONFIG_SMALL("Escape 124"),
  };
diff --combined libavcodec/fft.c
@@@ -4,20 -4,20 +4,20 @@@
   * Copyright (c) 2002 Fabrice Bellard
   * Partly based on libdjbfft by D. J. Bernstein
   *
 - * 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
   */
  
@@@ -350,4 -350,3 +350,3 @@@ static void ff_fft_calc_c(FFTContext *s
  {
      fft_dispatch[s->nbits-2](z);
  }
diff --combined libavcodec/flashsvenc.c
@@@ -3,20 -3,20 +3,20 @@@
   * Copyright (C) 2004 Alex Beregszaszi
   * Copyright (C) 2006 Benjamin Larsson
   *
 - * 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
   */
  
@@@ -286,4 -286,3 +286,3 @@@ AVCodec ff_flashsv_encoder = 
      .pix_fmts       = (const enum PixelFormat[]){PIX_FMT_BGR24, PIX_FMT_NONE},
      .long_name      = NULL_IF_CONFIG_SMALL("Flash Screen Video"),
  };
diff --combined libavcodec/h261.c
@@@ -3,20 -3,20 +3,20 @@@
   * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
   * Copyright (c) 2004 Maarten Daniels
   *
 - * 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
   */
  
@@@ -51,4 -51,3 +51,3 @@@ void ff_h261_loop_filter(MpegEncContex
      s->dsp.h261_loop_filter(dest_cb, uvlinesize);
      s->dsp.h261_loop_filter(dest_cr, uvlinesize);
  }
diff --combined libavcodec/h261enc.c
@@@ -3,20 -3,20 +3,20 @@@
   * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
   * Copyright (c) 2004 Maarten Daniels
   *
 - * 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
   */
  
@@@ -332,4 -332,3 +332,3 @@@ AVCodec ff_h261_encoder = 
      .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
      .long_name= NULL_IF_CONFIG_SMALL("H.261"),
  };
diff --combined libavcodec/h264_cavlc.c
@@@ -2,20 -2,20 +2,20 @@@
   * H.26L/H.264/AVC/JVT/14496-10/... cavlc bitstream decoding
   * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
   *
 - * 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
   */
  
@@@ -26,7 -26,6 +26,7 @@@
   */
  
  #define CABAC 0
 +#define UNCHECKED_BITSTREAM_READER 1
  
  #include "internal.h"
  #include "avcodec.h"
@@@ -823,12 -822,12 +823,12 @@@ decode_intra_mb
              if( ff_h264_check_intra4x4_pred_mode(h) < 0)
                  return -1;
          }else{
 -            h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode(h, h->intra16x16_pred_mode);
 +            h->intra16x16_pred_mode= ff_h264_check_intra16x16_pred_mode(h, h->intra16x16_pred_mode);
              if(h->intra16x16_pred_mode < 0)
                  return -1;
          }
          if(decode_chroma){
 -            pred_mode= ff_h264_check_intra_pred_mode(h, get_ue_golomb_31(&s->gb));
 +            pred_mode= ff_h264_check_intra_chroma_pred_mode(h, get_ue_golomb_31(&s->gb));
              if(pred_mode < 0)
                  return -1;
              h->chroma_pred_mode= pred_mode;
              if( decode_luma_residual(h, gb, scan, scan8x8, pixel_shift, mb_type, cbp, 2) < 0 ){
                  return -1;
              }
 -        } else if (CHROMA422) {
 +        } else {
 +            const int num_c8x8 = h->sps.chroma_format_idc;
 +
              if(cbp&0x30){
                  for(chroma_idx=0; chroma_idx<2; chroma_idx++)
                      if (decode_residual(h, gb, h->mb + ((256 + 16*16*chroma_idx) << pixel_shift),
 -                                        CHROMA_DC_BLOCK_INDEX+chroma_idx, chroma422_dc_scan,
 -                                        NULL, 8) < 0) {
 +                                        CHROMA_DC_BLOCK_INDEX+chroma_idx,
 +                                        CHROMA422 ? chroma422_dc_scan : chroma_dc_scan,
 +                                        NULL, 4*num_c8x8) < 0) {
                          return -1;
                      }
              }
                  for(chroma_idx=0; chroma_idx<2; chroma_idx++){
                      const uint32_t *qmul = h->dequant4_coeff[chroma_idx+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[chroma_idx]];
                      DCTELEM *mb = h->mb + (16*(16 + 16*chroma_idx) << pixel_shift);
 -                    for (i8x8 = 0; i8x8 < 2; i8x8++) {
 -                        for (i4x4 = 0; i4x4 < 4; i4x4++) {
 -                            const int index = 16 + 16*chroma_idx + 8*i8x8 + i4x4;
 +                    for (i8x8=0; i8x8<num_c8x8; i8x8++) {
 +                        for (i4x4=0; i4x4<4; i4x4++) {
 +                            const int index= 16 + 16*chroma_idx + 8*i8x8 + i4x4;
                              if (decode_residual(h, gb, mb, index, scan + 1, qmul, 15) < 0)
                                  return -1;
 -                            mb += 16 << pixel_shift;
 -                        }
 -                    }
 -                }
 -            }else{
 -                fill_rectangle(&h->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
 -                fill_rectangle(&h->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
 -            }
 -        } else /* yuv420 */ {
 -            if(cbp&0x30){
 -                for(chroma_idx=0; chroma_idx<2; chroma_idx++)
 -                    if( decode_residual(h, gb, h->mb + ((256 + 16*16*chroma_idx) << pixel_shift), CHROMA_DC_BLOCK_INDEX+chroma_idx, chroma_dc_scan, NULL, 4) < 0){
 -                        return -1;
 -                    }
 -            }
 -
 -            if(cbp&0x20){
 -                for(chroma_idx=0; chroma_idx<2; chroma_idx++){
 -                    const uint32_t *qmul = h->dequant4_coeff[chroma_idx+1+(IS_INTRA( mb_type ) ? 0:3)][h->chroma_qp[chroma_idx]];
 -                    for(i4x4=0; i4x4<4; i4x4++){
 -                        const int index= 16 + 16*chroma_idx + i4x4;
 -                        if( decode_residual(h, gb, h->mb + (16*index << pixel_shift), index, scan + 1, qmul, 15) < 0){
 -                            return -1;
 +                            mb += 16<<pixel_shift;
                          }
                      }
                  }
  
      return 0;
  }
@@@ -2,20 -2,20 +2,20 @@@
   * H.264 MP4 to Annex B byte stream format filter
   * Copyright (c) 2007 Benoit Fouet <benoit.fouet@free.fr>
   *
 - * 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
   */
  
@@@ -63,7 -63,6 +63,7 @@@ static int h264_mp4toannexb_filter(AVBi
      int32_t nal_size;
      uint32_t cumul_size = 0;
      const uint8_t *buf_end = buf + buf_size;
 +    int ret = AVERROR(EINVAL);
  
      /* nothing to filter */
      if (!avctx->extradata || avctx->extradata_size < 6) {
          /* retrieve sps and pps unit(s) */
          unit_nb = *extradata++ & 0x1f; /* number of sps unit(s) */
          if (!unit_nb) {
 -            unit_nb = *extradata++; /* number of pps unit(s) */
 -            sps_done++;
 -
 -            if (unit_nb)
 -                pps_seen = 1;
 +            goto pps;
          } else {
              sps_seen = 1;
          }
              memcpy(out+total_size-unit_size-4, nalu_header, 4);
              memcpy(out+total_size-unit_size,   extradata+2, unit_size);
              extradata += 2+unit_size;
 -
 +pps:
              if (!unit_nb && !sps_done++) {
                  unit_nb = *extradata++; /* number of pps unit(s) */
                  if (unit_nb)
      *poutbuf_size = 0;
      *poutbuf = NULL;
      do {
 +        ret= AVERROR(EINVAL);
          if (buf + ctx->length_size > buf_end)
              goto fail;
  
  
          /* prepend only to the first type 5 NAL unit of an IDR picture */
          if (ctx->first_idr && unit_type == 5) {
 -            if (alloc_and_copy(poutbuf, poutbuf_size,
 +            if ((ret=alloc_and_copy(poutbuf, poutbuf_size,
                                 avctx->extradata, avctx->extradata_size,
 -                               buf, nal_size) < 0)
 +                               buf, nal_size)) < 0)
                  goto fail;
              ctx->first_idr = 0;
          } else {
 -            if (alloc_and_copy(poutbuf, poutbuf_size,
 +            if ((ret=alloc_and_copy(poutbuf, poutbuf_size,
                                 NULL, 0,
 -                               buf, nal_size) < 0)
 +                               buf, nal_size)) < 0)
                  goto fail;
              if (!ctx->first_idr && unit_type == 1)
                  ctx->first_idr = 1;
  fail:
      av_freep(poutbuf);
      *poutbuf_size = 0;
 -    return AVERROR(EINVAL);
 +    return ret;
  }
  
  AVBitStreamFilter ff_h264_mp4toannexb_bsf = {
      sizeof(H264BSFContext),
      h264_mp4toannexb_filter,
  };
diff --combined libavcodec/idcinvideo.c
@@@ -2,20 -2,20 +2,20 @@@
   * id Quake II CIN Video Decoder
   * Copyright (C) 2003 the ffmpeg project
   *
 - * 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
   */
  
@@@ -166,7 -166,6 +166,7 @@@ static av_cold int idcin_decode_init(AV
          huff_build_tree(s, i);
      }
  
 +    avcodec_get_frame_defaults(&s->frame);
      s->frame.data[0] = NULL;
  
      return 0;
@@@ -265,4 -264,3 +265,3 @@@ AVCodec ff_idcin_decoder = 
      .capabilities   = CODEC_CAP_DR1,
      .long_name = NULL_IF_CONFIG_SMALL("id Quake II CIN video"),
  };
diff --combined libavcodec/imgconvert.c
@@@ -2,20 -2,20 +2,20 @@@
   * Misc image conversion routines
   * Copyright (c) 2001, 2002, 2003 Fabrice Bellard
   *
 - * 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
   */
  
  #define FF_COLOR_YUV      2 /**< YUV color space. 16 <= Y <= 235, 16 <= U, V <= 240 */
  #define FF_COLOR_YUV_JPEG 3 /**< YUV color space. 0 <= Y <= 255, 0 <= U, V <= 255 */
  
 -#define FF_PIXEL_PLANAR   0 /**< each channel has one component in AVPicture */
 -#define FF_PIXEL_PACKED   1 /**< only one components containing all the channels */
 -#define FF_PIXEL_PALETTE  2  /**< one components containing indexes for a palette */
 -
  #if HAVE_MMX && HAVE_YASM
  #define deinterlace_line_inplace ff_deinterlace_line_inplace_mmx
  #define deinterlace_line         ff_deinterlace_line_mmx
  #endif
  
  typedef struct PixFmtInfo {
 -    uint8_t nb_channels;     /**< number of channels (including alpha) */
      uint8_t color_type;      /**< color type (see FF_COLOR_xxx constants) */
 -    uint8_t pixel_type;      /**< pixel storage type (see FF_PIXEL_xxx constants) */
      uint8_t is_alpha : 1;    /**< true if alpha can be specified */
 -    uint8_t depth;           /**< bit depth of the color components */
 +    uint8_t padded_size;     /**< padded size in bits if different from the non-padded size */
  } PixFmtInfo;
  
  /* this table gives more information about formats */
  static const PixFmtInfo pix_fmt_info[PIX_FMT_NB] = {
      /* YUV formats */
      [PIX_FMT_YUV420P] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
      [PIX_FMT_YUV422P] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
      [PIX_FMT_YUV444P] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
      [PIX_FMT_YUYV422] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
      },
      [PIX_FMT_UYVY422] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
      },
      [PIX_FMT_YUV410P] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
      [PIX_FMT_YUV411P] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
      [PIX_FMT_YUV440P] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
      [PIX_FMT_YUV420P16LE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 16,
      },
      [PIX_FMT_YUV422P16LE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 16,
      },
      [PIX_FMT_YUV444P16LE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 16,
      },
      [PIX_FMT_YUV420P16BE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 16,
      },
      [PIX_FMT_YUV422P16BE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 16,
      },
      [PIX_FMT_YUV444P16BE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 16,
      },
  
 -
      /* YUV formats with alpha plane */
      [PIX_FMT_YUVA420P] = {
 -        .nb_channels = 4,
 +        .is_alpha = 1,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
  
      /* JPEG YUV */
      [PIX_FMT_YUVJ420P] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV_JPEG,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
      [PIX_FMT_YUVJ422P] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV_JPEG,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
      [PIX_FMT_YUVJ444P] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV_JPEG,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
      [PIX_FMT_YUVJ440P] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_YUV_JPEG,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
  
      /* RGB formats */
      [PIX_FMT_RGB24] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
      },
      [PIX_FMT_BGR24] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
      },
      [PIX_FMT_ARGB] = {
 -        .nb_channels = 4, .is_alpha = 1,
 +        .is_alpha = 1,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
      },
      [PIX_FMT_RGB48BE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 16,
      },
      [PIX_FMT_RGB48LE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 16,
 +    },
 +    [PIX_FMT_RGBA64BE] = {
 +        .is_alpha = 1,
 +        .color_type = FF_COLOR_RGB,
 +    },
 +    [PIX_FMT_RGBA64LE] = {
 +        .is_alpha = 1,
 +        .color_type = FF_COLOR_RGB,
      },
      [PIX_FMT_RGB565BE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 5,
      },
      [PIX_FMT_RGB565LE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 5,
      },
      [PIX_FMT_RGB555BE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 5,
 +        .padded_size = 16,
      },
      [PIX_FMT_RGB555LE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 5,
 +        .padded_size = 16,
      },
      [PIX_FMT_RGB444BE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 4,
 +        .padded_size = 16,
      },
      [PIX_FMT_RGB444LE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 4,
 +        .padded_size = 16,
      },
  
      /* gray / mono formats */
      [PIX_FMT_GRAY16BE] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_GRAY,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 16,
      },
      [PIX_FMT_GRAY16LE] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_GRAY,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 16,
      },
      [PIX_FMT_GRAY8] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_GRAY,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
 +    },
 +    [PIX_FMT_GRAY8A] = {
 +        .is_alpha = 1,
 +        .color_type = FF_COLOR_GRAY,
      },
      [PIX_FMT_MONOWHITE] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_GRAY,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 1,
      },
      [PIX_FMT_MONOBLACK] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_GRAY,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 1,
      },
  
      /* paletted formats */
      [PIX_FMT_PAL8] = {
 -        .nb_channels = 4, .is_alpha = 1,
 +        .is_alpha = 1,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PALETTE,
 -        .depth = 8,
      },
      [PIX_FMT_UYYVYY411] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
      },
      [PIX_FMT_ABGR] = {
 -        .nb_channels = 4, .is_alpha = 1,
 +        .is_alpha = 1,
 +        .color_type = FF_COLOR_RGB,
 +    },
 +    [PIX_FMT_BGR48BE] = {
 +        .color_type = FF_COLOR_RGB,
 +    },
 +    [PIX_FMT_BGR48LE] = {
 +        .color_type = FF_COLOR_RGB,
 +    },
 +    [PIX_FMT_BGRA64BE] = {
 +        .is_alpha = 1,
 +        .color_type = FF_COLOR_RGB,
 +    },
 +    [PIX_FMT_BGRA64LE] = {
 +        .is_alpha = 1,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
      },
      [PIX_FMT_BGR565BE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 5,
 +        .padded_size = 16,
      },
      [PIX_FMT_BGR565LE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 5,
 +        .padded_size = 16,
      },
      [PIX_FMT_BGR555BE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 5,
 +        .padded_size = 16,
      },
      [PIX_FMT_BGR555LE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 5,
 +        .padded_size = 16,
      },
      [PIX_FMT_BGR444BE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 4,
 +        .padded_size = 16,
      },
      [PIX_FMT_BGR444LE] = {
 -        .nb_channels = 3,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 4,
 +        .padded_size = 16,
      },
      [PIX_FMT_RGB8] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
      },
      [PIX_FMT_RGB4] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 4,
      },
      [PIX_FMT_RGB4_BYTE] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
 +        .padded_size = 8,
      },
      [PIX_FMT_BGR8] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
      },
      [PIX_FMT_BGR4] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 4,
      },
      [PIX_FMT_BGR4_BYTE] = {
 -        .nb_channels = 1,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
 +        .padded_size = 8,
      },
      [PIX_FMT_NV12] = {
 -        .nb_channels = 2,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
      [PIX_FMT_NV21] = {
 -        .nb_channels = 2,
          .color_type = FF_COLOR_YUV,
 -        .pixel_type = FF_PIXEL_PLANAR,
 -        .depth = 8,
      },
  
      [PIX_FMT_BGRA] = {
 -        .nb_channels = 4, .is_alpha = 1,
 +        .is_alpha = 1,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
      },
      [PIX_FMT_RGBA] = {
 -        .nb_channels = 4, .is_alpha = 1,
 +        .is_alpha = 1,
          .color_type = FF_COLOR_RGB,
 -        .pixel_type = FF_PIXEL_PACKED,
 -        .depth = 8,
      },
  };
  
@@@ -335,16 -460,6 +335,16 @@@ int avpicture_layout(const AVPicture* s
          }
      }
  
 +    switch (pix_fmt) {
 +    case PIX_FMT_RGB8:
 +    case PIX_FMT_BGR8:
 +    case PIX_FMT_RGB4_BYTE:
 +    case PIX_FMT_BGR4_BYTE:
 +    case PIX_FMT_GRAY8:
 +        // do not include palette for these pseudo-paletted formats
 +        return size;
 +    }
 +
      if (desc->flags & PIX_FMT_PAL)
          memcpy((unsigned char *)(((size_t)dest + 3) & ~3), src->data[1], 256 * 4);
  
@@@ -368,55 -483,28 +368,55 @@@ int avpicture_get_size(enum PixelForma
      return avpicture_fill(&dummy_pict, NULL, pix_fmt, width, height);
  }
  
 +static int get_pix_fmt_depth(int *min, int *max, enum PixelFormat pix_fmt)
 +{
 +    const AVPixFmtDescriptor *desc = &av_pix_fmt_descriptors[pix_fmt];
 +    int i;
 +
 +    if (!desc->nb_components) {
 +        *min = *max = 0;
 +        return AVERROR(EINVAL);
 +    }
 +
 +    *min = INT_MAX, *max = -INT_MAX;
 +    for (i = 0; i < desc->nb_components; i++) {
 +        *min = FFMIN(desc->comp[i].depth_minus1+1, *min);
 +        *max = FFMAX(desc->comp[i].depth_minus1+1, *max);
 +    }
 +    return 0;
 +}
 +
  int avcodec_get_pix_fmt_loss(enum PixelFormat dst_pix_fmt, enum PixelFormat src_pix_fmt,
                               int has_alpha)
  {
      const PixFmtInfo *pf, *ps;
 -    const AVPixFmtDescriptor *src_desc = &av_pix_fmt_descriptors[src_pix_fmt];
 -    const AVPixFmtDescriptor *dst_desc = &av_pix_fmt_descriptors[dst_pix_fmt];
 -    int loss;
 +    const AVPixFmtDescriptor *src_desc;
 +    const AVPixFmtDescriptor *dst_desc;
 +    int src_min_depth, src_max_depth, dst_min_depth, dst_max_depth;
 +    int ret, loss;
 +
 +    if (dst_pix_fmt >= PIX_FMT_NB || dst_pix_fmt <= PIX_FMT_NONE)
 +        return ~0;
  
 +    src_desc = &av_pix_fmt_descriptors[src_pix_fmt];
 +    dst_desc = &av_pix_fmt_descriptors[dst_pix_fmt];
      ps = &pix_fmt_info[src_pix_fmt];
  
      /* compute loss */
      loss = 0;
 -    pf = &pix_fmt_info[dst_pix_fmt];
 -    if (pf->depth < ps->depth ||
 -        ((dst_pix_fmt == PIX_FMT_RGB555BE || dst_pix_fmt == PIX_FMT_RGB555LE ||
 -          dst_pix_fmt == PIX_FMT_BGR555BE || dst_pix_fmt == PIX_FMT_BGR555LE) &&
 -         (src_pix_fmt == PIX_FMT_RGB565BE || src_pix_fmt == PIX_FMT_RGB565LE ||
 -          src_pix_fmt == PIX_FMT_BGR565BE || src_pix_fmt == PIX_FMT_BGR565LE)))
 +
 +    if ((ret = get_pix_fmt_depth(&src_min_depth, &src_max_depth, src_pix_fmt)) < 0)
 +        return ret;
 +    if ((ret = get_pix_fmt_depth(&dst_min_depth, &dst_max_depth, dst_pix_fmt)) < 0)
 +        return ret;
 +    if (dst_min_depth < src_min_depth ||
 +        dst_max_depth < src_max_depth)
          loss |= FF_LOSS_DEPTH;
      if (dst_desc->log2_chroma_w > src_desc->log2_chroma_w ||
          dst_desc->log2_chroma_h > src_desc->log2_chroma_h)
          loss |= FF_LOSS_RESOLUTION;
 +
 +    pf = &pix_fmt_info[dst_pix_fmt];
      switch(pf->color_type) {
      case FF_COLOR_RGB:
          if (ps->color_type != FF_COLOR_RGB &&
          loss |= FF_LOSS_CHROMA;
      if (!pf->is_alpha && (ps->is_alpha && has_alpha))
          loss |= FF_LOSS_ALPHA;
 -    if (pf->pixel_type == FF_PIXEL_PALETTE &&
 -        (ps->pixel_type != FF_PIXEL_PALETTE && ps->color_type != FF_COLOR_GRAY))
 +    if (dst_pix_fmt == PIX_FMT_PAL8 &&
 +        (src_pix_fmt != PIX_FMT_PAL8 && (ps->color_type != FF_COLOR_GRAY || (ps->is_alpha && has_alpha))))
          loss |= FF_LOSS_COLORQUANT;
 +
      return loss;
  }
  
  static int avg_bits_per_pixel(enum PixelFormat pix_fmt)
  {
 -    int bits;
 -    const PixFmtInfo *pf;
 +    const PixFmtInfo *info = &pix_fmt_info[pix_fmt];
      const AVPixFmtDescriptor *desc = &av_pix_fmt_descriptors[pix_fmt];
  
 -    pf = &pix_fmt_info[pix_fmt];
 -    switch(pf->pixel_type) {
 -    case FF_PIXEL_PACKED:
 -        switch(pix_fmt) {
 -        case PIX_FMT_YUYV422:
 -        case PIX_FMT_UYVY422:
 -        case PIX_FMT_RGB565BE:
 -        case PIX_FMT_RGB565LE:
 -        case PIX_FMT_RGB555BE:
 -        case PIX_FMT_RGB555LE:
 -        case PIX_FMT_RGB444BE:
 -        case PIX_FMT_RGB444LE:
 -        case PIX_FMT_BGR565BE:
 -        case PIX_FMT_BGR565LE:
 -        case PIX_FMT_BGR555BE:
 -        case PIX_FMT_BGR555LE:
 -        case PIX_FMT_BGR444BE:
 -        case PIX_FMT_BGR444LE:
 -            bits = 16;
 -            break;
 -        case PIX_FMT_UYYVYY411:
 -            bits = 12;
 -            break;
 -        default:
 -            bits = pf->depth * pf->nb_channels;
 -            break;
 -        }
 -        break;
 -    case FF_PIXEL_PLANAR:
 -        if (desc->log2_chroma_w == 0 && desc->log2_chroma_h == 0) {
 -            bits = pf->depth * pf->nb_channels;
 -        } else {
 -            bits = pf->depth + ((2 * pf->depth) >>
 -                                (desc->log2_chroma_w + desc->log2_chroma_h));
 -        }
 -        break;
 -    case FF_PIXEL_PALETTE:
 -        bits = 8;
 -        break;
 -    default:
 -        bits = -1;
 -        break;
 -    }
 -    return bits;
 +    return info->padded_size ?
 +        info->padded_size : av_get_bits_per_pixel(desc);
  }
  
 -static enum PixelFormat avcodec_find_best_pix_fmt1(int64_t pix_fmt_mask,
 -                                      enum PixelFormat src_pix_fmt,
 -                                      int has_alpha,
 -                                      int loss_mask)
 +enum PixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum PixelFormat src_pix_fmt,
 +                                            int has_alpha, int *loss_ptr)
  {
 -    int dist, i, loss, min_dist;
      enum PixelFormat dst_pix_fmt;
 +    int i;
  
 -    /* find exact color match with smallest size */
 -    dst_pix_fmt = PIX_FMT_NONE;
 -    min_dist = 0x7fffffff;
 -    for(i = 0;i < PIX_FMT_NB; i++) {
 -        if (pix_fmt_mask & (1ULL << i)) {
 -            loss = avcodec_get_pix_fmt_loss(i, src_pix_fmt, has_alpha) & loss_mask;
 -            if (loss == 0) {
 -                dist = avg_bits_per_pixel(i);
 -                if (dist < min_dist) {
 -                    min_dist = dist;
 -                    dst_pix_fmt = i;
 -                }
 -            }
 -        }
 +    if (loss_ptr) /* all losses count (for backward compatibility) */
 +        *loss_ptr = 0;
 +
 +    dst_pix_fmt = PIX_FMT_NONE; /* so first iteration doesn't have to be treated special */
 +    for(i = 0; i< FFMIN(PIX_FMT_NB, 64); i++){
 +        if (pix_fmt_mask & (1ULL << i))
 +            dst_pix_fmt = avcodec_find_best_pix_fmt2(dst_pix_fmt, i, src_pix_fmt, has_alpha, loss_ptr);
      }
      return dst_pix_fmt;
  }
  
 -enum PixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum PixelFormat src_pix_fmt,
 -                              int has_alpha, int *loss_ptr)
 +enum PixelFormat avcodec_find_best_pix_fmt2(enum PixelFormat dst_pix_fmt1, enum PixelFormat dst_pix_fmt2,
 +                                            enum PixelFormat src_pix_fmt, int has_alpha, int *loss_ptr)
  {
      enum PixelFormat dst_pix_fmt;
 -    int loss_mask, i;
 +    int loss1, loss2, loss_order1, loss_order2, i, loss_mask;
      static const int loss_mask_order[] = {
          ~0, /* no loss first */
          ~FF_LOSS_ALPHA,
          ~(FF_LOSS_COLORSPACE | FF_LOSS_RESOLUTION),
          ~FF_LOSS_COLORQUANT,
          ~FF_LOSS_DEPTH,
 +        ~(FF_LOSS_RESOLUTION | FF_LOSS_DEPTH | FF_LOSS_COLORSPACE | FF_LOSS_ALPHA |
 +          FF_LOSS_COLORQUANT | FF_LOSS_CHROMA),
 +        0x80000, //non zero entry that combines all loss variants including future additions
          0,
      };
  
 +    loss_mask= loss_ptr?~*loss_ptr:~0; /* use loss mask if provided */
 +    dst_pix_fmt = PIX_FMT_NONE;
 +    loss1 = avcodec_get_pix_fmt_loss(dst_pix_fmt1, src_pix_fmt, has_alpha) & loss_mask;
 +    loss2 = avcodec_get_pix_fmt_loss(dst_pix_fmt2, src_pix_fmt, has_alpha) & loss_mask;
 +
      /* try with successive loss */
 -    i = 0;
 -    for(;;) {
 -        loss_mask = loss_mask_order[i++];
 -        dst_pix_fmt = avcodec_find_best_pix_fmt1(pix_fmt_mask, src_pix_fmt,
 -                                                 has_alpha, loss_mask);
 -        if (dst_pix_fmt >= 0)
 -            goto found;
 -        if (loss_mask == 0)
 -            break;
 +    for(i = 0;loss_mask_order[i] != 0 && dst_pix_fmt == PIX_FMT_NONE;i++) {
 +        loss_order1 = loss1 & loss_mask_order[i];
 +        loss_order2 = loss2 & loss_mask_order[i];
 +
 +        if (loss_order1 == 0 && loss_order2 == 0){ /* use format with smallest depth */
 +            dst_pix_fmt = avg_bits_per_pixel(dst_pix_fmt2) < avg_bits_per_pixel(dst_pix_fmt1) ? dst_pix_fmt2 : dst_pix_fmt1;
 +        } else if (loss_order1 == 0 || loss_order2 == 0) { /* use format with no loss */
 +            dst_pix_fmt = loss_order2 ? dst_pix_fmt1 : dst_pix_fmt2;
 +        }
      }
 -    return PIX_FMT_NONE;
 - found:
 +
      if (loss_ptr)
          *loss_ptr = avcodec_get_pix_fmt_loss(dst_pix_fmt, src_pix_fmt, has_alpha);
      return dst_pix_fmt;
@@@ -634,26 -766,11 +634,26 @@@ void avpicture_free(AVPicture *picture
  }
  
  /* return true if yuv planar */
 -static inline int is_yuv_planar(const PixFmtInfo *ps)
 +static inline int is_yuv_planar(enum PixelFormat fmt)
  {
 -    return (ps->color_type == FF_COLOR_YUV ||
 -            ps->color_type == FF_COLOR_YUV_JPEG) &&
 -        ps->pixel_type == FF_PIXEL_PLANAR;
 +    const PixFmtInfo         *info = &pix_fmt_info[fmt];
 +    const AVPixFmtDescriptor *desc = &av_pix_fmt_descriptors[fmt];
 +    int i;
 +    int planes[4] = { 0 };
 +
 +    if (info->color_type != FF_COLOR_YUV &&
 +        info->color_type != FF_COLOR_YUV_JPEG)
 +        return 0;
 +
 +    /* set the used planes */
 +    for (i = 0; i < desc->nb_components; i++)
 +        planes[desc->comp[i].plane] = 1;
 +
 +    /* if there is an unused plane, the format is not planar */
 +    for (i = 0; i < desc->nb_components; i++)
 +        if (!planes[i])
 +            return 0;
 +    return 1;
  }
  
  int av_picture_crop(AVPicture *dst, const AVPicture *src,
      int y_shift;
      int x_shift;
  
 -    if (pix_fmt < 0 || pix_fmt >= PIX_FMT_NB || !is_yuv_planar(&pix_fmt_info[pix_fmt]))
 +    if (pix_fmt < 0 || pix_fmt >= PIX_FMT_NB)
          return -1;
  
      y_shift = av_pix_fmt_descriptors[pix_fmt].log2_chroma_h;
      x_shift = av_pix_fmt_descriptors[pix_fmt].log2_chroma_w;
  
 +    if (is_yuv_planar(pix_fmt)) {
      dst->data[0] = src->data[0] + (top_band * src->linesize[0]) + left_band;
      dst->data[1] = src->data[1] + ((top_band >> y_shift) * src->linesize[1]) + (left_band >> x_shift);
      dst->data[2] = src->data[2] + ((top_band >> y_shift) * src->linesize[2]) + (left_band >> x_shift);
 +    } else{
 +        if(top_band % (1<<y_shift) || left_band % (1<<x_shift))
 +            return -1;
 +        if(left_band) //FIXME add support for this too
 +            return -1;
 +        dst->data[0] = src->data[0] + (top_band * src->linesize[0]) + left_band;
 +    }
  
      dst->linesize[0] = src->linesize[0];
      dst->linesize[1] = src->linesize[1];
@@@ -697,7 -806,7 +697,7 @@@ int av_picture_pad(AVPicture *dst, cons
      int i, y;
  
      if (pix_fmt < 0 || pix_fmt >= PIX_FMT_NB ||
 -        !is_yuv_planar(&pix_fmt_info[pix_fmt])) return -1;
 +        !is_yuv_planar(pix_fmt)) return -1;
  
      for (i = 0; i < 3; i++) {
          x_shift = i ? av_pix_fmt_descriptors[pix_fmt].log2_chroma_w : 0;
@@@ -904,4 -1013,3 +904,3 @@@ int avpicture_deinterlace(AVPicture *ds
      emms_c();
      return 0;
  }
@@@ -1,20 -1,20 +1,20 @@@
  /*
   * H.263i decoder
   *
 - * 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
   */
  
@@@ -136,4 -136,3 +136,3 @@@ AVCodec ff_h263i_decoder = 
      .long_name = NULL_IF_CONFIG_SMALL("Intel H.263"),
      .pix_fmts= ff_pixfmt_list_420,
  };
diff --combined libavcodec/kbdwin.c
@@@ -1,18 -1,18 +1,18 @@@
  /*
 - * 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
   */
  
@@@ -45,4 -45,3 +45,3 @@@ av_cold void ff_kbd_window_init(float *
     for (i = 0; i < n; i++)
         window[i] = sqrt(local_window[i] / sum);
  }
@@@ -2,20 -2,20 +2,20 @@@
   * AAC encoder wrapper
   * Copyright (c) 2010 Martin Storsjo
   *
 - * 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
   */
  
@@@ -126,4 -126,3 +126,3 @@@ AVCodec ff_libvo_aacenc_encoder = 
      .sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_NONE},
      .long_name = NULL_IF_CONFIG_SMALL("Android VisualOn AAC"),
  };
@@@ -2,20 -2,20 +2,20 @@@
   * AMR Audio encoder stub
   * Copyright (c) 2003 the ffmpeg project
   *
 - * 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
   */
  
@@@ -130,4 -130,3 +130,3 @@@ AVCodec ff_libvo_amrwbenc_encoder = 
                                        "(AMR) Wide-Band"),
      .priv_class = &class,
  };
diff --combined libavcodec/libxavs.c
@@@ -2,20 -2,20 +2,20 @@@
   * AVS encoding using the xavs library
   * Copyright (C) 2010 Amanda, Y.N. Wu <amanda11192003@gmail.com>
   *
 - * 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
   */
  
@@@ -384,4 -384,3 +384,3 @@@ AVCodec ff_libxavs_encoder = 
      .priv_class     = &class,
      .defaults       = xavs_defaults,
  };
diff --combined libavcodec/libxvid_rc.c
@@@ -3,26 -3,25 +3,26 @@@
   *
   * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
   *
 - * 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
   */
  
  #include <xvid.h>
  #include <unistd.h>
 +#include "libavutil/file.h"
  #include "avcodec.h"
  #include "libxvid_internal.h"
  //#include "dsputil.h"
@@@ -41,7 -40,7 +41,7 @@@ int ff_xvid_rate_control_init(MpegEncCo
  
  //xvid_debug=-1;
  
 -    fd=ff_tempfile("xvidrc.", &tmp_name);
 +    fd=av_tempfile("xvidrc.", &tmp_name, 0, s->avctx);
      if (fd == -1) {
          av_log(NULL, AV_LOG_ERROR, "Can't create temporary pass2 file.\n");
          return -1;
@@@ -146,4 -145,3 +146,3 @@@ void ff_xvid_rate_control_uninit(MpegEn
  
      xvid_plugin_2pass2(s->rc_context.non_lavc_opaque, XVID_PLG_DESTROY, &xvid_plg_destroy, NULL);
  }
diff --combined libavcodec/mace.c
@@@ -2,20 -2,20 +2,20 @@@
   * MACE decoder
   * Copyright (c) 2002 Laszlo Torok <torokl@alpha.dfmk.hu>
   *
 - * 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
   */
  
@@@ -310,4 -310,3 +310,3 @@@ AVCodec ff_mace6_decoder = 
      .capabilities   = CODEC_CAP_DR1,
      .long_name = NULL_IF_CONFIG_SMALL("MACE (Macintosh Audio Compression/Expansion) 6:1"),
  };
diff --combined libavcodec/mathops.h
@@@ -3,20 -3,20 +3,20 @@@
   * Copyright (c) 2001, 2002 Fabrice Bellard
   * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> et al
   *
 - * 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
   */
  #ifndef AVCODEC_MATHOPS_H
@@@ -179,4 -179,3 +179,3 @@@ if ((y) < (x)) {
  #endif
  
  #endif /* AVCODEC_MATHOPS_H */
diff --combined libavcodec/mdec.c
@@@ -4,20 -4,20 +4,20 @@@
   *
   * based upon code from Sebastian Jedruszkiewicz <elf@frogger.rules.pl>
   *
 - * 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
   */
  
@@@ -219,7 -219,6 +219,7 @@@ static av_cold void mdec_common_init(AV
      a->mb_width   = (avctx->coded_width  + 15) / 16;
      a->mb_height  = (avctx->coded_height + 15) / 16;
  
 +    avcodec_get_frame_defaults(&a->picture);
      avctx->coded_frame= &a->picture;
      a->avctx= avctx;
  }
@@@ -245,15 -244,14 +245,15 @@@ static av_cold int decode_init_thread_c
      MDECContext * const a = avctx->priv_data;
      AVFrame *p = (AVFrame*)&a->picture;
  
 -    avctx->coded_frame = p;
 +    avctx->coded_frame= p;
      a->avctx= avctx;
  
 -    p->qscale_table = av_mallocz( a->mb_width);
 +    p->qscale_table= av_mallocz(a->mb_width);
  
      return 0;
  }
  
 +
  static av_cold int decode_end(AVCodecContext *avctx){
      MDECContext * const a = avctx->priv_data;
  
@@@ -278,4 -276,3 +278,3 @@@ AVCodec ff_mdec_decoder = 
      .long_name= NULL_IF_CONFIG_SMALL("Sony PlayStation MDEC (Motion DECoder)"),
      .init_thread_copy= ONLY_IF_THREADS_ENABLED(decode_init_thread_copy)
  };
diff --combined libavcodec/mlp_parser.h
@@@ -2,20 -2,20 +2,20 @@@
   * MLP parser prototypes
   * Copyright (c) 2007 Ian Caulfield
   *
 - * 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
   */
  
@@@ -54,9 -54,5 +54,8 @@@ typedef struct MLPHeaderInf
  
  
  int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb);
 +uint64_t ff_truehd_layout(int chanmap);
 +
 +extern const uint64_t ff_mlp_layout[32];
  
  #endif /* AVCODEC_MLP_PARSER_H */
diff --combined libavcodec/mpeg12.c
@@@ -3,20 -3,20 +3,20 @@@
   * Copyright (c) 2000, 2001 Fabrice Bellard
   * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
   *
 - * 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
   */
  
   * MPEG-1/2 decoder
   */
  
 +#define UNCHECKED_BITSTREAM_READER 1
 +
  //#define DEBUG
  #include "internal.h"
  #include "avcodec.h"
  #include "dsputil.h"
  #include "mpegvideo.h"
 +#include "libavutil/avassert.h"
  
  #include "mpeg12.h"
  #include "mpeg12data.h"
@@@ -959,7 -956,6 +959,7 @@@ static int mpeg_decode_mb(MpegEncContex
                          }
                      }
                  } else {
 +                    av_assert0(!s->progressive_sequence);
                      mb_type |= MB_TYPE_16x16 | MB_TYPE_INTERLACED;
                      for (i = 0; i < 2; i++) {
                          if (USES_LIST(mb_type, i)) {
                  }
                  break;
              case MT_DMV:
 +                if(s->progressive_sequence){
 +                    av_log(s->avctx, AV_LOG_ERROR, "MT_DMV in progressive_sequence\n");
 +                    return -1;
 +                }
                  s->mv_type = MV_TYPE_DMV;
                  for (i = 0; i < 2; i++) {
                      if (USES_LIST(mb_type, i)) {
@@@ -1179,61 -1171,31 +1179,61 @@@ static void quant_matrix_rebuild(uint16
      }
  }
  
 -static const enum PixelFormat pixfmt_xvmc_mpg2_420[] = {
 +static const enum PixelFormat mpeg1_hwaccel_pixfmt_list_420[] = {
 +#if CONFIG_MPEG_XVMC_DECODER
 +    PIX_FMT_XVMC_MPEG2_IDCT,
 +    PIX_FMT_XVMC_MPEG2_MC,
 +#endif
 +#if CONFIG_MPEG1_VDPAU_HWACCEL
 +    PIX_FMT_VDPAU_MPEG1,
 +#endif
 +    PIX_FMT_YUV420P,
 +    PIX_FMT_NONE
 +};
 +
 +static const enum PixelFormat mpeg2_hwaccel_pixfmt_list_420[] = {
 +#if CONFIG_MPEG_XVMC_DECODER
      PIX_FMT_XVMC_MPEG2_IDCT,
      PIX_FMT_XVMC_MPEG2_MC,
 -    PIX_FMT_NONE };
 +#endif
 +#if CONFIG_MPEG2_VDPAU_HWACCEL
 +    PIX_FMT_VDPAU_MPEG2,
 +#endif
 +#if CONFIG_MPEG2_DXVA2_HWACCEL
 +    PIX_FMT_DXVA2_VLD,
 +#endif
 +#if CONFIG_MPEG2_VAAPI_HWACCEL
 +    PIX_FMT_VAAPI_VLD,
 +#endif
 +    PIX_FMT_YUV420P,
 +    PIX_FMT_NONE
 +};
 +
 +static inline int uses_vdpau(AVCodecContext *avctx) {
 +    return avctx->pix_fmt == PIX_FMT_VDPAU_MPEG1 || avctx->pix_fmt == PIX_FMT_VDPAU_MPEG2;
 +}
  
  static enum PixelFormat mpeg_get_pixelformat(AVCodecContext *avctx)
  {
      Mpeg1Context *s1 = avctx->priv_data;
      MpegEncContext *s = &s1->mpeg_enc_ctx;
  
 -    if (avctx->xvmc_acceleration)
 -        return avctx->get_format(avctx, pixfmt_xvmc_mpg2_420);
 -    else if (avctx->codec->capabilities & CODEC_CAP_HWACCEL_VDPAU) {
 -        if (avctx->codec_id == CODEC_ID_MPEG1VIDEO)
 -            return PIX_FMT_VDPAU_MPEG1;
 -        else
 -            return PIX_FMT_VDPAU_MPEG2;
 -    } else {
 -        if (s->chroma_format <  2)
 -            return avctx->get_format(avctx, ff_hwaccel_pixfmt_list_420);
 -        else if (s->chroma_format == 2)
 -            return PIX_FMT_YUV422P;
 -        else
 -            return PIX_FMT_YUV444P;
 -    }
 +    if(s->chroma_format < 2) {
 +        enum PixelFormat res;
 +        res = avctx->get_format(avctx,
 +                                avctx->codec_id == CODEC_ID_MPEG1VIDEO ?
 +                                mpeg1_hwaccel_pixfmt_list_420 :
 +                                mpeg2_hwaccel_pixfmt_list_420);
 +        if (res != PIX_FMT_XVMC_MPEG2_IDCT && res != PIX_FMT_XVMC_MPEG2_MC) {
 +            avctx->xvmc_acceleration = 0;
 +        } else if (!avctx->xvmc_acceleration) {
 +            avctx->xvmc_acceleration = 2;
 +        }
 +        return res;
 +    } else if(s->chroma_format == 2)
 +        return PIX_FMT_YUV422P;
 +    else
 +        return PIX_FMT_YUV444P;
  }
  
  /* Call this function when we know all parameters.
@@@ -1327,7 -1289,8 +1327,7 @@@ static int mpeg_decode_postinit(AVCodec
          avctx->hwaccel = ff_find_hwaccel(avctx->codec->id, avctx->pix_fmt);
          // until then pix_fmt may be changed right after codec init
          if (avctx->pix_fmt == PIX_FMT_XVMC_MPEG2_IDCT ||
 -            avctx->hwaccel                            ||
 -            s->avctx->codec->capabilities & CODEC_CAP_HWACCEL_VDPAU)
 +            avctx->hwaccel )
              if (avctx->idct_algo == FF_IDCT_AUTO)
                  avctx->idct_algo = FF_IDCT_SIMPLE;
  
@@@ -1366,7 -1329,7 +1366,7 @@@ static int mpeg1_decode_picture(AVCodec
      if (s->pict_type == AV_PICTURE_TYPE_P || s->pict_type == AV_PICTURE_TYPE_B) {
          s->full_pel[0] = get_bits1(&s->gb);
          f_code = get_bits(&s->gb, 3);
 -        if (f_code == 0 && (avctx->err_recognition & AV_EF_BITSTREAM))
 +        if (f_code == 0 && (avctx->err_recognition & (AV_EF_BITSTREAM|AV_EF_COMPLIANT)))
              return -1;
          s->mpeg_f_code[0][0] = f_code;
          s->mpeg_f_code[0][1] = f_code;
      if (s->pict_type == AV_PICTURE_TYPE_B) {
          s->full_pel[1] = get_bits1(&s->gb);
          f_code = get_bits(&s->gb, 3);
 -        if (f_code == 0 && (avctx->err_recognition & AV_EF_BITSTREAM))
 +        if (f_code == 0 && (avctx->err_recognition & (AV_EF_BITSTREAM|AV_EF_COMPLIANT)))
              return -1;
          s->mpeg_f_code[1][0] = f_code;
          s->mpeg_f_code[1][1] = f_code;
@@@ -1561,6 -1524,7 +1561,6 @@@ static void mpeg_decode_picture_coding_
  
      if (s->progressive_sequence && !s->frame_pred_frame_dct) {
          av_log(s->avctx, AV_LOG_ERROR, "invalid frame_pred_frame_dct\n");
 -        s->frame_pred_frame_dct = 1;
      }
  
      if (s->picture_structure == PICT_FRAME) {
@@@ -1807,7 -1771,7 +1807,7 @@@ static int mpeg_decode_slice(MpegEncCon
                               && s->progressive_frame == 0 /* vbv_delay == 0xBBB || 0xE10*/;
  
                  if (left < 0 || (left && show_bits(&s->gb, FFMIN(left, 23)) && !is_d10)
 -                    || ((avctx->err_recognition & AV_EF_BUFFER) && left > 8)) {
 +                    || ((avctx->err_recognition & (AV_EF_BITSTREAM | AV_EF_AGGRESSIVE)) && left > 8)) {
                      av_log(avctx, AV_LOG_ERROR, "end mismatch left=%d %0X\n", left, show_bits(&s->gb, FFMIN(left, 23)));
                      return -1;
                  } else
@@@ -1941,7 -1905,7 +1941,7 @@@ static int slice_end(AVCodecContext *av
          ff_xvmc_field_end(s);
  
      /* end of slice reached */
 -    if (/*s->mb_y << field_pic == s->mb_height &&*/ !s->first_field) {
 +    if (/*s->mb_y << field_pic == s->mb_height &&*/ !s->first_field && !s->first_slice) {
          /* end of image */
  
          s->current_picture_ptr->f.qscale_type = FF_QSCALE_TYPE_MPEG2;
@@@ -1987,7 -1951,7 +1987,7 @@@ static int mpeg1_decode_sequence(AVCode
      s->aspect_ratio_info = get_bits(&s->gb, 4);
      if (s->aspect_ratio_info == 0) {
          av_log(avctx, AV_LOG_ERROR, "aspect ratio has forbidden 0 value\n");
 -        if (avctx->err_recognition & AV_EF_BITSTREAM)
 +        if (avctx->err_recognition & (AV_EF_BITSTREAM | AV_EF_COMPLIANT))
              return -1;
      }
      s->frame_rate_index = get_bits(&s->gb, 4);
      s->progressive_sequence = 1;
      s->progressive_frame    = 1;
      s->picture_structure    = PICT_FRAME;
 +    s->first_field          = 0;
      s->frame_pred_frame_dct = 1;
      s->chroma_format        = 1;
      s->codec_id             = s->avctx->codec_id = CODEC_ID_MPEG1VIDEO;
@@@ -2069,12 -2032,15 +2069,12 @@@ static int vcr2_init_sequence(AVCodecCo
      avctx->pix_fmt = mpeg_get_pixelformat(avctx);
      avctx->hwaccel = ff_find_hwaccel(avctx->codec->id, avctx->pix_fmt);
  
 -    if (avctx->pix_fmt == PIX_FMT_XVMC_MPEG2_IDCT || avctx->hwaccel ||
 -        s->avctx->codec->capabilities & CODEC_CAP_HWACCEL_VDPAU)
 +    if( avctx->pix_fmt == PIX_FMT_XVMC_MPEG2_IDCT || avctx->hwaccel )
          if (avctx->idct_algo == FF_IDCT_AUTO)
              avctx->idct_algo = FF_IDCT_SIMPLE;
  
      if (MPV_common_init(s) < 0)
          return -1;
 -    exchange_uv(s); // common init reset pblocks, so we swap them here
 -    s->swap_uv = 1; // in case of xvmc we need to swap uv for each MB
      s1->mpeg_enc_ctx_allocated = 1;
  
      for (i = 0; i < 64; i++) {
      s->progressive_sequence  = 1;
      s->progressive_frame     = 1;
      s->picture_structure     = PICT_FRAME;
 +    s->first_field           = 0;
      s->frame_pred_frame_dct  = 1;
      s->chroma_format         = 1;
 -    s->codec_id              = s->avctx->codec_id = CODEC_ID_MPEG2VIDEO;
 -    avctx->sub_id            = 2; /* indicates MPEG-2 */
 +    if (s->codec_tag == AV_RL32("BW10")) {
 +        s->codec_id              = s->avctx->codec_id = CODEC_ID_MPEG1VIDEO;
 +        avctx->sub_id            = 1; /* indicates MPEG-1 */
 +    } else {
 +        exchange_uv(s); // common init reset pblocks, so we swap them here
 +        s->swap_uv = 1; // in case of xvmc we need to swap uv for each MB
 +        s->codec_id              = s->avctx->codec_id = CODEC_ID_MPEG2VIDEO;
 +        avctx->sub_id            = 2; /* indicates MPEG-2 */
 +    }
      s1->save_width           = s->width;
      s1->save_height          = s->height;
      s1->save_progressive_seq = s->progressive_sequence;
  static void mpeg_decode_user_data(AVCodecContext *avctx,
                                    const uint8_t *p, int buf_size)
  {
 +    Mpeg1Context *s = avctx->priv_data;
      const uint8_t *buf_end = p + buf_size;
  
 +    if(buf_size > 29){
 +        int i;
 +        for(i=0; i<20; i++)
 +            if(!memcmp(p+i, "\0TMPGEXS\0", 9)){
 +                s->tmpgexs= 1;
 +            }
 +
 +/*        for(i=0; !(!p[i-2] && !p[i-1] && p[i]==1) && i<buf_size; i++){
 +            av_log(0,0, "%c", p[i]);
 +        }
 +            av_log(0,0, "\n");*/
 +    }
 +
      /* we parse the DTG active format information */
      if (buf_end - p >= 5 &&
          p[0] == 'D' && p[1] == 'T' && p[2] == 'G' && p[3] == '1') {
@@@ -2151,30 -2095,31 +2151,30 @@@ static void mpeg_decode_gop(AVCodecCont
  {
      Mpeg1Context *s1  = avctx->priv_data;
      MpegEncContext *s = &s1->mpeg_enc_ctx;
 -
 -    int time_code_hours, time_code_minutes;
 -    int time_code_seconds, time_code_pictures;
      int broken_link;
 +    int64_t tc;
  
      init_get_bits(&s->gb, buf, buf_size*8);
  
 -    skip_bits1(&s->gb); /* drop_frame_flag */
 -
 -    time_code_hours   = get_bits(&s->gb, 5);
 -    time_code_minutes = get_bits(&s->gb, 6);
 -    skip_bits1(&s->gb); // marker bit
 -    time_code_seconds  = get_bits(&s->gb, 6);
 -    time_code_pictures = get_bits(&s->gb, 6);
 +    tc = avctx->timecode_frame_start = get_bits(&s->gb, 25);
  
 -    s1->closed_gop = get_bits1(&s->gb);
 +    s->closed_gop = get_bits1(&s->gb);
      /*broken_link indicate that after editing the
        reference frames of the first B-Frames after GOP I-Frame
        are missing (open gop)*/
      broken_link = get_bits1(&s->gb);
  
 -    if (s->avctx->debug & FF_DEBUG_PICT_INFO)
 -        av_log(s->avctx, AV_LOG_DEBUG, "GOP (%2d:%02d:%02d.[%02d]) closed_gop=%d broken_link=%d\n",
 +    if (s->avctx->debug & FF_DEBUG_PICT_INFO) {
 +        int time_code_hours    = tc>>19 & 0x1f;
 +        int time_code_minutes  = tc>>13 & 0x3f;
 +        int time_code_seconds  = tc>>6  & 0x3f;
 +        int drop_frame_flag    = tc     & 1<<24;
 +        int time_code_pictures = tc     & 0x3f;
 +        av_log(s->avctx, AV_LOG_DEBUG, "GOP (%02d:%02d:%02d%c%02d) closed_gop=%d broken_link=%d\n",
                 time_code_hours, time_code_minutes, time_code_seconds,
 -               time_code_pictures, s1->closed_gop, broken_link);
 +               drop_frame_flag ? ';' : ':',
 +               time_code_pictures, s->closed_gop, broken_link);
 +    }
  }
  /**
   * Find the end of the current frame in the bitstream.
@@@ -2216,7 -2161,6 +2216,7 @@@ int ff_mpeg1_find_frame_end(ParseContex
                  pc->frame_start_found = 4;
              }
              if (state == SEQ_END_CODE) {
 +                pc->frame_start_found = 0;
                  pc->state=-1;
                  return i+1;
              }
@@@ -2274,10 -2218,7 +2274,10 @@@ static int mpeg_decode_frame(AVCodecCon
              return buf_size;
      }
  
 -    if (s->mpeg_enc_ctx_allocated == 0 && avctx->codec_tag == AV_RL32("VCR2"))
 +    s2->codec_tag = avpriv_toupper4(avctx->codec_tag);
 +    if (s->mpeg_enc_ctx_allocated == 0 && (   s2->codec_tag == AV_RL32("VCR2")
 +                                           || s2->codec_tag == AV_RL32("BW10")
 +                                          ))
          vcr2_init_sequence(avctx);
  
      s->slice_count = 0;
@@@ -2310,17 -2251,15 +2310,17 @@@ static int decode_chunks(AVCodecContex
              if (s2->pict_type != AV_PICTURE_TYPE_B || avctx->skip_frame <= AVDISCARD_DEFAULT) {
                  if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_SLICE)) {
                      int i;
 +                    av_assert0(avctx->thread_count > 1);
  
                      avctx->execute(avctx, slice_decode_thread,  &s2->thread_context[0], NULL, s->slice_count, sizeof(void*));
                      for (i = 0; i < s->slice_count; i++)
                          s2->error_count += s2->thread_context[i]->error_count;
                  }
  
 -                if (CONFIG_MPEG_VDPAU_DECODER && avctx->codec->capabilities & CODEC_CAP_HWACCEL_VDPAU)
 +                if (CONFIG_VDPAU && uses_vdpau(avctx))
                      ff_vdpau_mpeg_picture_complete(s2, buf, buf_size, s->slice_count);
  
 +
                  if (slice_end(avctx, picture)) {
                      if (s2->last_picture_ptr || s2->low_delay) //FIXME merge with the stuff in mpeg_decode_slice
                          *data_size = sizeof(AVPicture);
          case SEQ_START_CODE:
              if (last_code == 0) {
                  mpeg1_decode_sequence(avctx, buf_ptr, input_size);
 -                s->sync=1;
 +                if(buf != avctx->extradata)
 +                    s->sync=1;
              } else {
                  av_log(avctx, AV_LOG_ERROR, "ignoring SEQ_START_CODE after %X\n", last_code);
                  if (avctx->err_recognition & AV_EF_EXPLODE)
              break;
  
          case PICTURE_START_CODE:
 +            if(s->tmpgexs){
 +                s2->intra_dc_precision= 3;
 +                s2->intra_matrix[0]= 1;
 +            }
              if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_SLICE) && s->slice_count) {
                  int i;
  
                  if (s2->last_picture_ptr == NULL) {
                  /* Skip B-frames if we do not have reference frames and gop is not closed */
                      if (s2->pict_type == AV_PICTURE_TYPE_B) {
 -                        if (!s->closed_gop)
 +                        if (!s2->closed_gop)
                              break;
                      }
                  }
 -                if (s2->pict_type == AV_PICTURE_TYPE_I)
 +                if (s2->pict_type == AV_PICTURE_TYPE_I || (s2->flags2 & CODEC_FLAG2_SHOW_ALL))
                      s->sync=1;
                  if (s2->next_picture_ptr == NULL) {
                  /* Skip P-frames if we do not have a reference frame or we have an invalid header. */
                      return AVERROR_INVALIDDATA;
                  }
  
 -                if (avctx->codec->capabilities & CODEC_CAP_HWACCEL_VDPAU) {
 +                if (uses_vdpau(avctx)) {
                      s->slice_count++;
                      break;
                  }
                      int threshold = (s2->mb_height * s->slice_count +
                                       s2->slice_context_count / 2) /
                                      s2->slice_context_count;
 +                    av_assert0(avctx->thread_count > 1);
                      if (threshold <= mb_y) {
                          MpegEncContext *thread_context = s2->thread_context[s->slice_count];
  
@@@ -2535,6 -2468,7 +2535,6 @@@ static void flush(AVCodecContext *avctx
      Mpeg1Context *s = avctx->priv_data;
  
      s->sync=0;
 -    s->closed_gop = 0;
  
      ff_mpeg_flush(avctx);
  }
@@@ -2591,21 -2525,6 +2591,21 @@@ AVCodec ff_mpeg2video_decoder = 
      .profiles       = NULL_IF_CONFIG_SMALL(mpeg2_video_profiles),
  };
  
 +//legacy decoder
 +AVCodec ff_mpegvideo_decoder = {
 +    .name           = "mpegvideo",
 +    .type           = AVMEDIA_TYPE_VIDEO,
 +    .id             = CODEC_ID_MPEG2VIDEO,
 +    .priv_data_size = sizeof(Mpeg1Context),
 +    .init           = mpeg_decode_init,
 +    .close          = mpeg_decode_end,
 +    .decode         = mpeg_decode_frame,
 +    .capabilities   = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS,
 +    .flush          = flush,
 +    .max_lowres     = 3,
 +    .long_name      = NULL_IF_CONFIG_SMALL("MPEG-1 video"),
 +};
 +
  #if CONFIG_MPEG_XVMC_DECODER
  static av_cold int mpeg_mc_decode_init(AVCodecContext *avctx)
  {
@@@ -2668,4 -2587,3 +2668,3 @@@ AVCodec ff_mpeg1_vdpau_decoder = 
      .long_name      = NULL_IF_CONFIG_SMALL("MPEG-1 video (VDPAU acceleration)"),
  };
  #endif
diff --combined libavcodec/mpeg4video.c
@@@ -3,20 -3,20 +3,20 @@@
   * Copyright (c) 2000,2001 Fabrice Bellard
   * Copyright (c) 2002-2010 Michael Niedermayer <michaelni@gmx.at>
   *
 - * 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
   */
  
@@@ -168,4 -168,3 +168,3 @@@ int ff_mpeg4_set_direct_mv(MpegEncConte
          return MB_TYPE_DIRECT2 | MB_TYPE_16x16 | MB_TYPE_L0L1; //Note see prev line
      }
  }
diff --combined libavcodec/msrledec.c
@@@ -2,20 -2,20 +2,20 @@@
   * Microsoft RLE decoder
   * Copyright (C) 2008 Konstantin Shishkov
   *
 - * 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
   */
  
@@@ -140,7 -140,7 +140,7 @@@ static int msrle_decode_8_16_24_32(AVCo
  
      output     = pic->data[0] + (avctx->height - 1) * pic->linesize[0];
      output_end = pic->data[0] +  avctx->height      * pic->linesize[0];
 -    while(src < data + srcsize) {
 +    while(src + 1 < data + srcsize) {
          p1 = *src++;
          if(p1 == 0) { //Escape code
              p2 = *src++;
                  src += p2 * (depth >> 3);
                  continue;
              }
 +            if(data + srcsize - src < p2 * (depth >> 3)){
 +                av_log(avctx, AV_LOG_ERROR, "Copy beyond input buffer\n");
 +                return -1;
 +            }
              if ((depth == 8) || (depth == 24)) {
                  for(i = 0; i < p2 * (depth >> 3); i++) {
                      *output++ = *src++;
@@@ -260,4 -256,3 +260,3 @@@ int ff_msrle_decode(AVCodecContext *avc
          return -1;
      }
  }
diff --combined libavcodec/msrledec.h
@@@ -2,20 -2,20 +2,20 @@@
   * Microsoft RLE decoder
   * Copyright (C) 2008 Konstantin Shishkov
   *
 - * 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,4 -37,3 +37,3 @@@ int ff_msrle_decode(AVCodecContext *avc
                      const uint8_t* data, int data_size);
  
  #endif /* AVCODEC_MSRLEDEC_H */
@@@ -154,7 -154,6 +154,7 @@@ static int decode_tag(AVCodecContext *a
                        int *got_frame_ptr, AVPacket *avpkt)
  {
      const uint8_t *buf = avpkt->data;
 +    const uint8_t *side=av_packet_get_side_data(avpkt, 'F', NULL);
      int buf_size = avpkt->size;
      NellyMoserDecodeContext *s = avctx->priv_data;
      int blocks, i, ret;
      float   *samples_flt;
  
      blocks     = buf_size / NELLY_BLOCK_LEN;
 +
      if (blocks <= 0) {
          av_log(avctx, AV_LOG_ERROR, "Packet is too small\n");
          return AVERROR_INVALIDDATA;
      }
 +
      if (buf_size % NELLY_BLOCK_LEN) {
          av_log(avctx, AV_LOG_WARNING, "Leftover bytes: %d.\n",
                 buf_size % NELLY_BLOCK_LEN);
       * 22050 Hz - 4
       * 44100 Hz - 8
       */
 +    if(side && blocks>1 && avctx->sample_rate%11025==0 && (1<<((side[0]>>2)&3)) == blocks)
 +        avctx->sample_rate= 11025*(blocks/2);
  
      /* get output buffer */
      s->frame.nb_samples = NELLY_SAMPLES * blocks;
@@@ -232,4 -227,3 +232,3 @@@ AVCodec ff_nellymoser_decoder = 
                                                        AV_SAMPLE_FMT_S16,
                                                        AV_SAMPLE_FMT_NONE },
  };
diff --combined libavcodec/nuv.c
@@@ -2,25 -2,24 +2,25 @@@
   * NuppelVideo decoder
   * Copyright (c) 2006 Reimar Doeffinger
   *
 - * 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
   */
  #include <stdio.h>
  #include <stdlib.h>
 +#include <limits.h>
  
  #include "libavutil/bswap.h"
  #include "libavutil/lzo.h"
@@@ -113,23 -112,19 +113,23 @@@ static int codec_reinit(AVCodecContext 
      if (quality >= 0)
          get_quant_quality(c, quality);
      if (width != c->width || height != c->height) {
 -        if (av_image_check_size(height, width, 0, avctx) < 0)
 -            return 0;
 +        // also reserve space for a possible additional header
 +        int buf_size = 24 + height * width * 3 / 2 + AV_LZO_OUTPUT_PADDING;
 +        if (av_image_check_size(height, width, 0, avctx) < 0 ||
 +            buf_size > INT_MAX/8)
 +            return -1;
          avctx->width = c->width = width;
          avctx->height = c->height = height;
 -        av_fast_malloc(&c->decomp_buf, &c->decomp_size, c->height * c->width * 3 / 2);
 +        av_fast_malloc(&c->decomp_buf, &c->decomp_size, buf_size);
          if (!c->decomp_buf) {
              av_log(avctx, AV_LOG_ERROR, "Can't allocate decompression buffer.\n");
 -            return 0;
 +            return AVERROR(ENOMEM);
          }
          rtjpeg_decode_init(&c->rtj, &c->dsp, c->width, c->height, c->lq, c->cq);
 +        return 1;
      } else if (quality != c->quality)
          rtjpeg_decode_init(&c->rtj, &c->dsp, c->width, c->height, c->lq, c->cq);
 -    return 1;
 +    return 0;
  }
  
  static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
      AVFrame *picture = data;
      int orig_size = buf_size;
      int keyframe;
 +    int size_change = 0;
      int result;
      enum {NUV_UNCOMPRESSED = '0', NUV_RTJPEG = '1',
            NUV_RTJPEG_IN_LZO = '2', NUV_LZO = '3',
          default:
              keyframe = 1; break;
      }
 +retry:
      // skip rest of the frameheader.
      buf = &buf[12];
      buf_size -= 12;
      if (comptype == NUV_RTJPEG_IN_LZO || comptype == NUV_LZO) {
 -        int outlen = c->decomp_size, inlen = buf_size;
 +        int outlen = c->decomp_size - AV_LZO_OUTPUT_PADDING, inlen = buf_size;
          if (av_lzo1x_decode(c->decomp_buf, &outlen, buf, &inlen))
              av_log(avctx, AV_LOG_ERROR, "error during lzo decompression\n");
          buf = c->decomp_buf;
 -        buf_size = c->decomp_size;
 +        buf_size = c->decomp_size - AV_LZO_OUTPUT_PADDING - outlen;
      }
      if (c->codec_frameheader) {
 -        int w, h, q;
 +        int w, h, q, res;
          if (buf[0] != 'V' || buf_size < 12) {
              av_log(avctx, AV_LOG_ERROR, "invalid nuv video frame (wrong codec_tag?)\n");
              return AVERROR_INVALIDDATA;
          w = AV_RL16(&buf[6]);
          h = AV_RL16(&buf[8]);
          q = buf[10];
 -        if (!codec_reinit(avctx, w, h, q))
 -            return -1;
 +        res = codec_reinit(avctx, w, h, q);
 +        if (res < 0)
 +            return res;
 +        if (res) {
 +            buf = avpkt->data;
 +            buf_size = avpkt->size;
 +            size_change = 1;
 +            goto retry;
 +        }
          buf = &buf[12];
          buf_size -= 12;
      }
  
 -    if (keyframe && c->pic.data[0])
 +    if ((size_change || keyframe) && c->pic.data[0])
          avctx->release_buffer(avctx, &c->pic);
      c->pic.reference = 3;
      c->pic.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_READABLE |
@@@ -273,7 -259,7 +273,7 @@@ static av_cold int decode_init(AVCodecC
      if (avctx->extradata_size)
          get_quant(avctx, c, avctx->extradata, avctx->extradata_size);
      dsputil_init(&c->dsp, avctx);
 -    if (!codec_reinit(avctx, avctx->width, avctx->height, -1))
 +    if (codec_reinit(avctx, avctx->width, avctx->height, -1) < 0)
          return 1;
      return 0;
  }
@@@ -297,4 -283,3 +297,3 @@@ AVCodec ff_nuv_decoder = 
      .capabilities   = CODEC_CAP_DR1,
      .long_name = NULL_IF_CONFIG_SMALL("NuppelVideo/RTJPEG"),
  };
@@@ -3,20 -3,20 +3,20 @@@
   *
   * Copyright (c) 2010 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
   *
 - * 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,4 -37,3 +37,3 @@@ int main(void
  
      return 0;
  }
diff --combined libavcodec/psymodel.c
@@@ -2,20 -2,20 +2,20 @@@
   * audio encoder psychoacoustic model
   * Copyright (C) 2008 Konstantin Shishkov
   *
 - * 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
   */
  
@@@ -134,4 -134,3 +134,3 @@@ av_cold void ff_psy_preprocess_end(stru
      av_freep(&ctx->fstate);
      av_free(ctx);
  }
diff --combined libavcodec/qtrle.c
@@@ -2,20 -2,20 +2,20 @@@
   * Quicktime Animation (RLE) Video Decoder
   * Copyright (C) 2004 the ffmpeg project
   *
 - * 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
   */
  
@@@ -72,15 -72,6 +72,15 @@@ static void qtrle_decode_1bpp(QtrleCont
      unsigned char *rgb = s->frame.data[0];
      int pixel_limit = s->frame.linesize[0] * s->avctx->height;
      int skip;
 +    /*&nb