Merge commit 'a8068346e48e123f8d3bdf4d64464d81e53e5fc7'
authorDerek Buitenhuis <derek.buitenhuis@gmail.com>
Thu, 31 Mar 2016 20:19:49 +0000 (21:19 +0100)
committerDerek Buitenhuis <derek.buitenhuis@gmail.com>
Thu, 31 Mar 2016 20:20:02 +0000 (21:20 +0100)
* commit 'a8068346e48e123f8d3bdf4d64464d81e53e5fc7':
  lavc: add a variant of av_get_audio_frame_duration working with AVCodecParameters

Fixes from jamrial incorporated.

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
1  2 
doc/APIchanges
libavcodec/avcodec.h
libavcodec/utils.c

diff --combined doc/APIchanges
index 32969ed2eeba36b0ad59d43b5add195246227862,70fce18d39534de4c50c2bcfde89765ac7dbd402..8363b05b75aa562c8c1154a9f73141548230696a
@@@ -1,5 -1,5 +1,5 @@@
  Never assume the API of libav* to be stable unless at least 1 month has passed
 -since the last major version increase.
 +since the last major version increase or the API was added.
  
  The last version increases were:
  libavcodec:    2015-08-28
@@@ -7,67 -7,29 +7,68 @@@ libavdevice:   2015-08-2
  libavfilter:   2015-08-28
  libavformat:   2015-08-28
  libavresample: 2015-08-28
 +libpostproc:   2015-08-28
 +libswresample: 2015-08-28
  libswscale:    2015-08-28
  libavutil:     2015-08-28
  
  
  API changes, most recent first:
  
 -2016-xx-xx - lavc 57.14.0 - avcodec.h
 +2016-xx-xx - lavc 57.33.0 - avcodec.h
    xxxxxxx - Add AVCodecParameters and its related API.
+   xxxxxxx - Add av_get_audio_frame_duration2().
  
 -2016-xx-xx - xxxxxxx - lavf 57.4.0 - avformat.h
 -  Add AVFormatContext.protocol_whitelist and protocol_blacklist.
 -  Add 'protocol_whitelist' and 'protocol_blacklist' private options for
 -  avio_open2().
 -
 -2016-xx-xx - lavc 57.13.0 - avcodec.h
 +2016-03-11 - xxxxxxx - lavf/lavc 57.28.101
 +  Add requirement to bitstream filtering API that returned packets with
 +  size == 0 and side_data_elems == 0 are to be skipped by the caller.
 +
 +2016-XX-XX - xxxxxxx - lavf 57.28.100
 +  Add protocol blacklisting API
 +
 +2016-02-28 - xxxxxxx - lavc 57.27.101
 +  Validate AVFrame returned by get_buffer2 to have required
 +  planes not NULL and unused planes set to NULL as crashes
 +  and buffer overflow are possible with certain streams if
 +  that is not the case.
 +
 +2016-xx-xx - xxxxxxx - lavc 57.27.100 - avcodec.h
 +  "flags2" decoding option now allows the flag "ass_ro_flush_noop" preventing
 +  the reset of the ASS ReadOrder field on flush. This affects the content of
 +  AVSubtitles.rects[N]->ass when "sub_text_format" is set to "ass" (see
 +  previous entry).
 +
 +2016-xx-xx - xxxxxxx - lavc 57.26.100 - avcodec.h
 +  Add a "sub_text_format" subtitles decoding option allowing the values "ass"
 +  (recommended) and "ass_with_timings" (not recommended, deprecated, default).
 +  The default value for this option will change to "ass" at the next major
 +  libavcodec version bump.
 +
 +  The current default is "ass_with_timings" for compatibility. This means that
 +  all subtitles text decoders currently still output ASS with timings printed
 +  as strings in the AVSubtitles.rects[N]->ass fields.
 +
 +  Setting "sub_text_format" to "ass" allows a better timing accuracy (ASS
 +  timing is limited to a 1/100 time base, so this is relevant for any subtitles
 +  format needing a bigger one), ease timing adjustments, and prevents the need
 +  of removing the timing from the decoded string yourself. This form is also
 +  known as "the Matroska form". The timing information (start time, duration)
 +  can be found in the AVSubtitles fields.
 +
 +2016-xx-xx - lavc 57.25.0 - avcodec.h
    Add AVCodecContext.hw_frames_ctx.
  
 -2016-xx-xx - lavfi 6.2.0 - avfilter.h
 +2016-xx-xx - lavfi 6.36.0 - avfilter.h
    xxxxxxx avfilter.h - Add AVFilterLink.hw_frames_ctx.
    xxxxxxx buffersrc.h - Add AVBufferSrcParameters and functions for handling it.
  
 -2016-xx-xx - lavu 55.6.0
 +2016-02-xx - xxxxxxx - lavc 57.25.100
 +  Add AV_PKT_DATA_MPEGTS_STREAM_ID for exporting the MPEGTS stream ID.
 +
 +2016-xx-xx - lavu 55.18.100
 +  xxxxxxx audio_fifo.h - Add av_audio_fifo_peek_at().
 +
 +2016-xx-xx - lavu 55.18.0
    xxxxxxx buffer.h - Add av_buffer_pool_init2().
    xxxxxxx hwcontext.h - Add a new installed header hwcontext.h with a new API
                          for handling hwaccel frames.
                                VDPAU-specific hwcontext definitions.
    xxxxxxx pixfmt.h - Add AV_PIX_FMT_CUDA.
  
 -2016-xx-xx - xxxxxxx - lavf 57.3.0 - avformat.h
 +-------- 8< --------- FFmpeg 3.0 was cut here -------- 8< ---------
 +
 +2016-02-10 - bc9a596 / 9f61abc - lavf 57.25.100 / 57.3.0 - avformat.h
    Add AVFormatContext.opaque, io_open and io_close, allowing custom IO
 -  for muxers and demuxers that open additional files.
  
 -2015-xx-xx - xxxxxxx - lavc 57.12.0 - avcodec.h
 +2016-02-01 - 1dba837 - lavf 57.24.100 - avformat.h, avio.h
 +  Add protocol_whitelist to AVFormatContext, AVIOContext
 +
 +2016-01-31 - 66e9d2f - lavu 55.17.100 - frame.h
 +  Add AV_FRAME_DATA_GOP_TIMECODE for exporting MPEG1/2 GOP timecodes.
 +
 +2016-01-01 - 5e8b053 / 2c68113 - lavc 57.21.100 / 57.12.0 - avcodec.h
    Add AVCodecDescriptor.profiles and avcodec_profile_name().
  
 -2015-xx-xx - xxxxxxx - lavc 57.11.0 - avcodec.h dirac.h
 +2015-12-28 - 1f9139b - lavf 57.21.100 - avformat.h
 +  Add automatic bitstream filtering; add av_apply_bitstream_filters()
 +
 +2015-12-22 - 39a09e9 - lavfi 6.21.101 - avfilter.h
 +  Deprecate avfilter_link_set_closed().
 +  Applications are not supposed to mess with links,
 +  they should close the sinks.
 +
 +2015-12-17 - lavc 57.18.100 / 57.11.0 - avcodec.h dirac.h
    xxxxxxx - Add av_packet_add_side_data().
    xxxxxxx - Add AVCodecContext.coded_side_data.
    xxxxxxx - Add AVCPBProperties API.
    xxxxxxx - Add a new public header dirac.h containing
              av_dirac_parse_sequence_header()
  
 -2015-xx-xx - xxxxxxx - lavc 57.9.1 - avcodec.h
 +2015-12-11 - 676a93f - lavf 57.20.100 - avformat.h
 +  Add av_program_add_stream_index()
 +
 +2015-11-29 - 93fb4a4 - lavc 57.16.101 - avcodec.h
    Deprecate rtp_callback without replacement, i.e. it won't be possible to
    get image slices before the full frame is encoded any more. The libavformat
    rtpenc muxer can still be used for RFC-2190 packetization.
  
 -2015-11-xx - xxxxxxx - lavc 57.9.0 - avcodec.h
 +2015-11-22 - fe20e34 - lavc 57.16.100 - avcodec.h
    Add AV_PKT_DATA_FALLBACK_TRACK for making fallback associations between
    streams.
  
 -2015-11-xx - xxxxxxx - lavf 57.1.0 - avformat.h
 +2015-11-22 - ad317c9 - lavf 57.19.100 - avformat.h
    Add av_stream_new_side_data().
  
 -2015-11-xx - xxxxxxx - lavu 55.3.0 - xtea.h
 +2015-11-22 - e12f403 - lavu 55.8.100 - xtea.h
      Add av_xtea_le_init and av_xtea_le_crypt
  
 -2015-11-xx - xxxxxxx - lavfi 6.1.0 - avfilter.h
 -    Add a frame_rate field to AVFilterLink
 +2015-11-18 - lavu 55.7.100 - mem.h
 +  Add av_fast_mallocz()
  
 -2015-xx-xx - xxxxxxx - lavc 57.6.0 - avcodec.h
 -
 -2015-xx-xx - lavc 57.7.0 - avcodec.h
 +2015-10-29 - lavc 57.12.100 / 57.8.0 - avcodec.h
    xxxxxx - Deprecate av_free_packet(). Use av_packet_unref() as replacement,
             it resets the packet in a more consistent way.
    xxxxxx - Deprecate av_dup_packet(), it is a no-op for most cases.
    xxxxxx - Add av_packet_alloc(), av_packet_clone(), av_packet_free().
             They match the AVFrame functions with the same name.
  
 -2015-xx-xx - xxxxxxx - lavc 57.5.0 - avcodec.h
 +2015-10-27 - 1e477a9 - lavu 55.5.100 - cpu.h
 +  Add AV_CPU_FLAG_AESNI.
 +
 +2015-10-22 - ee573b4 / a17a766 - lavc 57.9.100 / 57.5.0 - avcodec.h
    Add data and linesize array to AVSubtitleRect, to be used instead of
    the ones from the embedded AVPicture.
  
 -2015-xx-xx - xxxxxxx - lavc 57.0.0 - qsv.h
 +2015-10-22 - 866a417 / dc923bc - lavc 57.8.100 / 57.0.0 - qsv.h
    Add an API for allocating opaque surfaces.
  
 -2015-xx-xx - xxxxxxx - lavu 55.2.0 - dict.h
 +2015-10-15 - 2c2d162 - lavf 57.4.100
 +  Remove the latm demuxer that was a duplicate of the loas demuxer.
 +
 +2015-10-14 - b994788 / 11c5f43 - lavu 55.4.100 / 55.2.0 - dict.h
    Change return type of av_dict_copy() from void to int, so that a proper
    error code can be reported.
  
 -2015-09-29 - 948f3c1 - lavc 57.0.0 - avcodec.h
 +2015-09-29 - b01891a / 948f3c1 - lavc 57.3.100 / 57.2.0 - avcodec.h
    Change type of AVPacket.duration from int to int64_t.
  
 -2015-09-18 - e3d4784 - lavc 57.2.0 - d3d11va.h
 +2015-09-17 - 7c46f24 / e3d4784 - lavc 57.3.100 / 57.2.0 - d3d11va.h
    Add av_d3d11va_alloc_context(). This function must from now on be used for
    allocating AVD3D11VAContext.
  
 -2015-09-07 - lavu 55.0.0
 -  b8b5d82 - Change type of AVPixFmtDescriptor.flags from uint8_t to uint64_t.
 -  6b3ef7f - Change type of AVComponentDescriptor fields from uint16_t to int
 +2015-09-15 - lavf 57.2.100 - avformat.h
 +  probesize and max_analyze_duration switched to 64bit, both
 +  are only accessible through AVOptions
 +
 +2015-09-15 - lavf 57.1.100 - avformat.h
 +  bit_rate was changed to 64bit, make sure you update any
 +  printf() or other type sensitive code
 +
 +2015-09-15 - lavc 57.2.100 - avcodec.h
 +  bit_rate/rc_max_rate/rc_min_rate were changed to 64bit, make sure you update
 +  any printf() or other type sensitive code
 +
 +2015-09-07 - lavu 55.0.100 / 55.0.0
 +  c734b34 / b8b5d82 - Change type of AVPixFmtDescriptor.flags from uint8_t to uint64_t.
 +  f53569a / 6b3ef7f - Change type of AVComponentDescriptor fields from uint16_t to int
              and drop bit packing.
 -  2268db2 - Add step, offset, and depth to AVComponentDescriptor to replace
 +  151aa2e / 2268db2 - Add step, offset, and depth to AVComponentDescriptor to replace
              the deprecated step_minus1, offset_plus1, and depth_minus1.
  
 -2015-07-31 - lavu 54.17.0
 -  7a7df34 - Add av_blowfish_alloc().
 -  ae36545 - Add av_rc4_alloc().
 -  5d8bea3 - Add av_xtea_alloc().
 -  d9e8b47 - Add av_des_alloc().
 +-------- 8< --------- FFmpeg 2.8 was cut here -------- 8< ---------
 +
 +2015-08-27 - 1dd854e1 - lavc 56.58.100 - vaapi.h
 +  Deprecate old VA-API context (vaapi_context) fields that were only
 +  set and used by libavcodec. They are all managed internally now.
 +
 +2015-08-19 - 9f8e57ef - lavu 54.31.100 - pixfmt.h
 +  Add a unique pixel format for VA-API (AV_PIX_FMT_VAAPI) that
 +  indicates the nature of the underlying storage: a VA surface. This
 +  yields the same value as AV_PIX_FMT_VAAPI_VLD.
 +  Deprecate old VA-API related pixel formats: AV_PIX_FMT_VAAPI_MOCO,
 +  AV_PIX_FMT_VAAPI_IDCT, AV_PIX_FMT_VAAPI_VLD.
  
 -2015-07-29 - 7e38340 - lavu 54.16.0 - hmac.h
 -  Add AV_HMAC_SHA224 and AV_HMAC_SHA256.
 +2015-08-02 - lavu 54.30.100 / 54.17.0
 +  9ed59f1 / 7a7df34c -  Add av_blowfish_alloc().
 +  a130ec9 / ae365453 -  Add av_rc4_alloc().
 +  9ca1997 / 5d8bea3b -  Add av_xtea_alloc().
 +  3cf08e9 / d9e8b47e -  Add av_des_alloc().
  
 -2015-07-27 - lavc 56.35.0 - avcodec.h
 -  7c6eb0a - Rename CODEC_FLAG* defines to AV_CODEC_FLAG*.
 -  def9785 - Rename CODEC_CAP_* defines to AV_CODEC_CAP_*.
 -  059a934 - Rename FF_INPUT_BUFFER_PADDING_SIZE and FF_MIN_BUFFER_SIZE
 -            to AV_INPUT_BUFFER_PADDING_SIZE and AV_INPUT_BUFFER_MIN_SIZE.
 +2015-07-27 - lavc 56.56.100 / 56.35.0 - avcodec.h
 +  94d68a4 / 7c6eb0a1 - Rename CODEC_FLAG* defines to AV_CODEC_FLAG*.
 +  444e987 / def97856 - Rename CODEC_CAP_* defines to AV_CODEC_CAP_*.
 +  29d147c / 059a9348 - Rename FF_INPUT_BUFFER_PADDING_SIZE and FF_MIN_BUFFER_SIZE
 +              to AV_INPUT_BUFFER_PADDING_SIZE and AV_INPUT_BUFFER_MIN_SIZE.
  
 -2015-07-20 - 5d3addb - lavc 56.33.0 - avcodec.h
 -  Add AV_PKT_DATA_QUALITY_FACTOR to export the quality value of an AVPacket.
 +2015-07-22 - c40ecff - lavc 56.51.100 - avcodec.h
 +  Add AV_PKT_DATA_QUALITY_STATS to export the quality value, PSNR, and pict_type
 +  of an AVPacket.
  
 -2015-07-02 - 1316df7 - lavu 56.15.0
 +2015-07-16 - 8dad213 - lavc 56.49.100
 +  Add av_codec_get_codec_properties(), FF_CODEC_PROPERTY_LOSSLESS
 +  and FF_CODEC_PROPERTY_CLOSED_CAPTIONS
 +
 +2015-07-03 - d563e13 / 83212943 - lavu 54.28.100 / 56.15.0
    Add av_version_info().
  
 -2015-07-01 - 0d449c8 - lavfi 5.1.0 - version.h
 -             0f87f9b - lavd 55.2.0 - version.h
 -  Add library identification symbols, LIBAVFILTER_IDENT and LIBAVDEVICE_IDENT.
 +-------- 8< --------- FFmpeg 2.7 was cut here -------- 8< ---------
  
 -2015-06-07 - 252d620 - lavf 56.20.0 - avio.h
 -  Add avio_put_str16be.
 +2015-06-04 - cc17b43 - lswr  1.2.100
 +  Add swr_get_out_samples()
  
 -2015-05-13 - f7cafb5 - lavu 54.14.0 - cpu.h
 +2015-05-27 - c312bfa - lavu 54.26.100 - cpu.h
    Add AV_CPU_FLAG_AVXSLOW.
  
 -2015-05-13 - e7c5e17 - lavc 56.23.0
 +2015-05-26 - 1fb9b2a - lavu 54.25.100 - rational.h
 +  Add av_q2intfloat().
 +
 +2015-05-13 - cc48409 / e7c5e17 - lavc 56.39.100 / 56.23.0
    Add av_vda_default_init2.
  
 -2015-04-19 - c253340 - lavu 54.12.0
 +2015-05-11 - 541d75f - lavf 56.33.100 - avformat.h
 +  Add AVOpenCallback AVFormatContext.open_cb
 +
 +2015-05-07 - a7dd933 - 56.38.100 - avcodec.h
 +  Add av_packet_side_data_name().
 +
 +2015-05-07 - 01e59d4 - 56.37.102 - avcodec.h
 +  Add FF_PROFILE_VP9_2 and FF_PROFILE_VP9_3.
 +
 +2015-05-04 - 079b7f6 - 56.37.100 - avcodec.h
 +  Add FF_PROFILE_VP9_0 and FF_PROFILE_VP9_1.
 +
 +2015-04-22 - 748d481 - lavf 56.31.100 - avformat.h
 +  Add AVFMT_FLAG_FAST_SEEK flag. Some formats (initially mp3) use it to enable
 +  fast, but inaccurate seeking.
 +
 +2015-04-20 - 8e8219e / c253340 - lavu 54.23.100 / 54.12.0 - log.h
    Add AV_LOG_TRACE for extremely verbose debugging.
  
 -2015-04-07 - 27f2746 - lavu 54.11.0
 -  Add av_small_strptime().
 +2015-04-02 - 26e0e393 - lavf 56.29.100 - avio.h
 +  Add AVIODirEntryType.AVIO_ENTRY_SERVER.
 +  Add AVIODirEntryType.AVIO_ENTRY_SHARE.
 +  Add AVIODirEntryType.AVIO_ENTRY_WORKGROUP.
  
 -2015-03-29 - 6fe2641 - lavc 56.22.0
 -  Add FF_PROFILE_DTS_EXPRESS.
 +2015-03-31 - 3188696 - lavu 54.22.100 - avstring.h
 +  Add av_append_path_component()
 +
 +2015-03-27 - 184084c - lavf 56.27.100 - avio.h url.h
 +  New directory listing API.
  
 -2015-03-29 - c484561 - lavu 54.10.0
 +  Add AVIODirEntryType enum.
 +  Add AVIODirEntry, AVIODirContext structures.
 +  Add avio_open_dir(), avio_read_dir(), avio_close_dir(), avio_free_directory_entry().
 +  Add ff_alloc_dir_entry().
 +  Extend URLProtocol with url_open_dir(), url_read_dir(), url_close_dir().
 +
 +2015-03-29 - 268ff17 / c484561 - lavu 54.21.100 / 54.10.0 - pixfmt.h
    Add AV_PIX_FMT_MMAL for MMAL hardware acceleration.
  
 -2015-02-19 - 31d2039 - lavc 56.13
 +2015-03-19 - 11fe56c - 56.29.100 / lavc 56.22.0
 +  Add FF_PROFILE_DTS_EXPRESS.
 +
 +-------- 8< --------- FFmpeg 2.6 was cut here -------- 8< ---------
 +
 +2015-03-04 - cca4476 - lavf 56.25.100
 +  Add avformat_flush()
 +
 +2015-03-03 - 81a9126 - lavf 56.24.100
 +  Add avio_put_str16be()
 +
 +2015-02-19 - 560eb71 / 31d2039 - lavc 56.23.100 / 56.13.0
    Add width, height, coded_width, coded_height and format to
    AVCodecParserContext.
  
 -2015-02-19 - 5b1d9ce - lavu 54.9.0
 +2015-02-19 - e375511 / 5b1d9ce - lavu 54.19.100 / 54.9.0
    Add AV_PIX_FMT_QSV for QSV hardware acceleration.
  
 -2015-01-27 - 728685f - lavc 56.12.0, lavu 54.8.0 - avcodec.h, frame.h
 +2015-02-14 - ba22295 - lavc 56.21.102
 +  Deprecate VIMA decoder.
 +
 +2015-01-27 - 62a82c6 / 728685f - lavc 56.21.100 / 56.12.0, lavu 54.18.100 / 54.8.0 - avcodec.h, frame.h
    Add AV_PKT_DATA_AUDIO_SERVICE_TYPE and AV_FRAME_DATA_AUDIO_SERVICE_TYPE for
    storing the audio service type as side data.
  
 -2015-01-14 - e2ad0b6 - lavu 54.6.0 - imgutils.h
 -  Add utility functions for image manipulation: av_image_get_buffer_size()
 -  av_image_fill_arrays() and av_image_copy_to_buffer().
 +2015-01-16 - a47c933 - lavf 56.19.100 - avformat.h
 +  Add data_codec and data_codec_id for storing codec of data stream
 +
 +2015-01-11 - 007c33d - lavd 56.4.100 - avdevice.h
 +  Add avdevice_list_input_sources().
 +  Add avdevice_list_output_sinks().
  
 -2014-12-25 - c220a60 - lavc 56.10.0 - vdpau.h
 +2014-12-25 - d7aaeea / c220a60 - lavc 56.19.100 / 56.10.0 - vdpau.h
    Add av_vdpau_get_surface_parameters().
  
 -2014-12-25 - 6c99c92 - lavc 56.9.0 - avcodec.h
 +2014-12-25 - ddb9a24 / 6c99c92 - lavc 56.18.100 / 56.9.0 - avcodec.h
    Add AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH flag to av_vdpau_bind_context().
  
 -2014-12-25 - 57b6704 - lavc 56.8.0 - avcodec.h
 +2014-12-25 - d16079a / 57b6704 - lavc 56.17.100 / 56.8.0 - avcodec.h
    Add AVCodecContext.sw_pix_fmt.
  
 -2014-11-07 - 1384df6 - lavf 56.06.3 - avformat.h
 -  Add AVFormatContext.avoid_negative_ts.
 +2014-12-04 - 6e9ac02 - lavc 56.14.100 - dv_profile.h
 +  Add av_dv_codec_profile2().
  
 -2014-11-06 - 5e80fb7 - lavc 56.6.0 - vorbis_parser.h
 -  Add a public API for parsing vorbis packets.
 +-------- 8< --------- FFmpeg 2.5 was cut here -------- 8< ---------
 +
 +2014-11-21 - ab922f9 - lavu 54.15.100 - dict.h
 +   Add av_dict_get_string().
 +
 +2014-11-18 - a54a51c - lavu 54.14.100 - float_dsp.h
 +  Add avpriv_float_dsp_alloc().
 +
 +2014-11-16 - 6690d4c3 - lavf 56.13.100 - avformat.h
 +  Add AVStream.recommended_encoder_configuration with accessors.
  
 -2014-10-24 - 1bd0bdc - lavu 54.5.0 - time.h
 -  Add av_gettime_relative().
 +2014-11-16 - bee5844d - lavu 54.13.100 - opt.h
 +  Add av_opt_serialize().
  
 -2014-10-15 - 7ea1b34 - lavc 56.5.0 - avcodec.h
 +2014-11-16 - eec69332 - lavu 54.12.100 - opt.h
 +  Add av_opt_is_set_to_default().
 +
 +2014-11-06 - 44fa267 / 5e80fb7 - lavc 56.11.100 / 56.6.0 - vorbis_parser.h
 +  Add a public API for parsing vorbis packets.
 +
 +2014-10-15 - 17085a0 / 7ea1b34 - lavc 56.7.100 / 56.5.0 - avcodec.h
    Replace AVCodecContext.time_base used for decoding
    with AVCodecContext.framerate.
  
 -2014-10-15 - d565fef1- lavc 56.4.0 - avcodec.h
 +2014-10-15 - 51c810e / d565fef1 - lavc 56.6.100 / 56.4.0 - avcodec.h
    Add AV_HWACCEL_FLAG_IGNORE_LEVEL flag to av_vdpau_bind_context().
  
 -2014-10-13 - 2df0c32 - lavc 56.03.0 - avcodec.h
 +2014-10-13 - da21895 / 2df0c32e - lavc 56.5.100 / 56.3.0 - avcodec.h
    Add AVCodecContext.initial_padding. Deprecate the use of AVCodecContext.delay
    for audio encoding.
  
 -2014-10-08 - 5a419b2 - lavu 54.04.0 - pixdesc.h
 +2014-10-08 - bb44f7d / 5a419b2 - lavu 54.10.100 / 54.4.0 - pixdesc.h
    Add API to return the name of frame and context color properties.
  
 -2014-10-06 - e3e158e - lavc 56.2.0 - vdpau.h
 +2014-10-06 - a61899a / e3e158e - lavc 56.3.100 / 56.2.0 - vdpau.h
    Add av_vdpau_bind_context(). This function should now be used for creating
    (or resetting) a AVVDPAUContext instead of av_vdpau_alloc_context().
  
 -2014-08-25 - b263f8f - lavf 56.03.0 - avformat.h
 -  Add AVFormatContext.max_ts_probe.
 +2014-10-02 - cdd6f05 - lavc 56.2.100 - avcodec.h
 +2014-10-02 - cdd6f05 - lavu 54.9.100 - frame.h
 +  Add AV_FRAME_DATA_SKIP_SAMPLES. Add lavc CODEC_FLAG2_SKIP_MANUAL and
 +  AVOption "skip_manual", which makes lavc export skip information via
 +  AV_FRAME_DATA_SKIP_SAMPLES AVFrame side data, instead of skipping and
 +  discarding samples automatically.
  
 -------------------------------8<-------------------------------------
 -                   11 branch was cut here
 ------------------------------>8--------------------------------------
 +2014-10-02 - 0d92b0d - lavu 54.8.100 - avstring.h
 +  Add av_match_list()
  
 -2014-08-28 - 9301486 - lavc 56.1.0 - avcodec.h
 +2014-09-24 - ac68295 - libpostproc 53.1.100
 +  Add visualization support
 +
 +2014-09-19 - 6edd6a4 - lavc 56.1.101 - dv_profile.h
 +  deprecate avpriv_dv_frame_profile2(), which was made public by accident.
 +
 +
 +-------- 8< --------- FFmpeg 2.4 was cut here -------- 8< ---------
 +
 +2014-08-25 - 215db29 / b263f8f - lavf 56.3.100 / 56.3.0 - avformat.h
 +  Add AVFormatContext.max_ts_probe.
 +
 +2014-08-28 - f30a815 / 9301486 - lavc 56.1.100 / 56.1.0 - avcodec.h
    Add AV_PKT_DATA_STEREO3D to export container-level stereo3d information.
  
 -2014-08-13 - 8ddc326 - lavu 54.03.0 - mem.h
 +2014-08-23 - 8fc9bd0 - lavu 54.7.100 - dict.h
 +  AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL arguments are now
 +  freed even on error. This is consistent with the behaviour all users
 +  of it we could find expect.
 +
 +2014-08-21 - 980a5b0 - lavu 54.6.100 - frame.h motion_vector.h
 +  Add AV_FRAME_DATA_MOTION_VECTORS side data and AVMotionVector structure
 +
 +2014-08-16 - b7d5e01 - lswr 1.1.100 - swresample.h
 +  Add AVFrame based API
 +
 +2014-08-16 - c2829dc - lavu 54.4.100 - dict.h
 +  Add av_dict_set_int helper function.
 +
 +2014-08-13 - c8571c6 / 8ddc326 - lavu 54.3.100 / 54.3.0 - mem.h
    Add av_strndup().
  
 -2014-08-13 - a8c104a - lavu 54.02.0 - opt.h
 +2014-08-13 - 2ba4577 / a8c104a - lavu 54.2.100 / 54.2.0 - opt.h
    Add av_opt_get_dict_val/set_dict_val with AV_OPT_TYPE_DICT to support
    dictionary types being set as options.
  
    Add AVFormatContext.event_flags and AVStream.event_flags for signaling to
    the user when events happen in the file/stream.
  
 -2014-08-10 - fb1ddcd - lavr 2.1.0 - avresample.h
 +2014-08-10 - 78eaaa8 / fb1ddcd - lavr 2.1.0 - avresample.h
    Add avresample_convert_frame() and avresample_config().
  
 -2014-08-10 - fb1ddcd - lavu 54.1.0 - error.h
 +2014-08-10 - 78eaaa8 / fb1ddcd - lavu 54.1.100 / 54.1.0 - error.h
    Add AVERROR_INPUT_CHANGED and AVERROR_OUTPUT_CHANGED.
  
 -2014-08-08 - d35b94f - lavc 55.57.4 - avcodec.h
 +2014-08-08 - 3841f2a / d35b94f - lavc 55.73.102 / 55.57.4 - avcodec.h
    Deprecate FF_IDCT_XVIDMMX define and xvidmmx idct option.
    Replaced by FF_IDCT_XVID and xvid respectively.
  
 +2014-08-08 - 5c3c671 - lavf 55.53.100 - avio.h
 +  Add avio_feof() and deprecate url_feof().
 +
  2014-08-07 - bb78903 - lsws 2.1.3 - swscale.h
 -  sws_getCachedContext is not going to be removed in the future.
 +  sws_getContext is not going to be removed in the future.
  
 -2014-08-07 - ad1ee5f - lavc 55.57.3 - avcodec.h
 +2014-08-07 - a561662 / ad1ee5f - lavc 55.73.101 / 55.57.3 - avcodec.h
    reordered_opaque is not going to be removed in the future.
  
 -2014-08-04 - e9abafc - lavu 53.22.0 - pixfmt.h
 +2014-08-02 - 28a2107 - lavu 52.98.100 - pixelutils.h
 +  Add pixelutils API with SAD functions
 +
 +2014-08-04 - 6017c98 / e9abafc - lavu 52.97.100 / 53.22.0 - pixfmt.h
    Add AV_PIX_FMT_YA16 pixel format for 16 bit packed gray with alpha.
  
 -2014-08-04 - e96c3b8 - lavu 53.21.1 - avstring.h
 +2014-08-04 - 4c8bc6f / e96c3b8 - lavu 52.96.101 / 53.21.1 - avstring.h
    Rename AV_PIX_FMT_Y400A to AV_PIX_FMT_YA8 to better identify the format.
    An alias pixel format and color space name are provided for compatibility.
  
 -2014-08-04 - d2962e9 - lavu 53.21.0 - pixdesc.h
 +2014-08-04 - 073c074 / d2962e9 - lavu 52.96.100 / 53.21.0 - pixdesc.h
    Support name aliases for pixel formats.
  
 -2014-08-03 - 1ef9e83 - lavc 55.57.2 - avcodec.h
 -2014-08-03 - 1ef9e83 - lavu 53.20.0 - frame.h
 +2014-08-03 - 71d008e / 1ef9e83 - lavc 55.72.101 / 55.57.2 - avcodec.h
 +2014-08-03 - 71d008e / 1ef9e83 - lavu 52.95.100 / 53.20.0 - frame.h
    Deprecate AVCodecContext.dtg_active_format and use side-data instead.
  
 -2014-08-03 - 9f17685 - lavc 55.57.1 - avcodec.h
 +2014-08-03 - e680c73 - lavc 55.72.100 - avcodec.h
 +  Add get_pixels() to AVDCT
 +
 +2014-08-03 - 9400603 / 9f17685 - lavc 55.71.101 / 55.57.1 - avcodec.h
    Deprecate unused FF_IDCT_IPP define and ipp avcodec option.
    Deprecate unused FF_DEBUG_PTS define and pts avcodec option.
    Deprecate unused FF_CODER_TYPE_DEFLATE define and deflate avcodec option.
    Deprecate unused FF_DCT_INT define and int avcodec option.
    Deprecate unused avcodec option scenechange_factor.
  
 -2014-07-29 - 69e7336 - lavu 53.19.0 - avstring.h
 +2014-07-30 - ba3e331 - lavu 52.94.100 - frame.h
 +  Add av_frame_side_data_name()
 +
 +2014-07-29 - 80a3a66 / 3a19405 - lavf 56.01.100 / 56.01.0 - avformat.h
 +  Add mime_type field to AVProbeData, which now MUST be initialized in
 +  order to avoid uninitialized reads of the mime_type pointer, likely
 +  leading to crashes.
 +  Typically, this means you will do 'AVProbeData pd = { 0 };' instead of
 +  'AVProbeData pd;'.
 +
 +2014-07-29 - 31e0b5d / 69e7336 - lavu 52.92.100 / 53.19.0 - avstring.h
    Make name matching function from lavf public as av_match_name().
  
 -2014-07-28 - c5fca01 - lavc 55.57.0 - avcodec.h
 +2014-07-28 - 2e5c8b0 / c5fca01 - lavc 55.71.100 / 55.57.0 - avcodec.h
    Add AV_CODEC_PROP_REORDER to mark codecs supporting frame reordering.
  
 -2014-07-09 - a54f03b - lavu 53.18.0 - display.h
 +2014-07-27 - ff9a154 - lavf 55.50.100 - avformat.h
 +  New field int64_t probesize2 instead of deprecated
 +  field int probesize.
 +
 +2014-07-27 - 932ff70 - lavc 55.70.100 - avdct.h
 +  Add AVDCT / avcodec_dct_alloc() / avcodec_dct_init().
 +
 +2014-07-23 - 8a4c086 - lavf 55.49.100 - avio.h
 +  Add avio_read_to_bprint()
 +
 +
 +-------- 8< --------- FFmpeg 2.3 was cut here -------- 8< ---------
 +
 +2014-07-14 - 62227a7 - lavf 55.47.100 - avformat.h
 +  Add av_stream_get_parser()
 +
 +2014-07-09 - c67690f / a54f03b - lavu 52.92.100 / 53.18.0 - display.h
    Add av_display_matrix_flip() to flip the transformation matrix.
  
 -2014-07-09 - f6ee61f - lavc 55.56.0 - dv_profile.h
 +2014-07-09 - 1b58f13 / f6ee61f - lavc 55.69.100 / 55.56.0 - dv_profile.h
    Add a public API for DV profile handling.
  
 -2014-06-20 - 9e500ef - lavu 53.17.0 - imgutils.h
 +2014-06-20 - 0dceefc / 9e500ef - lavu 52.90.100 / 53.17.0 - imgutils.h
    Add av_image_check_sar().
  
 -2014-06-20 - 874390e - lavc 55.55.0 - avcodec.h
 +2014-06-20 - 4a99333 / 874390e - lavc 55.68.100 / 55.55.0 - avcodec.h
    Add av_packet_rescale_ts() to simplify timestamp conversion.
  
 -2014-06-18 - 194be1f - lavf 55.20.0 - avformat.h
 +2014-06-18 - ac293b6 / 194be1f - lavf 55.44.100 / 55.20.0 - avformat.h
    The proper way for providing a hint about the desired timebase to the muxers
    is now setting AVStream.time_base, instead of AVStream.codec.time_base as was
    done previously. The old method is now deprecated.
  
 -2014-06-01 - 0957b27 - lavc 55.54.0 - avcodec.h
 +2014-06-11 - 67d29da - lavc 55.66.101 - avcodec.h
 +  Increase FF_INPUT_BUFFER_PADDING_SIZE to 32 due to some corner cases needing
 +  it
 +
 +2014-06-10 - 5482780 - lavf 55.43.100 - avformat.h
 +  New field int64_t max_analyze_duration2 instead of deprecated
 +  int max_analyze_duration.
 +
 +2014-05-30 - 00759d7 - lavu 52.89.100 - opt.h
 +  Add av_opt_copy()
 +
 +2014-06-01 - 03bb99a / 0957b27 - lavc 55.66.100 / 55.54.0 - avcodec.h
    Add AVCodecContext.side_data_only_packets to allow encoders to output packets
    with only side data. This option may become mandatory in the future, so all
    users are recommended to update their code and enable this option.
  
 -2014-06-01 - 8c02adc - lavu 53.16.0 - frame.h, pixfmt.h
 +2014-06-01 - 6e8e9f1 / 8c02adc - lavu 52.88.100 / 53.16.0 - frame.h, pixfmt.h
    Move all color-related enums (AVColorPrimaries, AVColorSpace, AVColorRange,
    AVColorTransferCharacteristic, and AVChromaLocation) inside lavu.
 -  Add AVFrame fields for them on the next lavu major bump.
 +  And add AVFrame fields for them.
  
 -2014-05-28 - b2d4565 - lavr 1.3.0 - avresample.h
 +2014-05-29 - bdb2e80 / b2d4565 - lavr 1.3.0 - avresample.h
    Add avresample_max_output_samples
  
 -2014-05-28 - 6d21259 - lavf 55.19.0 - avformat.h
 +2014-05-28 - d858ee7 / 6d21259 - lavf 55.42.100 / 55.19.0 - avformat.h
    Add strict_std_compliance and related AVOptions to support experimental
    muxing.
  
 -2014-05-20 - c23c96b - lavf 55.18.0 - avformat.h
 +2014-05-26 - 55cc60c - lavu 52.87.100 - threadmessage.h
 +  Add thread message queue API.
 +
 +2014-05-26 - c37d179 - lavf 55.41.100 - avformat.h
 +  Add format_probesize to AVFormatContext.
 +
 +2014-05-20 - 7d25af1 / c23c96b - lavf 55.39.100 / 55.18.0 - avformat.h
    Add av_stream_get_side_data() to access stream-level side data
    in the same way as av_packet_get_side_data().
  
 -2014-05-19 - bddd8cb - lavu 53.15.0 - frame.h, display.h
 +2014-05-20 - 7336e39 - lavu 52.86.100 - fifo.h
 +  Add av_fifo_alloc_array() function.
 +
 +2014-05-19 - ef1d4ee / bddd8cb - lavu 52.85.100 / 53.15.0 - frame.h, display.h
    Add AV_FRAME_DATA_DISPLAYMATRIX for exporting frame-level
    spatial rendering on video frames for proper display.
  
 -2014-05-19 - bddd8cb - lavc 55.53.0 - avcodec.h
 +2014-05-19 - ef1d4ee / bddd8cb - lavc 55.64.100 / 55.53.0 - avcodec.h
    Add AV_PKT_DATA_DISPLAYMATRIX for exporting packet-level
    spatial rendering on video frames for proper display.
  
 -2014-05-19 - a312f71 - lavf 55.17.1 - avformat.h
 +2014-05-19 - 999a99c / a312f71 - lavf 55.38.101 / 55.17.1 - avformat.h
    Deprecate AVStream.pts and the AVFrac struct, which was its only use case.
 -  Those fields were poorly defined and not meant to be public, so there is
 -  no replacement for them.
 +  See use av_stream_get_end_pts()
  
 -2014-05-18 - fd05602 - lavc 55.52.0 - avcodec.h
 +2014-05-18 - 68c0518 / fd05602 - lavc 55.63.100 / 55.52.0 - avcodec.h
    Add avcodec_free_context(). From now on it should be used for freeing
    AVCodecContext.
  
 -2014-05-15 - 0c1959b - lavf 55.17.0 - avformat.h
 +2014-05-17 - 0eec06e / 1bd0bdc - lavu 52.84.100 / 54.5.0 - time.h
 +  Add av_gettime_relative() av_gettime_relative_is_monotonic()
 +
 +2014-05-15 - eacf7d6 / 0c1959b - lavf 55.38.100 / 55.17.0 - avformat.h
    Add AVFMT_FLAG_BITEXACT flag. Muxers now use it instead of checking
    CODEC_FLAG_BITEXACT on the first stream.
  
 -2014-05-11 - 66e6c8a - lavu 53.14.0 - pixfmt.h
 +2014-05-15 - 96cb4c8 - lswr 0.19.100 - swresample.h
 +  Add swr_close()
 +
 +2014-05-11 - 14aef38 / 66e6c8a - lavu 52.83.100 / 53.14.0 - pixfmt.h
    Add AV_PIX_FMT_VDA for new-style VDA acceleration.
  
 -2014-05-01 - a2941c8 - lavc 55.50.3 - avcodec.h
 +2014-05-07 - 351f611 - lavu 52.82.100 - fifo.h
 +  Add av_fifo_freep() function.
 +
 +2014-05-02 - ba52fb11 - lavu 52.81.100 - opt.h
 +  Add av_opt_set_dict2() function.
 +
 +2014-05-01 - e77b985 / a2941c8 - lavc 55.60.103 / 55.50.3 - avcodec.h
    Deprecate CODEC_FLAG_MV0. It is replaced by the flag "mv0" in the
    "mpv_flags" private option of the mpegvideo encoders.
  
 -2014-05-01 - 6484149 - lavc 55.50.2 - avcodec.h
 +2014-05-01 - e40ae8c / 6484149 - lavc 55.60.102 / 55.50.2 - avcodec.h
    Deprecate CODEC_FLAG_GMC. It is replaced by the "gmc" private option of the
    libxvid encoder.
  
 -2014-05-01 - b2c3171 - lavc 55.50.1 - avcodec.h
 +2014-05-01 - 1851643 / b2c3171 - lavc 55.60.101 / 55.50.1 - avcodec.h
    Deprecate CODEC_FLAG_NORMALIZE_AQP. It is replaced by the flag "naq" in the
    "mpv_flags" private option of the mpegvideo encoders.
  
 -2014-05-01 - 5fcceda - avcodec.h
 +2014-05-01 - cac07d0 / 5fcceda - avcodec.h
    Deprecate CODEC_FLAG_INPUT_PRESERVED. Its functionality is replaced by passing
    reference-counted frames to encoders.
  
 -2014-04-28 - ed4b757 - lavc 55.50.0 - dxva2.h
 +2014-04-30 - 617e866 - lavu 52.81.100 - pixdesc.h
 +  Add av_find_best_pix_fmt_of_2(), av_get_pix_fmt_loss()
 +  Deprecate avcodec_get_pix_fmt_loss(), avcodec_find_best_pix_fmt_of_2()
 +
 +2014-04-29 - 1bf6396 - lavc 55.60.100 - avcodec.h
 +  Add AVCodecDescriptor.mime_types field.
 +
 +2014-04-29 - b804eb4 - lavu 52.80.100 - hash.h
 +  Add av_hash_final_bin(), av_hash_final_hex() and av_hash_final_b64().
 +
 +2014-03-07 - 8b2a130 - lavc 55.50.0 / 55.53.100 - dxva2.h
    Add FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO for old Intel GPUs.
  
 -2014-04-22 - 502512e - lavu 53.13.0 - avutil.h
 +2014-04-22 - 502512e /dac7e8a - lavu 53.13.0 / 52.78.100 - avutil.h
    Add av_get_time_base_q().
  
 -2014-04-17 - 0983d48 - lavu 53.12.0 - crc.h
 +2014-04-17 - a8d01a7 / 0983d48 - lavu 53.12.0 / 52.77.100 - crc.h
    Add AV_CRC_16_ANSI_LE crc variant.
  
 -2014-04-07 - 8b17243 - lavu 53.11.0 - pixfmt.h
 +2014-04-15 - ef818d8 - lavf 55.37.101 - avformat.h
 +  Add av_format_inject_global_side_data()
 +
 +2014-04-12 - 4f698be - lavu 52.76.100 - log.h
 +  Add av_log_get_flags()
 +
 +2014-04-11 - 6db42a2b - lavd 55.12.100 - avdevice.h
 +  Add avdevice_capabilities_create() function.
 +  Add avdevice_capabilities_free() function.
 +
 +2014-04-07 - 0a1cc04 / 8b17243 - lavu 52.75.100 / 53.11.0 - pixfmt.h
    Add AV_PIX_FMT_YVYU422 pixel format.
  
 -2014-04-04 - 8542f9c - lavu 53.10.0 - replaygain.h
 +2014-04-04 - c1d0536 / 8542f9c - lavu 52.74.100 / 53.10.0 - replaygain.h
    Full scale for peak values is now 100000 (instead of UINT32_MAX) and values
    may overflow.
  
 -2014-04-03 - 7763118 - lavu 53.09.0 - log.h
 +2014-04-03 - c16e006 / 7763118 - lavu 52.73.100 / 53.9.0 - log.h
    Add AV_LOG(c) macro to have 256 color debug messages.
  
 -2014-03-24 - d161ae0 - lavu 53.08.0 - frame.h
 +2014-04-03 - eaed4da9 - lavu 52.72.100 - opt.h
 +  Add AV_OPT_MULTI_COMPONENT_RANGE define to allow return
 +  multi-component option ranges.
 +
 +2014-03-29 - cd50a44b - lavu 52.70.100 - mem.h
 +  Add av_dynarray_add_nofree() function.
 +
 +2014-02-24 - 3e1f241 / d161ae0 - lavu 52.69.100 / 53.8.0 - frame.h
    Add av_frame_remove_side_data() for removing a single side data
    instance from a frame.
  
 -2014-03-24 - 5a7e35d - lavu 53.07.0 - frame.h, replaygain.h
 +2014-03-24 - 83e8978 / 5a7e35d - lavu 52.68.100 / 53.7.0 - frame.h, replaygain.h
    Add AV_FRAME_DATA_REPLAYGAIN for exporting replaygain tags.
    Add a new header replaygain.h with the AVReplayGain struct.
  
 -2014-03-24 - 5a7e35d - lavc 55.36.0 - avcodec.h
 +2014-03-24 - 83e8978 / 5a7e35d - lavc 55.54.100 / 55.36.0 - avcodec.h
    Add AV_PKT_DATA_REPLAYGAIN for exporting replaygain tags.
  
 -2014-03-24 - 25b3258 - lavf 55.13.0 - avformat.h
 +2014-03-24 - 595ba3b / 25b3258 - lavf 55.35.100 / 55.13.0 - avformat.h
    Add AVStream.side_data and AVStream.nb_side_data for exporting stream-global
    side data (e.g. replaygain tags, video rotation)
  
 -2014-03-24 - 0e2c3ee - lavc 55.35.0 - avcodec.h
 +2014-03-24 - bd34e26 / 0e2c3ee - lavc 55.53.100 / 55.35.0 - avcodec.h
    Give the name AVPacketSideData to the previously anonymous struct used for
    AVPacket.side_data.
  
 -2014-03-16 - 1481d24 - lavu 53.06.0 - pixfmt.h
 -  Add RGBA64 pixel format and variants.
  
 -2014-02-24 - 1155fd0 - lavu 53.05.0 - frame.h
 +-------- 8< --------- FFmpeg 2.2 was cut here -------- 8< ---------
 +
 +2014-03-18 - 37c07d4 - lsws 2.5.102
 +  Make gray16 full-scale.
 +
 +2014-03-16 - 6b1ca17 / 1481d24 - lavu 52.67.100 / 53.6.0 - pixfmt.h
 +  Add RGBA64_LIBAV pixel format and variants for compatibility
 +
 +2014-03-11 - 3f3229c - lavf 55.34.101 - avformat.h
 +  Set AVFormatContext.start_time_realtime when demuxing.
 +
 +2014-03-03 - 06fed440 - lavd 55.11.100 - avdevice.h
 +  Add av_input_audio_device_next().
 +  Add av_input_video_device_next().
 +  Add av_output_audio_device_next().
 +  Add av_output_video_device_next().
 +
 +2014-02-24 - fff5262 / 1155fd0 - lavu 52.66.100 / 53.5.0 - frame.h
    Add av_frame_copy() for copying the frame data.
  
 -2014-02-22 - 7e86c27 - lavr 1.2.0 - avresample.h
 +2014-02-24 - a66be60 - lswr 0.18.100 - swresample.h
 +  Add swr_is_initialized() for checking whether a resample context is initialized.
 +
 +2014-02-22 - 5367c0b / 7e86c27 - lavr 1.2.0 - avresample.h
    Add avresample_is_open() for checking whether a resample context is open.
  
 -2014-02-19 - c3ecd96 - lavu 53.04.0  - opt.h
 +2014-02-19 - 6a24d77 / c3ecd96 - lavu 52.65.100 / 53.4.0  - opt.h
    Add AV_OPT_FLAG_EXPORT and AV_OPT_FLAG_READONLY to mark options meant (only)
    for reading.
  
 -2014-02-19 - 6bb8720 - lavu 53.03.01 - opt.h
 +2014-02-19 - f4c8d00 / 6bb8720 - lavu 52.64.101 / 53.3.1 - opt.h
    Deprecate unused AV_OPT_FLAG_METADATA.
  
 -------------------------------8<-------------------------------------
 -                   10 branch was cut here
 ------------------------------>8--------------------------------------
 +2014-02-16 - 81c3f81 - lavd 55.10.100 - avdevice.h
 +  Add avdevice_list_devices() and avdevice_free_list_devices()
  
 -2014-02-15 - c98f316 - lavu 53.3.0 - frame.h
 +2014-02-16 - db3c970 - lavf 55.33.100 - avio.h
 +  Add avio_find_protocol_name() to find out the name of the protocol that would
 +  be selected for a given URL.
 +
 +2014-02-15 - a2bc6c1 / c98f316 - lavu 52.64.100 / 53.3.0 - frame.h
    Add AV_FRAME_DATA_DOWNMIX_INFO value to the AVFrameSideDataType enum and
    downmix_info.h API, which identify downmix-related metadata.
  
 -2014-02-04 - d9ae103 - lavf 55.11.0 - avformat.h
 +2014-02-11 - 1b05ac2 - lavf 55.32.100 - avformat.h
 +  Add av_write_uncoded_frame() and av_interleaved_write_uncoded_frame().
 +
 +2014-02-04 - 3adb5f8 / d9ae103 - lavf 55.30.100 / 55.11.0 - avformat.h
    Add AVFormatContext.max_interleave_delta for controlling amount of buffering
    when interleaving.
  
 -2014-01-20 - 93c553c - lavc 55.32.1 - avcodec.h
 +2014-02-02 - 5871ee5 - lavf 55.29.100 - avformat.h
 +  Add output_ts_offset muxing option to AVFormatContext.
 +
 +2014-01-27 - 102bd64 - lavd 55.7.100 - avdevice.h
 +                       lavf 55.28.100 - avformat.h
 +  Add avdevice_dev_to_app_control_message() function.
 +
 +2014-01-27 - 7151411 - lavd 55.6.100 - avdevice.h
 +                       lavf 55.27.100 - avformat.h
 +  Add avdevice_app_to_dev_control_message() function.
 +
 +2014-01-24 - 86bee79 - lavf 55.26.100 - avformat.h
 +  Add AVFormatContext option metadata_header_padding to allow control over the
 +  amount of padding added.
 +
 +2014-01-20 - eef74b2 / 93c553c - lavc 55.48.102 / 55.32.1 - avcodec.h
    Edges are not required anymore on video buffers allocated by get_buffer2()
    (i.e. as if the CODEC_FLAG_EMU_EDGE flag was always on). Deprecate
    CODEC_FLAG_EMU_EDGE and avcodec_get_edge_width().
  
 -2014-01-05 - 5b4797a - lavu 53.2.0 - frame.h
 +2014-01-19 - 1a193c4 - lavf 55.25.100 - avformat.h
 +  Add avformat_get_mov_video_tags() and avformat_get_mov_audio_tags().
 +
 +2014-01-19 - 3532dd5 - lavu 52.63.100 - rational.h
 +  Add av_make_q() function.
 +
 +2014-01-05 - 4cf4da9 / 5b4797a - lavu 52.62.100 / 53.2.0 - frame.h
    Add AV_FRAME_DATA_MATRIXENCODING value to the AVFrameSideDataType enum, which
    identifies AVMatrixEncoding data.
  
 -2014-01-05 - 5c437fb - lavu 53.1.0 - channel_layout.h
 +2014-01-05 - 751385f / 5c437fb - lavu 52.61.100 / 53.1.0 - channel_layout.h
    Add values for various Dolby flags to the AVMatrixEncoding enum.
  
 -2013-12-20 - 2a41826 - lavc 55.30.0 - avcodec.h
 -  Add HEVC profiles
 +2014-01-04 - b317f94 - lavu 52.60.100 - mathematics.h
 +  Add av_add_stable() function.
 +
 +2013-12-22 - 911676c - lavu 52.59.100 - avstring.h
 +  Add av_strnlen() function.
 +
 +2013-12-09 - 64f73ac - lavu 52.57.100 - opencl.h
 +  Add av_opencl_benchmark() function.
 +
 +2013-11-30 - 82b2e9c - lavu 52.56.100 - ffversion.h
 +  Moves version.h to libavutil/ffversion.h.
 +  Install ffversion.h and make it public.
  
 -2013-12-11 - b9fb59d,9431356,d7b3ee9 - lavc 55.28.1 - avcodec.h
 +2013-12-11 - 29c83d2 / b9fb59d,409a143 / 9431356,44967ab / d7b3ee9 - lavc 55.45.101 / 55.28.1 - avcodec.h
    av_frame_alloc(), av_frame_unref() and av_frame_free() now can and should be
    used instead of avcodec_alloc_frame(), avcodec_get_frame_defaults() and
    avcodec_free_frame() respectively. The latter three functions are deprecated.
  
 -2013-12-09 - 7e244c6- - lavu 52.20.0 - frame.h
 +2013-12-09 - 7a60348 / 7e244c6- - lavu 52.58.100 / 52.20.0 - frame.h
    Add AV_FRAME_DATA_STEREO3D value to the AVFrameSideDataType enum and
    stereo3d.h API, that identify codec-independent stereo3d information.
  
 -2013-11-26 - 1eaac1d- - lavu 52.19.0 - frame.h
 +2013-11-26 - 625b290 / 1eaac1d- - lavu 52.55.100 / 52.19.0 - frame.h
    Add AV_FRAME_DATA_A53_CC value to the AVFrameSideDataType enum, which
    identifies ATSC A53 Part 4 Closed Captions data.
  
 -2013-11-14 - cce3e0a - lavu 52.18.0 - mem.h
 +2013-11-22 - 6859065 - lavu 52.54.100 - avstring.h
 +  Add av_utf8_decode() function.
 +
 +2013-11-22 - fb7d70c - lavc 55.44.100 - avcodec.h
 +  Add HEVC profiles
 +
 +2013-11-20 - c28b61c - lavc 55.44.100 - avcodec.h
 +  Add av_packet_{un,}pack_dictionary()
 +  Add AV_PKT_METADATA_UPDATE side data type, used to transmit key/value
 +  strings between a stream and the application.
 +
 +2013-11-14 - 7c888ae / cce3e0a - lavu 52.53.100 / 52.18.0 - mem.h
    Move av_fast_malloc() and av_fast_realloc() for libavcodec to libavutil.
  
 -2013-11-14 - 8941971 - lavc 55.27.0 - avcodec.h
 +2013-11-14 - b71e4d8 / 8941971 - lavc 55.43.100 / 55.27.0 - avcodec.h
    Deprecate AVCodecContext.error_rate, it is replaced by the 'error_rate'
    private option of the mpegvideo encoder family.
  
 -2013-11-14 - 728c465 - lavc 55.26.0 - vdpau.h
 +2013-11-14 - 31c09b7 / 728c465 - lavc 55.42.100 / 55.26.0 - vdpau.h
    Add av_vdpau_get_profile().
    Add av_vdpau_alloc_context(). This function must from now on be
    used for allocating AVVDPAUContext.
  
 -2013-11-04 - cd8f772 - lavc 55.25.0 - avcodec.h
 +2013-11-04 - be41f21 / cd8f772 - lavc 55.41.100 / 55.25.0 - avcodec.h
 +                       lavu 52.51.100 - frame.h
    Add ITU-R BT.2020 and other not yet included values to color primaries,
    transfer characteristics and colorspaces.
  
 -2013-10-31 - 28096e0 - lavu 52.17.0 - frame.h
 +2013-11-04 - 85cabf1 - lavu 52.50.100 - avutil.h
 +  Add av_fopen_utf8()
 +
 +2013-10-31 - 78265fc / 28096e0 - lavu 52.49.100 / 52.17.0 - frame.h
    Add AVFrame.flags and AV_FRAME_FLAG_CORRUPT.
  
 -2013-09-28 - 0767bfd - lavfi 3.11.0 - avfilter.h
 +
 +-------- 8< --------- FFmpeg 2.1 was cut here -------- 8< ---------
 +
 +2013-10-27 - dbe6f9f - lavc 55.39.100 - avcodec.h
 +  Add CODEC_CAP_DELAY support to avcodec_decode_subtitle2.
 +
 +2013-10-27 - d61617a - lavu 52.48.100 - parseutils.h
 +  Add av_get_known_color_name().
 +
 +2013-10-17 - 8696e51 - lavu 52.47.100 - opt.h
 +  Add AV_OPT_TYPE_CHANNEL_LAYOUT and channel layout option handlers
 +  av_opt_get_channel_layout() and av_opt_set_channel_layout().
 +
 +2013-10-06 - ccf96f8 -libswscale 2.5.101 - options.c
 +  Change default scaler to bicubic
 +
 +2013-10-03 - e57dba0 - lavc 55.34.100 - avcodec.h
 +  Add av_codec_get_max_lowres()
 +
 +2013-10-02 - 5082fcc - lavf 55.19.100 - avformat.h
 +  Add audio/video/subtitle AVCodec fields to AVFormatContext to force specific
 +  decoders
 +
 +2013-09-28 - 7381d31 / 0767bfd - lavfi 3.88.100 / 3.11.0 - avfilter.h
    Add AVFilterGraph.execute and AVFilterGraph.opaque for custom slice threading
    implementations.
  
 -2013-09-21 - e208e6d - lavu 52.16.0 - pixfmt.h
 +2013-09-21 - 85f8a3c / e208e6d - lavu 52.46.100 / 52.16.0 - pixfmt.h
    Add interleaved 4:2:2 8/10-bit formats AV_PIX_FMT_NV16 and
    AV_PIX_FMT_NV20.
  
 -2013-09-16 - 3feb3d6 - lavu 52.15.0 - mem.h
 +2013-09-16 - c74c3fb / 3feb3d6 - lavu 52.44.100 / 52.15.0 - mem.h
    Add av_reallocp.
  
 -2013-08-10 - 5a9a9d4 - lavc 55.16.0 - avcodec.h
 +2013-09-04 - 3e1f507 - lavc 55.31.101 - avcodec.h
 +  avcodec_close() argument can be NULL.
 +
 +2013-09-04 - 36cd017a - lavf 55.16.101 - avformat.h
 +  avformat_close_input() argument can be NULL and point on NULL.
 +
 +2013-08-29 - e31db62 - lavf 55.15.100 - avformat.h
 +  Add av_format_get_probe_score().
 +
 +2013-08-15 - 1e0e193 - lsws 2.5.100 -
 +  Add a sws_dither AVOption, allowing to set the dither algorithm used
 +
 +2013-08-11 - d404fe35 - lavc 55.27.100 - vdpau.h
 +  Add a render2 alternative to the render callback function.
 +
 +2013-08-11 - af05edc - lavc 55.26.100 - vdpau.h
 +  Add allocation function for AVVDPAUContext, allowing
 +  to extend it in the future without breaking ABI/API.
 +
 +2013-08-10 - 67a580f / 5a9a9d4 - lavc 55.25.100 / 55.16.0 - avcodec.h
    Extend AVPacket API with av_packet_unref, av_packet_ref,
    av_packet_move_ref, av_packet_copy_props, av_packet_free_side_data.
  
 -2013-08-05 - f824535 - lavc 55.13.0 - avcodec.h
 +2013-08-05 - 9547e3e / f824535 - lavc 55.22.100 / 55.13.0 - avcodec.h
    Deprecate the bitstream-related members from struct AVVDPAUContext.
 -  The bistream buffers no longer need to be explicitly freed.
 +  The bitstream buffers no longer need to be explicitly freed.
  
 -2013-08-05 - 549294f - lavc 55.12.0 - avcodec.h
 +2013-08-05 - 3b805dc / 549294f - lavc 55.21.100 / 55.12.0 - avcodec.h
    Deprecate the CODEC_CAP_HWACCEL_VDPAU codec capability. Use CODEC_CAP_HWACCEL
    and select the AV_PIX_FMT_VDPAU format with get_format() instead.
  
 -2013-08-05 - a0ad5d0 - lavu 52.14.0 - pixfmt.h
 +2013-08-05 - 4ee0984 / a0ad5d0 - lavu 52.41.100 / 52.14.0 - pixfmt.h
    Deprecate AV_PIX_FMT_VDPAU_*. Use AV_PIX_FMT_VDPAU instead.
  
 -2013-08-02 - a8b1927 - lavc 55.11.0 - avcodec.h
 +2013-08-02 - 82fdfe8 / a8b1927 - lavc 55.20.100 / 55.11.0 - avcodec.h
    Add output_picture_number to AVCodecParserContext.
  
 -2013-06-24 - 95d5246 - lavc 55.10.0 - avcodec.h
 +2013-07-23 - abc8110 - lavc 55.19.100 - avcodec.h
 +  Add avcodec_chroma_pos_to_enum()
 +  Add avcodec_enum_to_chroma_pos()
 +
 +
 +-------- 8< --------- FFmpeg 2.0 was cut here -------- 8< ---------
 +
 +2013-07-03 - 838bd73 - lavfi 3.78.100 - avfilter.h
 +  Deprecate avfilter_graph_parse() in favor of the equivalent
 +  avfilter_graph_parse_ptr().
 +
 +2013-06-24 - af5f9c0 / 95d5246 - lavc 55.17.100 / 55.10.0 - avcodec.h
    Add MPEG-2 AAC profiles
  
 -2013-06-04 - fc962d4 - lavu 52.13.0 - mem.h
 +2013-06-25 - af5f9c0 / 95d5246 - lavf 55.10.100 - avformat.h
 +  Add AV_DISPOSITION_* flags to indicate text track kind.
 +
 +2013-06-15 - 99b8cd0 - lavu 52.36.100
 +  Add AVRIPEMD:
 +   av_ripemd_alloc()
 +   av_ripemd_init()
 +   av_ripemd_update()
 +   av_ripemd_final()
 +
 +2013-06-10 - 82ef670 - lavu 52.35.101 - hmac.h
 +  Add AV_HMAC_SHA224, AV_HMAC_SHA256, AV_HMAC_SHA384, AV_HMAC_SHA512
 +
 +2013-06-04 - 30b491f / fc962d4 - lavu 52.35.100 / 52.13.0 - mem.h
    Add av_realloc_array and av_reallocp_array
  
 -2013-05-24 - 129bb23 - lavfi 3.10.0 - avfilter.h
 +2013-05-30 - 682b227 - lavu 52.35.100
 +  Add AVSHA512:
 +   av_sha512_alloc()
 +   av_sha512_init()
 +   av_sha512_update()
 +   av_sha512_final()
 +
 +2013-05-24 - 8d4e969 / 129bb23 - lavfi 3.10.0 / 3.70.100 - avfilter.h
    Add support for slice multithreading to lavfi. Filters supporting threading
    are marked with AVFILTER_FLAG_SLICE_THREADS.
    New fields AVFilterContext.thread_type, AVFilterGraph.thread_type and
    AVFilterGraph.nb_threads (accessible directly or through AVOptions) may be
    used to configure multithreading.
  
 -2013-05-24 - 2a6eaea - lavu 52.12.0 - cpu.h
 +2013-05-24 - fe40a9f / 2a6eaea - lavu 52.12.0 / 52.34.100 - cpu.h
    Add av_cpu_count() function for getting the number of logical CPUs.
  
 -2013-05-24 - b493847 - lavc 55.7.0 - avcodec.h
 +2013-05-24 - 0c25c39 / b493847 - lavc 55.7.0 / 55.12.100 - avcodec.h
    Add picture_structure to AVCodecParserContext.
  
 -2013-05-15 - e6c4ac7 - lavu 52.11.0 - pixdesc.h
 +2013-05-17 - 3a751ea - lavu 52.33.100 - opt.h
 +  Add AV_OPT_TYPE_COLOR value to AVOptionType enum.
 +
 +2013-05-13 - e398416 - lavu 52.31.100 - mem.h
 +  Add av_dynarray2_add().
 +
 +2013-05-12 - 1776177 - lavfi 3.65.100
 +  Add AVFILTER_FLAG_SUPPORT_TIMELINE* filter flags.
 +
 +2013-04-19 - 380cfce - lavc 55.4.100
 +  Add AV_CODEC_PROP_TEXT_SUB property for text based subtitles codec.
 +
 +2013-04-18 - 7c1a002 - lavf 55.3.100
 +  The matroska demuxer can now output proper verbatim ASS packets. It will
 +  become the default starting lavf 56.0.100.
 +
 +2013-04-10 - af0d270 - lavu 25.26.100 - avutil.h,opt.h
 +  Add av_int_list_length()
 +  and av_opt_set_int_list().
 +
 +2013-03-30 - 5c73645 - lavu 52.24.100 - samplefmt.h
 +  Add av_samples_alloc_array_and_samples().
 +
 +2013-03-29 - ef7b6b4 - lavf 55.1.100 - avformat.h
 +  Add av_guess_frame_rate()
 +
 +2013-03-20 - 8d928a9 - lavu 52.22.100 - opt.h
 +  Add AV_OPT_TYPE_DURATION value to AVOptionType enum.
 +
 +2013-03-17 - 7aa9af5 - lavu 52.20.100 - opt.h
 +  Add AV_OPT_TYPE_VIDEO_RATE value to AVOptionType enum.
 +
 +
 +-------- 8< --------- FFmpeg 1.2 was cut here -------- 8< ---------
 +
 +2013-03-07 - 9767ec6 - lavu 52.18.100 - avstring.h,bprint.h
 +  Add av_escape() and av_bprint_escape() API.
 +
 +2013-02-24 - b59cd08 - lavfi 3.41.100 - buffersink.h
 +  Add sample_rates field to AVABufferSinkParams.
 +
 +2013-01-17 - a1a707f - lavf 54.61.100
 +  Add av_codec_get_tag2().
 +
 +2013-01-01 - 2eb2e17 - lavfi 3.34.100
 +  Add avfilter_get_audio_buffer_ref_from_arrays_channels.
 +
 +
 +-------- 8< --------- FFmpeg 1.1 was cut here -------- 8< ---------
 +
 +2012-12-20 - 34de47aa - lavfi 3.29.100 - avfilter.h
 +  Add AVFilterLink.channels, avfilter_link_get_channels()
 +  and avfilter_ref_get_channels().
 +
 +2012-12-15 - 96d815fc - lavc 54.80.100 - avcodec.h
 +  Add pkt_size field to AVFrame.
 +
 +2012-11-25 - c70ec631 - lavu 52.9.100 - opt.h
 +  Add the following convenience functions to opt.h:
 +   av_opt_get_image_size
 +   av_opt_get_pixel_fmt
 +   av_opt_get_sample_fmt
 +   av_opt_set_image_size
 +   av_opt_set_pixel_fmt
 +   av_opt_set_sample_fmt
 +
 +2012-11-17 - 4cd74c81 - lavu 52.8.100 - bprint.h
 +  Add av_bprint_strftime().
 +
 +2012-11-15 - 92648107 - lavu 52.7.100 - opt.h
 +  Add av_opt_get_key_value().
 +
 +2012-11-13 - 79456652 - lavfi 3.23.100 - avfilter.h
 +  Add channels field to AVFilterBufferRefAudioProps.
 +
 +2012-11-03 - 481fdeee - lavu 52.3.100 - opt.h
 +  Add AV_OPT_TYPE_SAMPLE_FMT value to AVOptionType enum.
 +
 +2012-10-21 - 6fb2fd8 - lavc  54.68.100 - avcodec.h
 +                       lavfi  3.20.100 - avfilter.h
 +  Add AV_PKT_DATA_STRINGS_METADATA side data type, used to transmit key/value
 +  strings between AVPacket and AVFrame, and add metadata field to
 +  AVCodecContext (which shall not be accessed by users; see AVFrame metadata
 +  instead).
 +
 +2012-09-27 - a70b493 - lavd 54.3.100 - version.h
 +  Add LIBAVDEVICE_IDENT symbol.
 +
 +2012-09-27 - a70b493 - lavfi 3.18.100 - version.h
 +  Add LIBAVFILTER_IDENT symbol.
 +
 +2012-09-27 - a70b493 - libswr 0.16.100 - version.h
 +  Add LIBSWRESAMPLE_VERSION, LIBSWRESAMPLE_BUILD
 +  and LIBSWRESAMPLE_IDENT symbols.
 +
 +
 +-------- 8< --------- FFmpeg 1.0 was cut here -------- 8< ---------
 +
 +2012-09-06 - 29e972f - lavu 51.72.100 - parseutils.h
 +  Add av_small_strptime() time parsing function.
 +
 +  Can be used as a stripped-down replacement for strptime(), on
 +  systems which do not support it.
 +
 +2012-08-25 - 2626cc4 - lavf 54.28.100
 +  Matroska demuxer now identifies SRT subtitles as AV_CODEC_ID_SUBRIP instead
 +  of AV_CODEC_ID_TEXT.
 +
 +2012-08-13 - 5c0d8bc - lavfi 3.8.100 - avfilter.h
 +  Add avfilter_get_class() function, and priv_class field to AVFilter
 +  struct.
 +
 +2012-08-12 - a25346e - lavu 51.69.100 - opt.h
 +  Add AV_OPT_FLAG_FILTERING_PARAM symbol in opt.h.
 +
 +2012-07-31 - 23fc4dd - lavc 54.46.100
 +  Add channels field to AVFrame.
 +
 +2012-07-30 - f893904 - lavu 51.66.100
 +  Add av_get_channel_description()
 +  and av_get_standard_channel_layout() functions.
 +
 +2012-07-21 - 016a472 - lavc 54.43.100
 +  Add decode_error_flags field to AVFrame.
 +
 +2012-07-20 - b062936 - lavf 54.18.100
 +  Add avformat_match_stream_specifier() function.
 +
 +2012-07-14 - f49ec1b - lavc 54.38.100 - avcodec.h
 +  Add metadata to AVFrame, and the accessor functions
 +  av_frame_get_metadata() and av_frame_set_metadata().
 +
 +2012-07-10 - 0e003d8 - lavc 54.33.100
 +  Add av_fast_padded_mallocz().
 +
 +2012-07-10 - 21d5609 - lavfi 3.2.0 - avfilter.h
 +  Add init_opaque() callback to AVFilter struct.
 +
 +2012-06-26 - e6674e4 - lavu 51.63.100 - imgutils.h
 +  Add functions to libavutil/imgutils.h:
 +  av_image_get_buffer_size()
 +  av_image_fill_arrays()
 +  av_image_copy_to_buffer()
 +
 +2012-06-24 - c41899a - lavu 51.62.100 - version.h
 +  version moved from avutil.h to version.h
 +
 +2012-04-11 - 359abb1 - lavu 51.58.100 - error.h
 +  Add av_make_error_string() and av_err2str() utilities to
 +  libavutil/error.h.
 +
 +2012-06-05 - 62b39d4 - lavc 54.24.100
 +  Add pkt_duration field to AVFrame.
 +
 +2012-05-24 - f2ee065 - lavu 51.54.100
 +  Move AVPALETTE_SIZE and AVPALETTE_COUNT macros from
 +  libavcodec/avcodec.h to libavutil/pixfmt.h.
 +
 +2012-05-14 - 94a9ac1 - lavf 54.5.100
 +  Add av_guess_sample_aspect_ratio() function.
 +
 +2012-04-20 - 65fa7bc - lavfi 2.70.100
 +  Add avfilter_unref_bufferp() to avfilter.h.
 +
 +2012-04-13 - 162e400 - lavfi 2.68.100
 +  Install libavfilter/asrc_abuffer.h public header.
 +
 +2012-03-26 - a67d9cf - lavfi 2.66.100
 +  Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions.
 +
 +2013-05-15 - ff46809 / e6c4ac7 - lavu 52.32.100 / 52.11.0 - pixdesc.h
    Replace PIX_FMT_* flags with AV_PIX_FMT_FLAG_*.
  
 -2013-04-03 - 507b1e4 - lavc 55.4.0 - avcodec.h
 +2013-04-03 - 6fc58a8 / 507b1e4 - lavc 55.7.100 / 55.4.0 - avcodec.h
    Add field_order to AVCodecParserContext.
  
 -2013-04-19 - 5e83d9a - lavc 55.2.0 - avcodec.h
 +2013-04-19 - f4b05cd / 5e83d9a - lavc 55.5.100 / 55.2.0 - avcodec.h
    Add CODEC_FLAG_UNALIGNED to allow decoders to produce unaligned output.
  
 -2013-04-11 - lavfi 3.8.0
 -  38f0c07 - Move all content from avfiltergraph.h to avfilter.h. Deprecate
 +2013-04-11 - lavfi 3.53.100 / 3.8.0
 +  231fd44 / 38f0c07 - Move all content from avfiltergraph.h to avfilter.h. Deprecate
              avfilterhraph.h, user applications should include just avfilter.h
 -  bc1a985 - Add avfilter_graph_alloc_filter(), deprecate avfilter_open() and
 +  86070b8 / bc1a985 - Add avfilter_graph_alloc_filter(), deprecate avfilter_open() and
              avfilter_graph_add_filter().
 -  1113672 - Add AVFilterContext.graph pointing to the AVFilterGraph that contains the
 +  4fde705 / 1113672 - Add AVFilterContext.graph pointing to the AVFilterGraph that contains the
              filter.
 -  48a5ada - Add avfilter_init_str(), deprecate avfilter_init_filter().
 -  1ba95a9 - Add avfilter_init_dict().
 -  7cdd737 - Add AVFilter.flags field and AVFILTER_FLAG_DYNAMIC_{INPUTS,OUTPUTS} flags.
 -  7e8fe4b - Add avfilter_pad_count() for counting filter inputs/outputs.
 -  fa2a34c - Add avfilter_next(), deprecate av_filter_next().
 +  710b0aa / 48a5ada - Add avfilter_init_str(), deprecate avfilter_init_filter().
 +  46de9ba / 1ba95a9 - Add avfilter_init_dict().
 +  16fc24b / 7cdd737 - Add AVFilter.flags field and AVFILTER_FLAG_DYNAMIC_{INPUTS,OUTPUTS} flags.
 +  f4db6bf / 7e8fe4b - Add avfilter_pad_count() for counting filter inputs/outputs.
 +  835cc0f / fa2a34c - Add avfilter_next(), deprecate av_filter_next().
              Deprecate avfilter_uninit().
  
 -2013-04-09 - lavfi 3.7.0 - avfilter.h
 -  b439c99 - Add AVFilter.priv_class for exporting filter options through the
 +2013-04-09 - lavfi 3.51.100 / 3.7.0 - avfilter.h
 +  0594ef0 / b439c99 - Add AVFilter.priv_class for exporting filter options through the
              AVOptions API in the similar way private options work in lavc and lavf.
 -  8114c10 - Add avfilter_get_class().
 +  44d4488 / 8114c10 - Add avfilter_get_class().
    Switch all filters to use AVOptions.
  
 -2013-03-19 - 2c328a9 - lavu 52.9.0 - pixdesc.h
 +2013-03-19 - 17ebef2 / 2c328a9 - lavu 52.20.100 / 52.9.0 - pixdesc.h
    Add av_pix_fmt_count_planes() function for counting planes in a pixel format.
  
 -2013-03-16 - 42c7c61 - lavfi 3.6.0
 +2013-03-16 - ecade98 / 42c7c61 - lavfi 3.47.100 / 3.6.0
    Add AVFilterGraph.nb_filters, deprecate AVFilterGraph.filter_count.
  
 -2013-03-08 - Reference counted buffers - lavu 52.8.0, lavc 55.0.0, lavf 55.0.0,
 -lavd 54.0.0, lavfi 3.5.0
 -  8e401db, 1cec062 - add a new API for reference counted buffers and buffer
 +2013-03-08 - Reference counted buffers - lavu 52.8.0, lavc 55.0.100 / 55.0.0, lavf 55.0.100 / 55.0.0,
 +lavd 54.4.100 / 54.0.0, lavfi 3.5.0
 +  36099df / 8e401db, 532f31a / 1cec062 - add a new API for reference counted buffers and buffer
                       pools (new header libavutil/buffer.h).
 -  1afddbe - add AVPacket.buf to allow reference counting for the AVPacket data.
 +  2653e12 / 1afddbe - add AVPacket.buf to allow reference counting for the AVPacket data.
              Add av_packet_from_data() function for constructing packets from
              av_malloc()ed data.
 -  7ecc2d4 - move AVFrame from lavc to lavu (new header libavutil/frame.h), add
 +  c4e8821 / 7ecc2d4 - move AVFrame from lavc to lavu (new header libavutil/frame.h), add
              AVFrame.buf/extended_buf to allow reference counting for the AVFrame
              data. Add new API for working with reference-counted AVFrames.
 -  759001c - add the refcounted_frames field to AVCodecContext to make audio and
 +  80e9e63 / 759001c - add the refcounted_frames field to AVCodecContext to make audio and
              video decoders return reference-counted frames. Add get_buffer2()
              callback to AVCodecContext which allocates reference-counted frames.
              Add avcodec_default_get_buffer2() as the default get_buffer2()
                  * qscale_table, qstride, qscale_type, mbskip_table, motion_val,
                    mb_type, dct_coeff, ref_index -- mpegvideo-specific tables,
                    which are not exported anymore.
 -  7e35037 - switch libavfilter to use AVFrame instead of AVFilterBufferRef. Add
 +  a05a44e / 7e35037 - switch libavfilter to use AVFrame instead of AVFilterBufferRef. Add
              av_buffersrc_add_frame(), deprecate av_buffersrc_buffer().
              Add av_buffersink_get_frame() and av_buffersink_get_samples(),
              deprecate av_buffersink_read() and av_buffersink_read_samples().
              Deprecate AVFilterBufferRef and all functions for working with it.
  
 -2013-03-17 - 12c5c1d - lavu 52.8.0 - avstring.h
 +2013-03-17 - 6c17ff8 / 12c5c1d - lavu 52.19.100 / 52.8.0 - avstring.h
    Add av_isdigit, av_isgraph, av_isspace, av_isxdigit.
  
 -2013-02-23 - 9f12235 - lavfi 3.4.0 - avfiltergraph.h
 +2013-02-23 - 71cf094 / 9f12235 - lavfi 3.40.100 / 3.4.0 - avfiltergraph.h
    Add resample_lavr_opts to AVFilterGraph for setting libavresample options
    for auto-inserted resample filters.
  
 -2013-01-25 - 38c1466 - lavu 52.7.0 - dict.h
 +2013-01-25 - e7e14bc / 38c1466 - lavu 52.17.100 / 52.7.0 - dict.h
    Add av_dict_parse_string() to set multiple key/value pairs at once from a
    string.
  
 -2013-01-25 - b85a5e8 - lavu 52.6.0 - avstring.h
 +2013-01-25 - 25be630 / b85a5e8 - lavu 52.16.100 / 52.6.0 - avstring.h
    Add av_strnstr()
  
 -2013-01-15 - 8ee288d - lavu 52.5.0 - hmac.h
 +2013-01-15 - e7e0186 / 8ee288d - lavu 52.15.100 / 52.5.0 - hmac.h
    Add AVHMAC.
  
 -2013-01-13 - 44e065d - lavc 54.36.0 - vdpau.h
 +2013-01-13 - 8ee7b38 / 44e065d - lavc 54.87.100 / 54.36.0 - vdpau.h
    Add AVVDPAUContext struct for VDPAU hardware-accelerated decoding.
  
 -2013-01-12 - 169fb94 - lavu 52.4.0 - pixdesc.h
 +2013-01-12 - dae382b / 169fb94 - lavu 52.14.100 / 52.4.0 - pixdesc.h
    Add AV_PIX_FMT_VDPAU flag.
  
 -2013-01-07 - 074a00d - lavr 1.1.0
 +2013-01-07 - 249fca3 / 074a00d - lavr 1.1.0
    Add avresample_set_channel_mapping() for input channel reordering,
    duplication, and silencing.
  
 -------------------------------8<-------------------------------------
 -                   9 branch was cut here
 ------------------------------>8--------------------------------------
 +2012-12-29 - lavu 52.13.100 / 52.3.0 - avstring.h
 +  2ce43b3 / d8fd06c - Add av_basename() and av_dirname().
 +  e13d5e9 / c1a02e8 - Add av_pix_fmt_get_chroma_sub_sample and deprecate
 +                      avcodec_get_chroma_sub_sample.
  
 -2012-12-29 - lavu 52.3.0
 -  d8fd06c - Add av_basename() and av_dirname().
 -  c1a02e8 - Add av_pix_fmt_get_chroma_sub_sample and deprecate
 -            avcodec_get_chroma_sub_sample.
 -
 -2012-11-11 - 5980f5d - lavu 52.2.0 - audioconvert.h
 +2012-11-11 - 03b0787 / 5980f5d - lavu 52.6.100 / 52.2.0 - audioconvert.h
    Rename audioconvert.h to channel_layout.h. audioconvert.h is now deprecated.
  
 -2012-11-05 - dfde8a3 - lavu 52.1.0 - intmath.h
 -  Add av_ctz() for trailing zero bit count
 -
 -2012-10-21 - a893655 - lavu 51.45.0 - error.h
 +2012-10-21 - e3a91c5 / a893655 - lavu 51.77.100 / 51.45.0 - error.h
    Add AVERROR_EXPERIMENTAL
  
 -2012-10-12 - d2fcb35 - lavu 51.44.0 - pixdesc.h
 +2012-10-12 - a33ed6b / d2fcb35 - lavu 51.76.100 / 51.44.0 - pixdesc.h
    Add functions for accessing pixel format descriptors.
    Accessing the av_pix_fmt_descriptors array directly is now
    deprecated.
  
 -2012-10-11 - 9a92aea - lavu 51.43.0 - aes.h, md5.h, sha.h, tree.h
 +2012-10-11 - f391e40 / 9a92aea - lavu 51.75.100 / 51.43.0 - aes.h, md5.h, sha.h, tree.h
    Add functions for allocating the opaque contexts for the algorithms,
 -  deprecate the context size variables.
  
 -2012-10-10 - b522000 - lavf 54.18.0 - avio.h
 +2012-10-10 - de31814 / b522000 - lavf 54.32.100 / 54.18.0 - avio.h
    Add avio_closep to complement avio_close.
  
 -2012-10-08 - 78071a1 - lavu 51.42.0 - pixfmt.h
 +2012-10-08 - ae77266 / 78071a1 - lavu 51.74.100 / 51.42.0 - pixfmt.h
    Rename PixelFormat to AVPixelFormat and all PIX_FMT_* to AV_PIX_FMT_*.
    To provide backwards compatibility, PixelFormat is now #defined as
    AVPixelFormat.
    'PixelFormat' identifier. Such code should either #undef PixelFormat
    or stop using the PixelFormat name.
  
 -2012-10-05 - e7ba5b1 - lavr 1.0.0 - avresample.h
 +2012-10-05 - 55c49af / e7ba5b1 - lavr 1.0.0 - avresample.h
    Data planes parameters to avresample_convert() and
    avresample_read() are now uint8_t** instead of void**.
    Libavresample is now stable.
  
 -2012-09-24 - a42aada - lavc 54.28.0 - avcodec.h
 +2012-09-26 - 3ba0dab7 / 1384df64 - lavf 54.29.101 / 56.06.3 - avformat.h
 +  Add AVFormatContext.avoid_negative_ts.
 +
 +2012-09-24 - 46a3595 / a42aada - lavc 54.59.100 / 54.28.0 - avcodec.h
    Add avcodec_free_frame(). This function must now
    be used for freeing an AVFrame.
  
 -2012-09-12 - 8919fee - lavu 51.41.0 - audioconvert.h
 +2012-09-12 - e3e09f2 / 8919fee - lavu 51.73.100 / 51.41.0 - audioconvert.h
    Added AV_CH_LOW_FREQUENCY_2 channel mask value.
  
 -2012-09-04 - 686a329 - lavu 51.40.0 - opt.h
 +2012-09-04 - b21b5b0 / 686a329 - lavu 51.71.100 / 51.40.0 - opt.h
    Reordered the fields in default_val in AVOption, changed which
    default_val field is used for which AVOptionType.
  
 -2012-08-30 - a231832 - lavc 54.26.1 - avcodec.h
 +2012-08-30 - 98298eb / a231832 - lavc 54.54.101 / 54.26.1 - avcodec.h
    Add codec descriptor properties AV_CODEC_PROP_LOSSY and
    AV_CODEC_PROP_LOSSLESS.
  
    Add codec descriptors for accessing codec properties without having
    to refer to a specific decoder or encoder.
  
 -  c223d79 - Add an AVCodecDescriptor struct and functions
 +  f5f3684 / c223d79 - Add an AVCodecDescriptor struct and functions
              avcodec_descriptor_get() and avcodec_descriptor_next().
 -  51efed1 - Add AVCodecDescriptor.props and AV_CODEC_PROP_INTRA_ONLY.
 -  91e59fe - Add avcodec_descriptor_get_by_name().
 +  f5f3684 / 51efed1 - Add AVCodecDescriptor.props and AV_CODEC_PROP_INTRA_ONLY.
 +  6c180b3 / 91e59fe - Add avcodec_descriptor_get_by_name().
  
 -
 -2012-08-08 - 1d9c2dc - lavu 51.39 - avutil.h
 -  Don't implicitly include libavutil/common.h in avutil.h
 -
 -2012-08-08 - 987170c - lavu 51.38 - dict.h
 +2012-08-08 - f5f3684 / 987170c - lavu 51.68.100 / 51.38.0 - dict.h
    Add av_dict_count().
  
 -2012-08-07 - 104e10f - lavc 54.25 - avcodec.h
 +2012-08-07 - 7a72695 / 104e10f - lavc 54.51.100 / 54.25.0 - avcodec.h
    Rename CodecID to AVCodecID and all CODEC_ID_* to AV_CODEC_ID_*.
    To provide backwards compatibility, CodecID is now #defined as AVCodecID.
    Note that this can break user code that includes avcodec.h and uses the
    'CodecID' identifier. Such code should either #undef CodecID or stop using the
    CodecID name.
  
 -2012-08-03 - 239fdf1 - lavu 51.37.1 - cpu.h
 +2012-08-03 - e776ee8 / 239fdf1 - lavu 51.66.101 / 51.37.1 - cpu.h
                         lsws 2.1.1   - swscale.h
    Rename AV_CPU_FLAG_MMX2  ---> AV_CPU_FLAG_MMXEXT.
    Rename SWS_CPU_CAPS_MMX2 ---> SWS_CPU_CAPS_MMXEXT.
  
 -2012-07-29 - 681ed00 - lavf 54.13.0 - avformat.h
 +2012-07-29 - 7c26761 / 681ed00 - lavf 54.22.100 / 54.13.0 - avformat.h
    Add AVFMT_FLAG_NOBUFFER for low latency use cases.
  
 -2012-07-20 - b70d89a - lavfi 3.0.0 - avfilter.h
 -  Add avfilter_unref_bufferp().
 -
 -2012-07-10 - 5fade8a - lavu 51.37.0
 +2012-07-10 - fbe0245 / f3e5e6f - lavu 51.65.100 / 51.37.0
    Add av_malloc_array() and av_mallocz_array()
  
 -2012-06-22 - d3d3a32 - lavu 51.34.0
 +2012-06-22 - e847f41 / d3d3a32 - lavu 51.61.100 / 51.34.0
    Add av_usleep()
  
 -2012-06-20 - ae0a301 - lavu 51.33.0
 +2012-06-20 - 4da42eb / ae0a301 - lavu 51.60.100 / 51.33.0
    Move av_gettime() to libavutil, add libavutil/time.h
  
 -2012-06-09 - 3971be0 - lavr 0.0.3
 +2012-06-09 - 82edf67 / 3971be0 - lavr 0.0.3
    Add a parameter to avresample_build_matrix() for Dolby/DPLII downmixing.
  
 -2012-06-12 - 9baeff9 - lavfi 2.23.0 - avfilter.h
 +2012-06-12 - c7b9eab / 9baeff9 - lavfi 2.79.100 / 2.23.0 - avfilter.h
    Add AVFilterContext.nb_inputs/outputs. Deprecate
    AVFilterContext.input/output_count.
  
 -2012-06-12 - 84b9fbe - lavfi 2.22.0 - avfilter.h
 +2012-06-12 - c7b9eab / 84b9fbe - lavfi 2.79.100 / 2.22.0 - avfilter.h
    Add avfilter_pad_get_type() and avfilter_pad_get_name(). Those
    should now be used instead of accessing AVFilterPad members
    directly.
  
 -2012-06-12 - b0f0dfc - lavu 51.32.0 - audioconvert.h
 +2012-06-12 - 3630a07 / b0f0dfc - lavu 51.57.100 / 51.32.0 - audioconvert.h
    Add av_get_channel_layout_channel_index(), av_get_channel_name()
    and av_channel_layout_extract_channel().
  
 -2012-05-25 - 154486f - lavu 51.31.0 - opt.h
 +2012-05-25 - 53ce990 / 154486f - lavu 51.55.100 / 51.31.0 - opt.h
    Add av_opt_set_bin()
  
 -2012-05-26 - e9cef89 - lavf 54.3.0
 -  Add AVFMT_TS_NONSTRICT format flag to indicate that a muxer supports
 -  non-increasing monotone timestamps.
 -
 -2012-05-15 - lavfi 2.17.0
 +2012-05-15 - lavfi 2.74.100 / 2.17.0
    Add support for audio filters
 -  ac71230/a2cd9be - add video/audio buffer sink in a new installed
 +  61930bd / ac71230, 1cbf7fb / a2cd9be - add video/audio buffer sink in a new installed
                      header buffersink.h
 -  720c6b7 - add av_buffersrc_write_frame(), deprecate
 +  1cbf7fb / 720c6b7 - add av_buffersrc_write_frame(), deprecate
              av_vsrc_buffer_add_frame()
 -  ab16504 - add avfilter_copy_buf_props()
 -  9453c9e - add extended_data to AVFilterBuffer
 -  1b8c927 - add avfilter_get_audio_buffer_ref_from_arrays()
 +  61930bd / ab16504 - add avfilter_copy_buf_props()
 +  61930bd / 9453c9e - add extended_data to AVFilterBuffer
 +  61930bd / 1b8c927 - add avfilter_get_audio_buffer_ref_from_arrays()
  
 -2012-05-09 - lavu 51.30.0 - samplefmt.h
 -  142e740 - add av_samples_copy()
 -  6d7f617 - add av_samples_set_silence()
 +2012-05-09 - lavu 51.53.100 / 51.30.0 - samplefmt.h
 +  61930bd / 142e740 - add av_samples_copy()
 +  61930bd / 6d7f617 - add av_samples_set_silence()
  
 -2012-05-09 - a5117a2 - lavc 54.13.1
 +2012-05-09 - 61930bd / a5117a2 - lavc 54.21.101 / 54.13.1
    For audio formats with fixed frame size, the last frame
    no longer needs to be padded with silence, libavcodec
    will handle this internally (effectively all encoders
    behave as if they had CODEC_CAP_SMALL_LAST_FRAME set).
  
 -2012-05-07 - 828bd08 - lavc 54.13.0 - avcodec.h
 +2012-05-07 - 653d117 / 828bd08 - lavc 54.20.100 / 54.13.0 - avcodec.h
    Add sample_rate and channel_layout fields to AVFrame.
  
 -2012-05-01 - 4010d72 - lavr 0.0.1
 +2012-05-01 - 2330eb1 / 4010d72 - lavr 0.0.1
    Change AV_MIX_COEFF_TYPE_Q6 to AV_MIX_COEFF_TYPE_Q8.
  
 -2012-04-25 - 3527a73 - lavu 51.29.0 - cpu.h
 +2012-04-25 - e890b68 / 3527a73 - lavu 51.48.100 / 51.29.0 - cpu.h
    Add av_parse_cpu_flags()
  
 -2012-04-24 - c8af852 - lavr 0.0.0
 +2012-04-24 - 3ead79e / c8af852 - lavr 0.0.0
    Add libavresample audio conversion library
  
 -2012-04-20 - 0c0d1bc - lavu 51.28.0 - audio_fifo.h
 +2012-04-20 - 3194ab7 / 0c0d1bc - lavu 51.47.100 / 51.28.0 - audio_fifo.h
    Add audio FIFO functions:
      av_audio_fifo_free()
      av_audio_fifo_alloc()
      av_audio_fifo_size()
      av_audio_fifo_space()
  
 -2012-04-14 - lavfi 2.16.0 - avfiltergraph.h
 -  d7bcc71 Add avfilter_graph_parse2().
 -  91d3cbe Add avfilter_inout_alloc() and avfilter_inout_free().
 +2012-04-14 - lavfi 2.70.100 / 2.16.0 - avfiltergraph.h
 +  7432bcf / d7bcc71 Add avfilter_graph_parse2().
  
 -2012-04-08 - 4d693b0 - lavu 51.27.0 - samplefmt.h
 +2012-04-08 - 6bfb304 / 4d693b0 - lavu 51.46.100 / 51.27.0 - samplefmt.h
    Add av_get_packed_sample_fmt() and av_get_planar_sample_fmt()
  
 -2012-04-05 - 5cc51a5 - lavu 51.26.0 - audioconvert.h
 -  Add av_get_default_channel_layout()
 +2012-03-21 - b75c67d - lavu 51.43.100
 +  Add bprint.h for bprint API.
 +
 +2012-02-21 - 9cbf17e - lavc 54.4.100
 +  Add av_get_pcm_codec() function.
 +
 +2012-02-16 - 560b224 - libswr 0.7.100
 +  Add swr_set_matrix() function.
 +
 +2012-02-09 - c28e7af - lavu 51.39.100
 +  Add a new installed header libavutil/timestamp.h with timestamp
 +  utilities.
 +
 +2012-02-06 - 70ffda3 - lavu 51.38.100
 +  Add av_parse_ratio() function to parseutils.h.
  
 -2012-03-20 - 3c90cc2 - lavfo 54.2.0
 +2012-02-06 - 70ffda3 - lavu 51.38.100
 +  Add AV_LOG_MAX_OFFSET macro to log.h.
 +
 +2012-02-02 - 0eaa123 - lavu 51.37.100
 +  Add public timecode helpers.
 +
 +2012-01-24 - 0c3577b - lavfi 2.60.100
 +  Add avfilter_graph_dump.
 +
 +2012-03-20 - 0ebd836 / 3c90cc2 - lavfo 54.2.0
    Deprecate av_read_packet(), use av_read_frame() with
    AVFMT_FLAG_NOPARSE | AVFMT_FLAG_NOFILLIN in AVFormatContext.flags
  
 -2012-03-06 - 4d851f8 - lavu 51.25.0 - cpu.h
 -  Add av_set_cpu_flags_mask().
 -
 -2012-03-05 - lavc 54.8.0
 -  6699d07 Add av_get_exact_bits_per_sample()
 -  9524cf7 Add av_get_audio_frame_duration()
 +2012-03-05 - lavc 54.10.100 / 54.8.0
 +  f095391 / 6699d07 Add av_get_exact_bits_per_sample()
 +  f095391 / 9524cf7 Add av_get_audio_frame_duration()
  
 -2012-03-04 - 44fe77b - lavc 54.7.0 - avcodec.h
 +2012-03-04 - 2af8f2c / 44fe77b - lavc 54.8.100 / 54.7.0 - avcodec.h
    Add av_codec_is_encoder/decoder().
  
 -2012-03-01 - 442c132 - lavc 54.3.0 - avcodec.h
 +2012-03-01 - 1eb7f39 / 442c132 - lavc 54.5.100 / 54.3.0 - avcodec.h
    Add av_packet_shrink_side_data.
  
 -2012-02-29 - dd2a4bc - lavf 54.2.0 - avformat.h
 +2012-02-29 - 79ae084 / dd2a4bc - lavf 54.2.100 / 54.2.0 - avformat.h
    Add AVStream.attached_pic and AV_DISPOSITION_ATTACHED_PIC,
    used for dealing with attached pictures/cover art.
  
 -2012-02-25 - c9bca80 - lavu 51.24.0 - error.h
 +2012-02-25 - 305e4b3 / c9bca80 - lavu 51.41.100 / 51.24.0 - error.h
    Add AVERROR_UNKNOWN
    NOTE: this was backported to 0.8
  
 -2012-02-20 - e9cda85 - lavc 54.2.0
 +2012-02-20 - eadd426 / e9cda85 - lavc 54.2.100 / 54.2.0
    Add duration field to AVCodecParserContext
  
 -2012-02-20 - 0b42a93 - lavu 51.23.1 - mathematics.h
 +2012-02-20 - eadd426 / 0b42a93 - lavu 51.40.100 / 51.23.1 - mathematics.h
    Add av_rescale_q_rnd()
  
 -2012-02-08 - 38d5533 - lavu 51.22.1 - pixdesc.h
 +2012-02-08 - f2b20b7 / 38d5533 - lavu 51.38.101 / 51.22.1 - pixdesc.h
    Add PIX_FMT_PSEUDOPAL flag.
  
 -2012-02-08 - 52f82a1 - lavc 54.01.0
 +2012-02-08 - f2b20b7 / 52f82a1 - lavc 54.2.100 / 54.1.0
    Add avcodec_encode_video2() and deprecate avcodec_encode_video().
  
 -2012-02-01 - 316fc74 - lavc 54.01.0
 +2012-02-01 - 4c677df / 316fc74 - lavc 54.1.0
    Add av_fast_padded_malloc() as alternative for av_realloc() when aligned
    memory is required. The buffer will always have FF_INPUT_BUFFER_PADDING_SIZE
    zero-padded bytes at the end.
  
 -2012-01-31 - dd6d3b0 - lavf 54.01.0
 +2012-01-31 - a369a6b / dd6d3b0 - lavf 54.1.0
    Add avformat_get_riff_video_tags() and avformat_get_riff_audio_tags().
    NOTE: this was backported to 0.8
  
 -2012-01-31 - af08d9a - lavc 54.01.0
 +2012-01-31 - a369a6b / af08d9a - lavc 54.1.0
    Add avcodec_is_open() function.
    NOTE: this was backported to 0.8
  
 -2012-01-30 - 8b93312 - lavu 51.22.0 - intfloat.h
 +2012-01-30 - 151ecc2 / 8b93312 - lavu 51.36.100 / 51.22.0 - intfloat.h
    Add a new installed header libavutil/intfloat.h with int/float punning
    functions.
    NOTE: this was backported to 0.8
  
 -2012-01-25 - lavf 53.22.0
 -  f1caf01 Allow doing av_write_frame(ctx, NULL) for flushing possible
 +2012-01-25 - lavf 53.31.100 / 53.22.0
 +  3c5fe5b / f1caf01 Allow doing av_write_frame(ctx, NULL) for flushing possible
            buffered data within a muxer. Added AVFMT_ALLOW_FLUSH for
            muxers supporting it (av_write_frame makes sure it is called
            only for muxers with this flag).
  
 -------------------------------8<-------------------------------------
 -                   0.8 branch was cut here
 ------------------------------>8--------------------------------------
 -
 -2012-01-15 - lavc 53.34.0
 +2012-01-15 - lavc 53.56.105 / 53.34.0
    New audio encoding API:
 -  b2c75b6 Add CODEC_CAP_VARIABLE_FRAME_SIZE capability for use by audio
 +  67f5650 / b2c75b6 Add CODEC_CAP_VARIABLE_FRAME_SIZE capability for use by audio
            encoders.
 -  5ee5fa0 Add avcodec_fill_audio_frame() as a convenience function.
 -  b2c75b6 Add avcodec_encode_audio2() and deprecate avcodec_encode_audio().
 +  67f5650 / 5ee5fa0 Add avcodec_fill_audio_frame() as a convenience function.
 +  67f5650 / b2c75b6 Add avcodec_encode_audio2() and deprecate avcodec_encode_audio().
            Add AVCodec.encode2().
  
 -2012-01-12 - 3167dc9 - lavfi 2.15.0
 +2012-01-12 - b18e17e / 3167dc9 - lavfi 2.59.100 / 2.15.0
    Add a new installed header -- libavfilter/version.h -- with version macros.
  
 -2011-01-03 - b73ec05 - lavu 51.21.0
 +
 +-------- 8< --------- FFmpeg 0.9 was cut here -------- 8< ---------
 +
 +2011-12-08 - a502939 - lavfi 2.52.0
 +  Add av_buffersink_poll_frame() to buffersink.h.
 +
 +2011-12-08 - 26c6fec - lavu 51.31.0
 +  Add av_log_format_line.
 +
 +2011-12-03 - 976b095 - lavu 51.30.0
 +  Add AVERROR_BUG.
 +
 +2011-11-24 - 573ffbb - 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-10-20 - b35e9e1 - lavu 51.22.0
 +  Add av_strtok() to avstring.h.
 +
 +2012-01-03 - ad1c8dd / b73ec05 - lavu 51.34.100 / 51.21.0
    Add av_popcount64
  
 -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-12-25 - lavc 53.31.0
 -  Add the following new fields to AVFrame:
 -    b58dbb5 sample_aspect_ratio
 -    3a2ddf7 width, height
 -    8a4a5f6 format
 -
 -2011-12-18 - 8400b12 - lavc 53.28.1
 +2011-12-18 - 7c29313 / 8400b12 - lavc 53.46.1 / 53.28.1
    Deprecate AVFrame.age. The field is unused.
  
 -2011-12-12 - 5266045 - lavf 53.17.0
 +2011-12-12 - 8bc7fe4 / 5266045 - lavf 53.25.0 / 53.17.0
    Add avformat_close_input().
    Deprecate av_close_input_file() and av_close_input_stream().
  
 -2011-12-09 - b2890f5 - lavu 51.20.0 - audioconvert.h
 +2011-12-09 - c59b80c / b2890f5 - lavu 51.32.0 / 51.20.0 - audioconvert.h
    Expand the channel layout list.
  
 -2011-12-02 - 0eea212 - lavc 53.25.0
 +2011-12-02 - e4de716 / 0eea212 - lavc 53.40.0 / 53.25.0
    Add nb_samples and extended_data fields to AVFrame.
    Deprecate AVCODEC_MAX_AUDIO_FRAME_SIZE.
    Deprecate avcodec_decode_audio3() in favor of avcodec_decode_audio4().
    avcodec_decode_audio4() writes output samples to an AVFrame, which allows
    audio decoders to use get_buffer().
  
 -2011-12-04 - 560f773 - lavc 53.24.0
 +2011-12-04 - e4de716 / 560f773 - lavc 53.40.0 / 53.24.0
    Change AVFrame.data[4]/base[4]/linesize[4]/error[4] to [8] at next major bump.
    Change AVPicture.data[4]/linesize[4] to [8] at next major bump.
    Change AVCodecContext.error[4] to [8] at next major bump.
    Add AV_NUM_DATA_POINTERS to simplify the bump transition.
  
 -2011-11-24 - lavu 51.19.0
 -  bd97b2e - add planar RGB pixel formats
 -  6b0768e - add PIX_FMT_PLANAR and PIX_FMT_RGB pixel descriptions
 +2011-11-24 - lavu 51.29.0 / 51.19.0
 +  92afb43 / bd97b2e - add planar RGB pixel formats
 +  92afb43 / 6b0768e - add PIX_FMT_PLANAR and PIX_FMT_RGB pixel descriptions
  
 -2011-11-23 - bbb46f3 - lavu 51.18.0
 +2011-11-23 - 8e576d5 / bbb46f3 - lavu 51.27.0 / 51.18.0
    Add av_samples_get_buffer_size(), av_samples_fill_arrays(), and
    av_samples_alloc(), to samplefmt.h.
  
 -2011-11-23 - 8889cc4 - lavu 51.17.0
 +2011-11-23 - 8e576d5 / 8889cc4 - lavu 51.27.0 / 51.17.0
    Add planar sample formats and av_sample_fmt_is_planar() to samplefmt.h.
  
 -2011-11-19 - f3a29b7 - lavc 53.21.0
 +2011-11-19 - dbb38bc / f3a29b7 - lavc 53.36.0 / 53.21.0
    Move some AVCodecContext fields to a new private struct, AVCodecInternal,
    which is accessed from a new field, AVCodecContext.internal.
    - fields moved:
        AVCodecContext.internal_buffer_count --> AVCodecInternal.buffer_count
        AVCodecContext.is_copy               --> AVCodecInternal.is_copy
  
 -2011-11-16 - 6270671 - lavu 51.16.0
 +2011-11-16 - 8709ba9 / 6270671 - lavu 51.26.0 / 51.16.0
    Add av_timegm()
  
 -2011-11-13 - lavf 53.15.0
 +2011-11-13 - lavf 53.21.0 / 53.15.0
    New interrupt callback API, allowing per-AVFormatContext/AVIOContext
    interrupt callbacks.
 -  6aa0b98 Add AVIOInterruptCB struct and the interrupt_callback field to
 +  5f268ca / 6aa0b98 Add AVIOInterruptCB struct and the interrupt_callback field to
            AVFormatContext.
 -  1dee0ac Add avio_open2() with additional parameters. Those are
 +  5f268ca / 1dee0ac Add avio_open2() with additional parameters. Those are
            an interrupt callback and an options AVDictionary.
            This will allow passing AVOptions to protocols after lavf
            54.0.
  
 -2011-11-06 - ba04ecf - lavu 51.14.0
 +2011-11-06 - 13b7781 / ba04ecf - lavu 51.24.0 / 51.14.0
    Add av_strcasecmp() and av_strncasecmp() to avstring.h.
  
 -2011-11-06 - 07b172f - lavu 51.13.0
 +2011-11-06 - 13b7781 / 07b172f - lavu 51.24.0 / 51.13.0
    Add av_toupper()/av_tolower()
  
 -2011-11-05 - b6d08f4 - lavf 53.13.0
 +2011-11-05 - d8cab5c / b6d08f4 - lavf 53.19.0 / 53.13.0
    Add avformat_network_init()/avformat_network_deinit()
  
 -2011-10-27 - 512557b - lavc 53.15.0
 +2011-10-27 - 6faf0a2 / 512557b - lavc 53.24.0 / 53.15.0
    Remove avcodec_parse_frame.
    Deprecate AVCodecContext.parse_only and CODEC_CAP_PARSE_ONLY.
  
 -2011-10-19 - 569129a - lavf 53.10.0
 +2011-10-19 - d049257 / 569129a - lavf 53.17.0 / 53.10.0
    Add avformat_new_stream(). Deprecate av_new_stream().
  
 -2011-10-13 - b631fba - lavf 53.9.0
 +2011-10-13 - 91eb1b1 / b631fba - lavf 53.16.0 / 53.9.0
    Add AVFMT_NO_BYTE_SEEK AVInputFormat flag.
  
 -2011-10-12 - lavu 51.12.0
 +2011-10-12 - lavu 51.21.0 / 51.12.0
    AVOptions API rewrite.
  
 -  - 145f741 FF_OPT_TYPE* renamed to AV_OPT_TYPE_*
 +  - f884ef0 / 145f741 FF_OPT_TYPE* renamed to AV_OPT_TYPE_*
    - new setting/getting functions with slightly different semantics:
 -        dac66da av_set_string3 -> av_opt_set
 +        f884ef0 / dac66da av_set_string3 -> av_opt_set
                  av_set_double  -> av_opt_set_double
                  av_set_q       -> av_opt_set_q
                  av_set_int     -> av_opt_set_int
  
 -        41d9d51 av_get_string  -> av_opt_get
 +        f884ef0 / 41d9d51 av_get_string  -> av_opt_get
                  av_get_double  -> av_opt_get_double
                  av_get_q       -> av_opt_get_q
                  av_get_int     -> av_opt_get_int
  
 -  - 8c5dcaa trivial rename av_next_option -> av_opt_next
 -  - 641c7af new functions - av_opt_child_next, av_opt_child_class_next
 +  - f884ef0 / 8c5dcaa trivial rename av_next_option -> av_opt_next
 +  - f884ef0 / 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 - 1889c67 / 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 - 1889c67 / c11fb82 - lavu 51.15.0
    Add AV_OPT_SEARCH_FAKE_OBJ flag for av_opt_find() function.
  
 -2011-08-26 - lavu 51.9.0
 -  - f2011ed Add av_fifo_peek2(), deprecate av_fifo_peek().
 -  - add41de..abc78a5 Do not include intfloat_readwrite.h,
 +2011-08-14 - 323b930 - lavu 51.12.0
 +  Add av_fifo_peek2(), deprecate av_fifo_peek().
 +
 +2011-08-26 - lavu 51.14.0 / 51.9.0
 +  - 976a8b2 / add41de..976a8b2 / 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 - 27fbe31 / 48f9e45 - lavf 53.11.0 / 53.8.0
    Add avformat_query_codec().
  
 -2011-08-16 - bca06e7 - lavc 53.8.0
 +2011-08-16 - 27fbe31 / bca06e7 - lavc 53.11.0
    Add avcodec_get_type().
  
 -2011-08-06 - 2f63440 - lavf 53.4.0
 +2011-08-06 - 0cb233c / 2f63440 - lavf 53.7.0
    Add error_recognition to AVFormatContext.
  
 -2011-08-02 - 9d39cbf - lavc 53.7.1
 +2011-08-02 - 1d186e9 / 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 - 3602ad7 / a67c061 - lavf 53.6.0
    Add avformat_find_stream_info(), deprecate av_find_stream_info().
    NOTE: this was backported to 0.7
  
 -2011-07-10 - 0b950fe - lavc 53.6.0
 +2011-07-10 - 3602ad7 / 0b950fe - lavc 53.8.0
    Add avcodec_open2(), deprecate avcodec_open().
    NOTE: this was backported to 0.7
  
    Add avcodec_alloc_context3. Deprecate avcodec_alloc_context() and
    avcodec_alloc_context2().
  
 -2011-06-23 - 67e9ae1 - lavu 51.8.0 - attributes.h
 -  Add av_printf_format().
 +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.
 +
 +
 +-------- 8< --------- FFmpeg 0.7 was cut here -------- 8< ---------
 +
 +
 +
 +-------- 8< --------- FFmpeg 0.8 was cut here -------- 8< ---------
 +
 +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.
  
 -------------------------------8<-------------------------------------
 -                   0.7 branch was cut here
 ------------------------------>8--------------------------------------
 +2011-06-19 - 44f669e - lavfi 2.21.0 - vsink_buffer.h
 +  Add video sink buffer and vsink_buffer.h public header.
  
 -2011-06-16 - 05e84c9, 25de595 - lavf 53.2.0 - avformat.h
 +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 - 686959e / 67e9ae1 - lavu 51.10.0 / 51.8.0 - attributes.h
 +  Add av_printf_format().
 +
 +2011-06-16 - 2905e3f / 05e84c9, 2905e3f / 25de595 - lavf 53.4.0 / 53.2.0 - avformat.h
    Add avformat_open_input and avformat_write_header().
    Deprecate av_open_input_stream, av_open_input_file,
    AVFormatParameters and av_write_header.
  
 -2011-06-16 - 7e83e1c, dc59ec5 - lavu 51.7.0 - opt.h
 +2011-06-16 - 2905e3f / 7e83e1c, 2905e3f / dc59ec5 - lavu 51.9.0 / 51.7.0 - opt.h
    Add av_opt_set_dict() and av_opt_find().
    Deprecate av_find_opt().
    Add AV_DICT_APPEND flag.
  
 -2011-06-10 - cb7c11c - lavu 51.6.0 - opt.h
 +2011-06-10 - 45fb647 / 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 - f9ecb84 / 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 - d552f61 / 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 - f956924 / 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 - 39e4206 / 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 - 75a37b5 / 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 - 59eb12f / 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-04-26 - bebe72f - lavu 51.1.0 - avutil.h
 +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 - d7e5aeb / 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
    libavcodec/avcodec.h.
  
 -2011-04-26 - 10d3940 - lavfi 2.3.0 - avfilter.h
 +2011-04-26 - d7e5aeb / 10d3940 - lavfi 2.3.0 - avfilter.h
    Add pict_type and key_frame fields to AVFilterBufferRefVideo.
  
 -2011-04-26 - 7a11c82 - lavfi 2.2.0 - vsrc_buffer
 +2011-04-26 - d7e5aeb / 7a11c82 - lavfi 2.2.0 - vsrc_buffer
    Add sample_aspect_ratio fields to vsrc_buffer arguments
  
 -2011-04-21 - 94f7451 - lavc 53.1.0 - avcodec.h
 +2011-04-21 - 8772156 / 94f7451 - lavc 53.1.0 - avcodec.h
    Add CODEC_CAP_SLICE_THREADS for codecs supporting sliced threading.
  
  2011-04-15 - lavc 52.120.0 - avcodec.h
    AVPacket structure got additional members for passing side information:
 -    4de339e introduce side information for AVPacket
 -    2d8591c make containers pass palette change in AVPacket
 +    c407984 / 4de339e introduce side information for AVPacket
 +    c407984 / 2d8591c make containers pass palette change in AVPacket
  
  2011-04-12 - lavf 52.107.0 - avio.h
    Avio cleanup, part II - deprecate the entire URLContext API:
 -    175389c add avio_check as a replacement for url_exist
 -    ff1ec0c add avio_pause and avio_seek_time as replacements
 +    c55780d / 175389c add avio_check as a replacement for url_exist
 +    9891004 / ff1ec0c add avio_pause and avio_seek_time as replacements
              for _av_url_read_fseek/fpause
 -    cdc6a87 deprecate av_protocol_next(), avio_enum_protocols
 +    d4d0932 / cdc6a87 deprecate av_protocol_next(), avio_enum_protocols
              should be used instead.
 -    80c6e23 rename url_set_interrupt_cb->avio_set_interrupt_cb.
 -    f87b1b3 rename open flags: URL_* -> AVIO_*
 -    f8270bb add avio_enum_protocols.
 -    5593f03 deprecate URLProtocol.
 -    c486dad deprecate URLContext.
 -    026e175 deprecate the typedef for URLInterruptCB
 -    8e76a19 deprecate av_register_protocol2.
 -    b840484 deprecate URL_PROTOCOL_FLAG_NESTED_SCHEME
 -    1305d93 deprecate av_url_read_seek
 -    fa104e1 deprecate av_url_read_pause
 -    727c7aa deprecate url_get_filename().
 -    5958df3 deprecate url_max_packet_size().
 -    1869ea0 deprecate url_get_file_handle().
 -    32a97d4 deprecate url_filesize().
 -    e52a914 deprecate url_close().
 -    58a48c6 deprecate url_seek().
 -    925e908 deprecate url_write().
 -    dce3756 deprecate url_read_complete().
 -    bc371ac deprecate url_read().
 -    0589da0 deprecate url_open().
 -    62eaaea deprecate url_connect.
 -    5652bb9 deprecate url_alloc.
 -    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
 +    c88caa5 / 80c6e23 rename url_set_interrupt_cb->avio_set_interrupt_cb.
 +    c88caa5 / f87b1b3 rename open flags: URL_* -> AVIO_*
 +    d4d0932 / f8270bb add avio_enum_protocols.
 +    d4d0932 / 5593f03 deprecate URLProtocol.
 +    d4d0932 / c486dad deprecate URLContext.
 +    d4d0932 / 026e175 deprecate the typedef for URLInterruptCB
 +    c88caa5 / 8e76a19 deprecate av_register_protocol2.
 +    11d7841 / b840484 deprecate URL_PROTOCOL_FLAG_NESTED_SCHEME
 +    11d7841 / 1305d93 deprecate av_url_read_seek
 +    11d7841 / fa104e1 deprecate av_url_read_pause
 +    434f248 / 727c7aa deprecate url_get_filename().
 +    434f248 / 5958df3 deprecate url_max_packet_size().
 +    434f248 / 1869ea0 deprecate url_get_file_handle().
 +    434f248 / 32a97d4 deprecate url_filesize().
 +    434f248 / e52a914 deprecate url_close().
 +    434f248 / 58a48c6 deprecate url_seek().
 +    434f248 / 925e908 deprecate url_write().
 +    434f248 / dce3756 deprecate url_read_complete().
 +    434f248 / bc371ac deprecate url_read().
 +    434f248 / 0589da0 deprecate url_open().
 +    434f248 / 62eaaea deprecate url_connect.
 +    434f248 / 5652bb9 deprecate url_alloc.
 +    434f248 / 333e894 deprecate url_open_protocol
 +    434f248 / e230705 deprecate url_poll and URLPollEntry
  
  2011-04-08 - lavf 52.106.0 - avformat.h
    Minor avformat.h cleanup:
 -    a9bf9d8 deprecate av_guess_image2_codec
 -    c3675df rename avf_sdp_create->av_sdp_create
 +    d4d0932 / a9bf9d8 deprecate av_guess_image2_codec
 +    d4d0932 / c3675df rename avf_sdp_create->av_sdp_create
  
  2011-04-03 - lavf 52.105.0 - avio.h
    Large-scale renaming/deprecating of AVIOContext-related functions:
 -    724f6a0 deprecate url_fdopen
 -    403ee83 deprecate url_open_dyn_packet_buf
 -    6dc7d80 rename url_close_dyn_buf       -> avio_close_dyn_buf
 -    b92c545 rename url_open_dyn_buf        -> avio_open_dyn_buf
 -    8978fed introduce an AVIOContext.seekable field as a replacement for
 +    2cae980 / 724f6a0 deprecate url_fdopen
 +    2cae980 / 403ee83 deprecate url_open_dyn_packet_buf
 +    2cae980 / 6dc7d80 rename url_close_dyn_buf       -> avio_close_dyn_buf
 +    2cae980 / b92c545 rename url_open_dyn_buf        -> avio_open_dyn_buf
 +    2cae980 / 8978fed introduce an AVIOContext.seekable field as a replacement for
              AVIOContext.is_streamed and url_is_streamed()
 -    b64030f deprecate get_checksum()
 -    4c4427a deprecate init_checksum()
 -    4ec153b deprecate udp_set_remote_url/get_local_port
 -    933e90a deprecate av_url_read_fseek/fpause
 -    8d9769a deprecate url_fileno
 -    b7f2fdd rename put_flush_packet -> avio_flush
 -    35f1023 deprecate url_close_buf
 -    83fddae deprecate url_open_buf
 -    d9d86e0 rename url_fprintf -> avio_printf
 -    59f65d9 deprecate url_setbufsize
 -    3e68b3b deprecate url_ferror
 -    66e5b1d deprecate url_feof
 +    1caa412 / b64030f deprecate get_checksum()
 +    1caa412 / 4c4427a deprecate init_checksum()
 +    2fd41c9 / 4ec153b deprecate udp_set_remote_url/get_local_port
 +    4fa0e24 / 933e90a deprecate av_url_read_fseek/fpause
 +    4fa0e24 / 8d9769a deprecate url_fileno
 +    0fecf26 / b7f2fdd rename put_flush_packet -> avio_flush
 +    0fecf26 / 35f1023 deprecate url_close_buf
 +    0fecf26 / 83fddae deprecate url_open_buf
 +    0fecf26 / d9d86e0 rename url_fprintf -> avio_printf
 +    0fecf26 / 59f65d9 deprecate url_setbufsize
 +    6947b0c / 3e68b3b deprecate url_ferror
      e8bb2e2 deprecate url_fget_max_packet_size
      76aa876 rename url_fsize -> avio_size
      e519753 deprecate url_fgetc
      b3db9ce deprecate get_partial_buffer
      8d9ac96 rename av_alloc_put_byte -> avio_alloc_context
  
 -2011-03-25 - 34b47d7 - lavc 52.115.0 - AVCodecContext.audio_service_type
 +2011-03-25 - 27ef7b1 / 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-10 - 12c14cd - lavf 52.99.0 - AVStream.disposition
    Add AV_DISPOSITION_HEARING_IMPAIRED and AV_DISPOSITION_VISUAL_IMPAIRED.
  
 -2011-02-09 - 5592734 - lavc 52.112.0 - avcodec_thread_init()
 +2011-02-09 - c0b102c - lavc 52.112.0 - avcodec_thread_init()
    Deprecate avcodec_thread_init()/avcodec_thread_free() use; instead
    set thread_count before calling avcodec_open.
  
 -2011-02-09 - 778b08a - lavc 52.111.0 - threading API
 +2011-02-09 - 37b00b4 - lavc 52.111.0 - threading API
    Add CODEC_CAP_FRAME_THREADS with new restrictions on get_buffer()/
    release_buffer()/draw_horiz_band() callbacks for appropriate codecs.
    Add thread_type and active_thread_type fields to AVCodecContext.
  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 - a242ac3 - lavfi 1.74.0 - AVFilterBufferRefAudioProps
    Rename AVFilterBufferRefAudioProps.samples_nb to nb_samples.
  
  2010-06-02 - 7e566bb - lavc 52.73.0 - av_get_codec_tag_string()
    Add av_get_codec_tag_string().
  
 +
 +-------- 8< --------- FFmpeg 0.6 was cut here -------- 8< ---------
 +
  2010-06-01 - 2b99142 - lsws 0.11.0 - convertPalette API
    Add sws_convertPalette8ToPacked32() and sws_convertPalette8ToPacked24().
  
  2010-05-09 - b6bc205 - lavfi 1.20.0 - AVFilterPicRef
    Add interlaced and top_field_first fields to AVFilterPicRef.
  
 -------------------------------8<-------------------------------------
 -                   0.6 branch was cut here
 ------------------------------>8--------------------------------------
 -
  2010-05-01 - 8e2ee18 - lavf 52.62.0 - probe function
    Add av_probe_input_format2 to API, it allows ignoring probe
    results below given score and returns the actual probe score.
diff --combined libavcodec/avcodec.h
index 94993d337105374358549dcf272772971c3edb4d,33de8ec4095e32b1a275d3b19e439490e66353c0..0d37083ee2f8fb38fe0380579e20dd2ed6c04826
@@@ -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
   */
  
@@@ -33,7 -33,6 +33,7 @@@
  #include "libavutil/avutil.h"
  #include "libavutil/buffer.h"
  #include "libavutil/cpu.h"
 +#include "libavutil/channel_layout.h"
  #include "libavutil/dict.h"
  #include "libavutil/frame.h"
  #include "libavutil/log.h"
  
  #include "version.h"
  
 -#if FF_API_FAST_MALLOC
 -// to provide fast_*alloc
 -#include "libavutil/mem.h"
 -#endif
 -
  /**
   * @defgroup libavc Encoding/Decoding Library
   * @{
@@@ -91,8 -95,8 +91,8 @@@
   * details.
   *
   * 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.
 + * 1. no value of an existing codec ID changes (that would break ABI),
 + * 2. it is as close as possible to similar codecs
   *
   * After adding new codec IDs, do not forget to add an entry to the codec
   * descriptor list and bump libavcodec minor version.
@@@ -240,7 -244,7 +240,7 @@@ enum AVCodecID 
      AV_CODEC_ID_ANM,
      AV_CODEC_ID_BINKVIDEO,
      AV_CODEC_ID_IFF_ILBM,
 -    AV_CODEC_ID_IFF_BYTERUN1,
 +#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM
      AV_CODEC_ID_KGV1,
      AV_CODEC_ID_YOP,
      AV_CODEC_ID_VP8,
      AV_CODEC_ID_WEBP,
      AV_CODEC_ID_HNM4_VIDEO,
      AV_CODEC_ID_HEVC,
 +#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC
      AV_CODEC_ID_FIC,
      AV_CODEC_ID_ALIAS_PIX,
      AV_CODEC_ID_BRENDER_PIX,
      AV_CODEC_ID_SCREENPRESSO,
      AV_CODEC_ID_RSCC,
  
 +    AV_CODEC_ID_Y41P = 0x8000,
 +    AV_CODEC_ID_AVRP,
 +    AV_CODEC_ID_012V,
 +    AV_CODEC_ID_AVUI,
 +    AV_CODEC_ID_AYUV,
 +    AV_CODEC_ID_TARGA_Y216,
 +    AV_CODEC_ID_V308,
 +    AV_CODEC_ID_V408,
 +    AV_CODEC_ID_YUV4,
 +    AV_CODEC_ID_AVRN,
 +    AV_CODEC_ID_CPIA,
 +    AV_CODEC_ID_XFACE,
 +    AV_CODEC_ID_SNOW,
 +    AV_CODEC_ID_SMVJPEG,
 +    AV_CODEC_ID_APNG,
 +    AV_CODEC_ID_DAALA,
 +    AV_CODEC_ID_CFHD,
 +
      /* various PCM "codecs" */
      AV_CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the start of audio codecs
      AV_CODEC_ID_PCM_S16LE = 0x10000,
      AV_CODEC_ID_PCM_S24LE_PLANAR,
      AV_CODEC_ID_PCM_S32LE_PLANAR,
      AV_CODEC_ID_PCM_S16BE_PLANAR,
 +    /* new PCM "codecs" should be added right below this line starting with
 +     * an explicit value of for example 0x10800
 +     */
  
      /* various ADPCM codecs */
      AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
      AV_CODEC_ID_ADPCM_G722,
      AV_CODEC_ID_ADPCM_IMA_APC,
      AV_CODEC_ID_ADPCM_VIMA,
 +#if FF_API_VIMA_DECODER
 +    AV_CODEC_ID_VIMA = AV_CODEC_ID_ADPCM_VIMA,
 +#endif
 +
 +    AV_CODEC_ID_ADPCM_AFC = 0x11800,
 +    AV_CODEC_ID_ADPCM_IMA_OKI,
 +    AV_CODEC_ID_ADPCM_DTK,
 +    AV_CODEC_ID_ADPCM_IMA_RAD,
 +    AV_CODEC_ID_ADPCM_G726LE,
 +    AV_CODEC_ID_ADPCM_THP_LE,
 +    AV_CODEC_ID_ADPCM_PSX,
 +    AV_CODEC_ID_ADPCM_AICA,
  
      /* AMR */
      AV_CODEC_ID_AMR_NB = 0x12000,
      AV_CODEC_ID_XAN_DPCM,
      AV_CODEC_ID_SOL_DPCM,
  
 +    AV_CODEC_ID_SDX2_DPCM = 0x14800,
 +
      /* audio codecs */
      AV_CODEC_ID_MP2 = 0x15000,
      AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
      AV_CODEC_ID_ON2AVC,
      AV_CODEC_ID_DSS_SP,
  
 +    AV_CODEC_ID_FFWAVESYNTH = 0x15800,
 +    AV_CODEC_ID_SONIC,
 +    AV_CODEC_ID_SONIC_LS,
 +    AV_CODEC_ID_EVRC,
 +    AV_CODEC_ID_SMV,
 +    AV_CODEC_ID_DSD_LSBF,
 +    AV_CODEC_ID_DSD_MSBF,
 +    AV_CODEC_ID_DSD_LSBF_PLANAR,
 +    AV_CODEC_ID_DSD_MSBF_PLANAR,
 +    AV_CODEC_ID_4GV,
 +    AV_CODEC_ID_INTERPLAY_ACM,
 +    AV_CODEC_ID_XMA1,
 +    AV_CODEC_ID_XMA2,
 +
      /* subtitle codecs */
      AV_CODEC_ID_FIRST_SUBTITLE = 0x17000,          ///< A dummy ID pointing at the start of subtitle codecs.
      AV_CODEC_ID_DVD_SUBTITLE = 0x17000,
      AV_CODEC_ID_DVB_TELETEXT,
      AV_CODEC_ID_SRT,
  
 +    AV_CODEC_ID_MICRODVD   = 0x17800,
 +    AV_CODEC_ID_EIA_608,
 +    AV_CODEC_ID_JACOSUB,
 +    AV_CODEC_ID_SAMI,
 +    AV_CODEC_ID_REALTEXT,
 +    AV_CODEC_ID_STL,
 +    AV_CODEC_ID_SUBVIEWER1,
 +    AV_CODEC_ID_SUBVIEWER,
 +    AV_CODEC_ID_SUBRIP,
 +    AV_CODEC_ID_WEBVTT,
 +    AV_CODEC_ID_MPL2,
 +    AV_CODEC_ID_VPLAYER,
 +    AV_CODEC_ID_PJS,
 +    AV_CODEC_ID_ASS,
 +    AV_CODEC_ID_HDMV_TEXT_SUBTITLE,
 +
      /* other specific kind of codecs (generally used for attachments) */
      AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.
      AV_CODEC_ID_TTF = 0x18000,
  
 +    AV_CODEC_ID_BINTEXT    = 0x18800,
 +    AV_CODEC_ID_XBIN,
 +    AV_CODEC_ID_IDF,
 +    AV_CODEC_ID_OTF,
 +    AV_CODEC_ID_SMPTE_KLV,
 +    AV_CODEC_ID_DVD_NAV,
 +    AV_CODEC_ID_TIMED_ID3,
 +    AV_CODEC_ID_BIN_DATA,
 +
 +
      AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
  
      AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
@@@ -574,12 -502,6 +574,12 @@@ typedef struct AVCodecDescriptor 
       * Codec properties, a combination of AV_CODEC_PROP_* flags.
       */
      int             props;
 +    /**
 +     * MIME type(s) associated with the codec.
 +     * May be NULL; if not, a NULL-terminated array of MIME types.
 +     * The first item is always non-NULL and is the preferred MIME type.
 +     */
 +    const char *const *mime_types;
      /**
       * If non-NULL, an array of profiles recognized for this codec.
       * Terminated with FF_PROFILE_UNKNOWN.
   * equal.
   */
  #define AV_CODEC_PROP_REORDER       (1 << 3)
 +/**
 + * Subtitle codec is bitmap based
 + * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field.
 + */
 +#define AV_CODEC_PROP_BITMAP_SUB    (1 << 16)
 +/**
 + * Subtitle codec is text based.
 + * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field.
 + */
 +#define AV_CODEC_PROP_TEXT_SUB      (1 << 17)
  
  /**
   * @ingroup lavc_decoding
   * Note: If the first 23 bits of the additional bytes are not 0, then damaged
   * MPEG bitstreams could cause overread and segfault.
   */
 -#define AV_INPUT_BUFFER_PADDING_SIZE 8
 +#define AV_INPUT_BUFFER_PADDING_SIZE 32
  
  /**
   * @ingroup lavc_encoding
  /**
   * @deprecated use AV_INPUT_BUFFER_PADDING_SIZE instead
   */
 -#define FF_INPUT_BUFFER_PADDING_SIZE 8
 +#define FF_INPUT_BUFFER_PADDING_SIZE 32
  
  /**
   * @deprecated use AV_INPUT_BUFFER_MIN_SIZE instead
@@@ -668,7 -580,6 +668,7 @@@ enum Motion_Est_ID 
      ME_HEX,         ///< hexagon based search
      ME_UMH,         ///< uneven multi-hexagon search
      ME_TESA,        ///< transformed exhaustive search algorithm
 +    ME_ITER=50,     ///< iterative search
  };
  #endif
  
@@@ -682,7 -593,6 +682,7 @@@ enum AVDiscard
      AVDISCARD_DEFAULT =  0, ///< discard useless packets like 0 size packets in avi
      AVDISCARD_NONREF  =  8, ///< discard all non reference
      AVDISCARD_BIDIR   = 16, ///< discard all bidirectional frames
 +    AVDISCARD_NONINTRA= 24, ///< discard all non intra frames
      AVDISCARD_NONKEY  = 32, ///< discard all frames except keyframes
      AVDISCARD_ALL     = 48, ///< discard all
  };
@@@ -793,7 -703,7 +793,7 @@@ typedef struct RcOverride
   * interlaced motion estimation
   */
  #define AV_CODEC_FLAG_INTERLACED_ME   (1 << 29)
 -#define AV_CODEC_FLAG_CLOSED_GOP      (1 << 31)
 +#define AV_CODEC_FLAG_CLOSED_GOP      (1U << 31)
  
  /**
   * Allow non spec compliant speedup tricks.
   * Place global headers at every keyframe instead of in extradata.
   */
  #define AV_CODEC_FLAG2_LOCAL_HEADER   (1 <<  3)
 +
 +/**
 + * timecode is in drop frame format. DEPRECATED!!!!
 + */
 +#define AV_CODEC_FLAG2_DROP_FRAME_TIMECODE (1 << 13)
 +
  /**
   * Input bitstream might be truncated at a packet boundaries
   * instead of only at frame boundaries.
   */
  #define AV_CODEC_FLAG2_IGNORE_CROP    (1 << 16)
  
 +/**
 + * Show all frames before the first keyframe
 + */
 +#define AV_CODEC_FLAG2_SHOW_ALL       (1 << 22)
 +/**
 + * Export motion vectors through frame side data
 + */
 +#define AV_CODEC_FLAG2_EXPORT_MVS     (1 << 28)
 +/**
 + * Do not skip samples and export skip information as frame side data
 + */
 +#define AV_CODEC_FLAG2_SKIP_MANUAL    (1 << 29)
 +/**
 + * Do not reset ASS ReadOrder field on flush (subtitles decoding)
 + */
 +#define AV_CODEC_FLAG2_RO_FLUSH_NOOP  (1 << 30)
 +
  /* Unsupported options :
   *              Syntax Arithmetic coding (SAC)
   *              Reference Picture Selection
   * This can be used to prevent truncation of the last audio samples.
   */
  #define AV_CODEC_CAP_SMALL_LAST_FRAME    (1 <<  6)
 +
 +#if FF_API_CAP_VDPAU
 +/**
 + * Codec can export data for HW decoding (VDPAU).
 + */
 +#define AV_CODEC_CAP_HWACCEL_VDPAU       (1 <<  7)
 +#endif
 +
  /**
   * Codec can output multiple frames per AVPacket
   * Normally demuxers return one frame at a time, demuxers which do not do
   * Audio encoder supports receiving a different number of samples in each call.
   */
  #define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16)
 +/**
 + * Codec is intra only.
 + */
 +#define AV_CODEC_CAP_INTRA_ONLY       0x40000000
 +/**
 + * Codec is lossless.
 + */
 +#define AV_CODEC_CAP_LOSSLESS         0x80000000
 +
  
  #if FF_API_WITHOUT_PREFIX
  /**
   * Allow decoders to produce frames with data planes that are not aligned
   * to CPU requirements (e.g. due to cropping).
   */
 -#define CODEC_FLAG_UNALIGNED 0x0001
 -#define CODEC_FLAG_QSCALE 0x0002  ///< Use fixed qscale.
 -#define CODEC_FLAG_4MV    0x0004  ///< 4 MV per MB allowed / advanced prediction for H.263.
 -#define CODEC_FLAG_OUTPUT_CORRUPT 0x0008 ///< Output even those frames that might be corrupted
 -#define CODEC_FLAG_QPEL   0x0010  ///< Use qpel MC.
 +#define CODEC_FLAG_UNALIGNED AV_CODEC_FLAG_UNALIGNED
 +#define CODEC_FLAG_QSCALE AV_CODEC_FLAG_QSCALE
 +#define CODEC_FLAG_4MV    AV_CODEC_FLAG_4MV
 +#define CODEC_FLAG_OUTPUT_CORRUPT AV_CODEC_FLAG_OUTPUT_CORRUPT
 +#define CODEC_FLAG_QPEL   AV_CODEC_FLAG_QPEL
  #if FF_API_GMC
  /**
   * @deprecated use the "gmc" private option of the libxvid encoder
   */
  #define CODEC_FLAG_INPUT_PRESERVED 0x0100
  #endif
 -#define CODEC_FLAG_PASS1           0x0200   ///< Use internal 2pass ratecontrol in first pass mode.
 -#define CODEC_FLAG_PASS2           0x0400   ///< Use internal 2pass ratecontrol in second pass mode.
 -#define CODEC_FLAG_GRAY            0x2000   ///< Only decode/encode grayscale.
 +#define CODEC_FLAG_PASS1           AV_CODEC_FLAG_PASS1
 +#define CODEC_FLAG_PASS2           AV_CODEC_FLAG_PASS2
 +#define CODEC_FLAG_GRAY            AV_CODEC_FLAG_GRAY
  #if FF_API_EMU_EDGE
  /**
   * @deprecated edges are not used/required anymore. I.e. this flag is now always
   */
  #define CODEC_FLAG_EMU_EDGE        0x4000
  #endif
 -#define CODEC_FLAG_PSNR            0x8000   ///< error[?] variables will be set during encoding.
 -#define CODEC_FLAG_TRUNCATED       0x00010000 /** Input bitstream might be truncated at a random
 -                                                  location instead of only at frame boundaries. */
 +#define CODEC_FLAG_PSNR            AV_CODEC_FLAG_PSNR
 +#define CODEC_FLAG_TRUNCATED       AV_CODEC_FLAG_TRUNCATED
 +
  #if FF_API_NORMALIZE_AQP
  /**
   * @deprecated use the flag "naq" in the "mpv_flags" private option of the
   */
  #define CODEC_FLAG_NORMALIZE_AQP  0x00020000
  #endif
 -#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< Use interlaced DCT.
 -#define CODEC_FLAG_LOW_DELAY      0x00080000 ///< Force low delay.
 -#define CODEC_FLAG_GLOBAL_HEADER  0x00400000 ///< Place global headers in extradata instead of every keyframe.
 -#define CODEC_FLAG_BITEXACT       0x00800000 ///< Use only bitexact stuff (except (I)DCT).
 -/* Fx : Flag for h263+ extra options */
 -#define CODEC_FLAG_AC_PRED        0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction
 -#define CODEC_FLAG_LOOP_FILTER    0x00000800 ///< loop filter
 -#define CODEC_FLAG_INTERLACED_ME  0x20000000 ///< interlaced motion estimation
 -#define CODEC_FLAG_CLOSED_GOP     0x80000000
 -#define CODEC_FLAG2_FAST          0x00000001 ///< Allow non spec compliant speedup tricks.
 -#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_IGNORE_CROP   0x00010000 ///< Discard cropping information from SPS.
 -
 -#define CODEC_FLAG2_CHUNKS        0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
 +#define CODEC_FLAG_INTERLACED_DCT AV_CODEC_FLAG_INTERLACED_DCT
 +#define CODEC_FLAG_LOW_DELAY      AV_CODEC_FLAG_LOW_DELAY
 +#define CODEC_FLAG_GLOBAL_HEADER  AV_CODEC_FLAG_GLOBAL_HEADER
 +#define CODEC_FLAG_BITEXACT       AV_CODEC_FLAG_BITEXACT
 +#define CODEC_FLAG_AC_PRED        AV_CODEC_FLAG_AC_PRED
 +#define CODEC_FLAG_LOOP_FILTER    AV_CODEC_FLAG_LOOP_FILTER
 +#define CODEC_FLAG_INTERLACED_ME  AV_CODEC_FLAG_INTERLACED_ME
 +#define CODEC_FLAG_CLOSED_GOP     AV_CODEC_FLAG_CLOSED_GOP
 +#define CODEC_FLAG2_FAST          AV_CODEC_FLAG2_FAST
 +#define CODEC_FLAG2_NO_OUTPUT     AV_CODEC_FLAG2_NO_OUTPUT
 +#define CODEC_FLAG2_LOCAL_HEADER  AV_CODEC_FLAG2_LOCAL_HEADER
 +#define CODEC_FLAG2_DROP_FRAME_TIMECODE AV_CODEC_FLAG2_DROP_FRAME_TIMECODE
 +#define CODEC_FLAG2_IGNORE_CROP   AV_CODEC_FLAG2_IGNORE_CROP
 +
 +#define CODEC_FLAG2_CHUNKS        AV_CODEC_FLAG2_CHUNKS
 +#define CODEC_FLAG2_SHOW_ALL      AV_CODEC_FLAG2_SHOW_ALL
 +#define CODEC_FLAG2_EXPORT_MVS    AV_CODEC_FLAG2_EXPORT_MVS
 +#define CODEC_FLAG2_SKIP_MANUAL   AV_CODEC_FLAG2_SKIP_MANUAL
  
  /* Unsupported options :
   *              Syntax Arithmetic coding (SAC)
  /* /Fx */
  /* codec capabilities */
  
 -#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< Decoder can use draw_horiz_band callback.
 +#define CODEC_CAP_DRAW_HORIZ_BAND AV_CODEC_CAP_DRAW_HORIZ_BAND ///< Decoder can use draw_horiz_band callback.
  /**
   * Codec uses get_buffer() for allocating buffers and supports custom allocators.
   * If not set, it might not use get_buffer() at all or use operations that
   * assume the buffer was allocated by avcodec_default_get_buffer.
   */
 -#define CODEC_CAP_DR1             0x0002
 -#define CODEC_CAP_TRUNCATED       0x0008
 +#define CODEC_CAP_DR1             AV_CODEC_CAP_DR1
 +#define CODEC_CAP_TRUNCATED       AV_CODEC_CAP_TRUNCATED
  #if FF_API_XVMC
 -/* Codec can export data for HW decoding (XvMC). */
 +/* Codec can export data for HW decoding. This flag indicates that
 + * the codec would call get_format() with list that might contain HW accelerated
 + * pixel formats (XvMC, VDPAU, VAAPI, etc). The application can pick any of them
 + * including raw image format.
 + * The application can use the passed context to determine bitstream version,
 + * chroma format, resolution etc.
 + */
  #define CODEC_CAP_HWACCEL         0x0010
  #endif /* FF_API_XVMC */
  /**
   *       each output packet. If this flag is not set, the pts and duration will
   *       be determined by libavcodec from the input frame.
   */
 -#define CODEC_CAP_DELAY           0x0020
 +#define CODEC_CAP_DELAY           AV_CODEC_CAP_DELAY
  /**
   * Codec can be fed a final frame with a smaller size.
   * This can be used to prevent truncation of the last audio samples.
   */
 -#define CODEC_CAP_SMALL_LAST_FRAME 0x0040
 +#define CODEC_CAP_SMALL_LAST_FRAME AV_CODEC_CAP_SMALL_LAST_FRAME
  #if FF_API_CAP_VDPAU
  /**
   * Codec can export data for HW decoding (VDPAU).
   */
 -#define CODEC_CAP_HWACCEL_VDPAU    0x0080
 +#define CODEC_CAP_HWACCEL_VDPAU    AV_CODEC_CAP_HWACCEL_VDPAU
  #endif
  /**
   * Codec can output multiple frames per AVPacket
   * prohibiting stream copy in many cases thus it should only be considered
   * as a last resort.
   */
 -#define CODEC_CAP_SUBFRAMES        0x0100
 +#define CODEC_CAP_SUBFRAMES        AV_CODEC_CAP_SUBFRAMES
  /**
   * Codec is experimental and is thus avoided in favor of non experimental
   * encoders
   */
 -#define CODEC_CAP_EXPERIMENTAL     0x0200
 +#define CODEC_CAP_EXPERIMENTAL     AV_CODEC_CAP_EXPERIMENTAL
  /**
   * Codec should fill in channel configuration and samplerate instead of container
   */
 -#define CODEC_CAP_CHANNEL_CONF     0x0400
 +#define CODEC_CAP_CHANNEL_CONF     AV_CODEC_CAP_CHANNEL_CONF
  #if FF_API_NEG_LINESIZES
  /**
   * @deprecated no codecs use this capability
  /**
   * Codec supports frame-level multithreading.
   */
 -#define CODEC_CAP_FRAME_THREADS    0x1000
 +#define CODEC_CAP_FRAME_THREADS    AV_CODEC_CAP_FRAME_THREADS
  /**
   * Codec supports slice-based (or partition-based) multithreading.
   */
 -#define CODEC_CAP_SLICE_THREADS    0x2000
 +#define CODEC_CAP_SLICE_THREADS    AV_CODEC_CAP_SLICE_THREADS
  /**
   * Codec supports changed parameters at any point.
   */
 -#define CODEC_CAP_PARAM_CHANGE     0x4000
 +#define CODEC_CAP_PARAM_CHANGE     AV_CODEC_CAP_PARAM_CHANGE
  /**
   * Codec supports avctx->thread_count == 0 (auto).
   */
 -#define CODEC_CAP_AUTO_THREADS     0x8000
 +#define CODEC_CAP_AUTO_THREADS     AV_CODEC_CAP_AUTO_THREADS
  /**
   * Audio encoder supports receiving a different number of samples in each call.
   */
 -#define CODEC_CAP_VARIABLE_FRAME_SIZE 0x10000
 +#define CODEC_CAP_VARIABLE_FRAME_SIZE AV_CODEC_CAP_VARIABLE_FRAME_SIZE
 +/**
 + * Codec is intra only.
 + */
 +#define CODEC_CAP_INTRA_ONLY       AV_CODEC_CAP_INTRA_ONLY
 +/**
 + * Codec is lossless.
 + */
 +#define CODEC_CAP_LOSSLESS         AV_CODEC_CAP_LOSSLESS
 +
 +/**
 + * HWAccel is experimental and is thus avoided in favor of non experimental
 + * codecs
 + */
 +#define HWACCEL_CODEC_CAP_EXPERIMENTAL     0x0200
  #endif /* FF_API_WITHOUT_PREFIX */
  
  #if FF_API_MB_TYPE
@@@ -1319,16 -1166,11 +1319,16 @@@ enum AVPacketSideDataType 
      AV_PKT_DATA_AUDIO_SERVICE_TYPE,
  
      /**
 -     * This side data contains an integer value representing the quality
 -     * factor of the compressed frame. Allowed range is between 1 (good)
 -     * and FF_LAMBDA_MAX (bad).
 +     * This side data contains quality related information from the encoder.
 +     * @code
 +     * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad).
 +     * u8    picture type
 +     * u8    error count
 +     * u16   reserved
 +     * u64le[error count] sum of squared differences between encoder in and output
 +     * @endcode
       */
 -    AV_PKT_DATA_QUALITY_FACTOR,
 +    AV_PKT_DATA_QUALITY_STATS,
  
      /**
       * This side data contains an integer value representing the stream index
       * This side data corresponds to the AVCPBProperties struct.
       */
      AV_PKT_DATA_CPB_PROPERTIES,
 +
 +    /**
 +     * Recommmends skipping the specified number of samples
 +     * @code
 +     * u32le number of samples to skip from start of this packet
 +     * u32le number of samples to skip from end of this packet
 +     * u8    reason for start skip
 +     * u8    reason for end   skip (0=padding silence, 1=convergence)
 +     * @endcode
 +     */
 +    AV_PKT_DATA_SKIP_SAMPLES=70,
 +
 +    /**
 +     * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that
 +     * the packet may contain "dual mono" audio specific to Japanese DTV
 +     * and if it is true, recommends only the selected channel to be used.
 +     * @code
 +     * u8    selected channels (0=mail/left, 1=sub/right, 2=both)
 +     * @endcode
 +     */
 +    AV_PKT_DATA_JP_DUALMONO,
 +
 +    /**
 +     * A list of zero terminated key/value strings. There is no end marker for
 +     * the list, so it is required to rely on the side data size to stop.
 +     */
 +    AV_PKT_DATA_STRINGS_METADATA,
 +
 +    /**
 +     * Subtitle event position
 +     * @code
 +     * u32le x1
 +     * u32le y1
 +     * u32le x2
 +     * u32le y2
 +     * @endcode
 +     */
 +    AV_PKT_DATA_SUBTITLE_POSITION,
 +
 +    /**
 +     * Data found in BlockAdditional element of matroska container. There is
 +     * no end marker for the data, so it is required to rely on the side data
 +     * size to recognize the end. 8 byte id (as found in BlockAddId) followed
 +     * by data.
 +     */
 +    AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
 +
 +    /**
 +     * The optional first identifier line of a WebVTT cue.
 +     */
 +    AV_PKT_DATA_WEBVTT_IDENTIFIER,
 +
 +    /**
 +     * The optional settings (rendering instructions) that immediately
 +     * follow the timestamp specifier of a WebVTT cue.
 +     */
 +    AV_PKT_DATA_WEBVTT_SETTINGS,
 +
 +    /**
 +     * A list of zero terminated key/value strings. There is no end marker for
 +     * the list, so it is required to rely on the side data size to stop. This
 +     * side data includes updated metadata which appeared in the stream.
 +     */
 +    AV_PKT_DATA_METADATA_UPDATE,
 +
 +    /**
 +     * MPEGTS stream ID, this is required to pass the stream ID
 +     * information from the demuxer to the corresponding muxer.
 +     */
 +    AV_PKT_DATA_MPEGTS_STREAM_ID,
 +
 +    /**
 +     * Mastering display metadata (based on SMPTE-2086:2014). This metadata
 +     * should be associated with a video stream and containts data in the form
 +     * of the AVMasteringDisplayMetadata struct.
 +     */
 +    AV_PKT_DATA_MASTERING_DISPLAY_METADATA
  };
  
 +#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED
 +
  typedef struct AVPacketSideData {
      uint8_t *data;
      int      size;
   * packets, with no compressed data, containing only side data
   * (e.g. to update some stream parameters at the end of encoding).
   *
 - * AVPacket is one of the few structs in Libav, whose size is a part of public
 + * AVPacket is one of the few structs in FFmpeg, whose size is a part of public
   * ABI. Thus it may be allocated on stack and no new fields can be added to it
   * without libavcodec and libavformat major bump.
   *
@@@ -1541,8 -1304,6 +1541,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 {
      /**
       * the average bitrate
       * - encoding: Set by user; unused for constant quantizer encoding.
 -     * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream.
 +     * - decoding: Set by user, may be overwritten by libavcodec
 +     *             if this info is available in the stream
       */
 -    int bit_rate;
 +    int64_t bit_rate;
  
      /**
       * number of bits the bitstream is allowed to diverge from the reference.
       * rv10: additional flags
       * mpeg4: global headers (they can be in the bitstream or here)
       * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger
 -     * than extradata_size to avoid prolems if it is read with the bitstream reader.
 +     * than extradata_size to avoid problems if it is read with the bitstream reader.
       * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
       * - encoding: Set/allocated/freed by libavcodec.
       * - decoding: Set/allocated/freed by user.
       * of which frame timestamps are represented. For fixed-fps content,
       * timebase should be 1/framerate and timestamp increments should be
       * identically 1.
 +     * This often, but not always is the inverse of the frame rate or field rate
 +     * for video. 1/time_base is not the average frame rate if the frame rate is not
 +     * constant.
 +     *
 +     * Like containers, elementary streams also can store timestamps, 1/time_base
 +     * is the unit in which these timestamps are specified.
 +     * As example of such codec time base see ISO/IEC 14496-2:2001(E)
 +     * vop_time_increment_resolution and fixed_vop_rate
 +     * (fixed_vop_rate == 0 implies that it is different from the framerate)
 +     *
       * - encoding: MUST be set by user.
       * - decoding: the use of this field for decoding is deprecated.
       *             Use framerate instead.
      /**
       * Codec delay.
       *
 +     * 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.
 +     *
       * Video:
       *   Number of frames the decoded output will be delayed relative to the
       *   encoded input.
  
      /**
       * Bitstream width / height, may be different from width/height e.g. when
 -     * the decoded frame is cropped before being output.
 +     * the decoded frame is cropped before being output or lowres is enabled.
       *
       * @note Those field may not match the value of the last
       * AVFrame outputted by avcodec_decode_video2 due frame
      /**
       * Pixel format, see AV_PIX_FMT_xxx.
       * May be set by the demuxer if known from headers.
 -     * May be overriden by the decoder if it knows better.
 +     * May be overridden by the decoder if it knows better.
       *
       * @note This field may not match the value of the last
       * AVFrame outputted by avcodec_decode_video2 due frame
  #define FF_CMP_VSAD   8
  #define FF_CMP_VSSE   9
  #define FF_CMP_NSSE   10
 +#define FF_CMP_W53    11
 +#define FF_CMP_W97    12
  #define FF_CMP_DCTMAX 13
  #define FF_CMP_DCT264 14
  #define FF_CMP_CHROMA 256
       * XVideo Motion Acceleration
       * - encoding: forbidden
       * - decoding: set by decoder
 -     * @deprecated XvMC support is slated for removal.
 +     * @deprecated XvMC doesn't need it anymore.
       */
      attribute_deprecated int xvmc_acceleration;
  #endif /* FF_API_XVMC */
      /**
       * precision of the intra DC coefficient - 8
       * - encoding: Set by user.
 -     * - decoding: unused
 +     * - decoding: Set by libavcodec
       */
      int intra_dc_precision;
  
  
      /** Field order
       * - encoding: set by libavcodec
 -     * - decoding: Set by libavcodec
 +     * - decoding: Set by user.
       */
      enum AVFieldOrder field_order;
  
      /**
       * Audio channel layout.
       * - encoding: set by user.
 -     * - decoding: set by libavcodec.
 +     * - decoding: set by user, may be overwritten by libavcodec.
       */
      uint64_t channel_layout;
  
      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;
  
       * avcodec_align_dimensions2() should be used to find the required width and
       * height, as they normally need to be rounded up to the next multiple of 16.
       *
 +     * Some decoders do not support linesizes changing between frames.
 +     *
       * If frame multithreading is used and thread_safe_callbacks is set,
       * this callback may be called from a different thread, but not from more
       * than one at once. Does not need to be reentrant.
      /**
       * maximum bitrate
       * - encoding: Set by user.
 -     * - decoding: unused
 +     * - decoding: Set by user, may be overwritten by libavcodec.
       */
 -    int rc_max_rate;
 +    int64_t rc_max_rate;
  
      /**
       * minimum bitrate
       * - encoding: Set by user.
       * - decoding: unused
       */
 -    int rc_min_rate;
 +    int64_t rc_min_rate;
  
  #if FF_API_MPV_OPT
      /**
      int error_concealment;
  #define FF_EC_GUESS_MVS   1
  #define FF_EC_DEBLOCK     2
 +#define FF_EC_FAVOR_INTER 256
  
      /**
       * debug
  #define FF_DEBUG_MMCO        0x00000800
  #define FF_DEBUG_BUGS        0x00001000
  #if FF_API_DEBUG_MV
 -#define FF_DEBUG_VIS_QP      0x00002000
 -#define FF_DEBUG_VIS_MB_TYPE 0x00004000
 +#define FF_DEBUG_VIS_QP      0x00002000 ///< only access through AVOptions from outside libavcodec
 +#define FF_DEBUG_VIS_MB_TYPE 0x00004000 ///< only access through AVOptions from outside libavcodec
  #endif
  #define FF_DEBUG_BUFFERS     0x00008000
  #define FF_DEBUG_THREADS     0x00010000
 +#define FF_DEBUG_GREEN_MD    0x00800000
 +#define FF_DEBUG_NOMC        0x01000000
  
  #if FF_API_DEBUG_MV
      /**
 -     * @deprecated this option does not have any effect
 +     * debug
 +     * Code outside libavcodec should access this field using AVOptions
 +     * - encoding: Set by user.
 +     * - decoding: Set by user.
       */
 -    attribute_deprecated
      int debug_mv;
  #define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
  #define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
   * decoder returning an error.
   */
  #define AV_EF_CRCCHECK  (1<<0)
 -#define AV_EF_BITSTREAM (1<<1)
 -#define AV_EF_BUFFER    (1<<2)
 -#define AV_EF_EXPLODE   (1<<3)
 +#define AV_EF_BITSTREAM (1<<1)          ///< detect bitstream specification deviations
 +#define AV_EF_BUFFER    (1<<2)          ///< detect improper bitstream length
 +#define AV_EF_EXPLODE   (1<<3)          ///< abort decoding on minor error detection
 +
 +#define AV_EF_IGNORE_ERR (1<<15)        ///< ignore errors and continue
 +#define AV_EF_CAREFUL    (1<<16)        ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors
 +#define AV_EF_COMPLIANT  (1<<17)        ///< consider all spec non compliances as errors
 +#define AV_EF_AGGRESSIVE (1<<18)        ///< consider things that a sane encoder should not do as an error
 +
  
      /**
       * opaque 64bit number (generally a PTS) that will be reordered and
       * 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
  #if FF_API_ARCH_ALPHA
  #define FF_IDCT_SIMPLEALPHA   23
  #endif
 +#define FF_IDCT_SIMPLEAUTO    128
  
      /**
       * bits per sample/pixel from the demuxer (needed for huffyuv).
       * low resolution decoding, 1-> 1/2 size, 2->1/4 size
       * - encoding: unused
       * - decoding: Set by user.
 -     *
 -     * @deprecated use decoder private options instead
 +     * Code outside libavcodec should access this field using:
 +     * av_codec_{get,set}_lowres(avctx)
       */
 -    attribute_deprecated int lowres;
 +     int lowres;
  #endif
  
  #if FF_API_CODED_FRAME
      int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);
  
      /**
 -     * noise vs. sse weight for the nsse comparsion function
 +     * noise vs. sse weight for the nsse comparison function
       * - encoding: Set by user.
       * - decoding: unused
       */
  #define FF_PROFILE_HEVC_MAIN                        1
  #define FF_PROFILE_HEVC_MAIN_10                     2
  #define FF_PROFILE_HEVC_MAIN_STILL_PICTURE          3
 +#define FF_PROFILE_HEVC_REXT                        4
  
      /**
       * level
  #define FF_LEVEL_UNKNOWN -99
  
      /**
 +     * Skip loop filtering for selected frames.
       * - encoding: unused
       * - decoding: Set by user.
       */
      enum AVDiscard skip_loop_filter;
  
      /**
 +     * Skip IDCT/dequantization for selected frames.
       * - encoding: unused
       * - decoding: Set by user.
       */
      enum AVDiscard skip_idct;
  
      /**
 +     * Skip decoding for selected frames.
       * - encoding: unused
       * - decoding: Set by user.
       */
       */
      int initial_padding;
  
 -    /*
 +    /**
       * - decoding: For codecs that store a framerate value in the compressed
       *             bitstream, the decoder may export it here. { 0, 1} when
       *             unknown.
       */
      enum AVPixelFormat sw_pix_fmt;
  
 +    /**
 +     * Timebase in which pkt_dts/pts and AVPacket.dts/pts are.
 +     * Code outside libavcodec should access this field using:
 +     * av_codec_{get,set}_pkt_timebase(avctx)
 +     * - encoding unused.
 +     * - decoding set by user.
 +     */
 +    AVRational pkt_timebase;
 +
 +    /**
 +     * AVCodecDescriptor
 +     * Code outside libavcodec should access this field using:
 +     * av_codec_{get,set}_codec_descriptor(avctx)
 +     * - encoding: unused.
 +     * - decoding: set by libavcodec.
 +     */
 +    const AVCodecDescriptor *codec_descriptor;
 +
 +#if !FF_API_LOWRES
 +    /**
 +     * low resolution decoding, 1-> 1/2 size, 2->1/4 size
 +     * - encoding: unused
 +     * - decoding: Set by user.
 +     * Code outside libavcodec should access this field using:
 +     * av_codec_{get,set}_lowres(avctx)
 +     */
 +     int lowres;
 +#endif
 +
 +    /**
 +     * 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
 +
 +    /**
 +     * Character encoding of the input subtitles file.
 +     * - decoding: set by user
 +     * - encoding: unused
 +     */
 +    char *sub_charenc;
 +
 +    /**
 +     * Subtitles character encoding mode. Formats or codecs might be adjusting
 +     * this setting (if they are doing the conversion themselves for instance).
 +     * - decoding: set by libavcodec
 +     * - encoding: unused
 +     */
 +    int sub_charenc_mode;
 +#define FF_SUB_CHARENC_MODE_DO_NOTHING  -1  ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance)
 +#define FF_SUB_CHARENC_MODE_AUTOMATIC    0  ///< libavcodec will select the mode itself
 +#define FF_SUB_CHARENC_MODE_PRE_DECODER  1  ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv
 +
 +    /**
 +     * Skip processing alpha if supported by codec.
 +     * Note that if the format uses pre-multiplied alpha (common with VP6,
 +     * and recommended due to better video quality/compression)
 +     * the image will look as if alpha-blended onto a black background.
 +     * However for formats that do not use pre-multiplied alpha
 +     * there might be serious artefacts (though e.g. libswscale currently
 +     * assumes pre-multiplied alpha anyway).
 +     * Code outside libavcodec should access this field using AVOptions
 +     *
 +     * - decoding: set by user
 +     * - encoding: unused
 +     */
 +    int skip_alpha;
 +
 +    /**
 +     * Number of samples to skip after a discontinuity
 +     * - decoding: unused
 +     * - encoding: set by libavcodec
 +     */
 +    int seek_preroll;
 +
 +#if !FF_API_DEBUG_MV
 +    /**
 +     * debug motion vectors
 +     * Code outside libavcodec should access this field using AVOptions
 +     * - encoding: Set by user.
 +     * - decoding: Set by user.
 +     */
 +    int debug_mv;
 +#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
 +#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
 +#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
 +#endif
 +
 +    /**
 +     * custom intra quantization matrix
 +     * Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix()
 +     * - encoding: Set by user, can be NULL.
 +     * - decoding: unused.
 +     */
 +    uint16_t *chroma_intra_matrix;
 +
 +    /**
 +     * dump format separator.
 +     * can be ", " or "\n      " or anything else
 +     * Code outside libavcodec should access this field using AVOptions
 +     * (NO direct access).
 +     * - encoding: Set by user.
 +     * - decoding: Set by user.
 +     */
 +    uint8_t *dump_separator;
 +
 +    /**
 +     * ',' separated list of allowed decoders.
 +     * If NULL then all are allowed
 +     * - encoding: unused
 +     * - decoding: set by user through AVOPtions (NO direct access)
 +     */
 +    char *codec_whitelist;
 +
 +    /*
 +     * Properties of the stream that gets decoded
 +     * To be accessed through av_codec_get_properties() (NO direct access)
 +     * - encoding: unused
 +     * - decoding: set by libavcodec
 +     */
 +    unsigned properties;
 +#define FF_CODEC_PROPERTY_LOSSLESS        0x00000001
 +#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002
 +
      /**
       * Additional data associated with the entire coded stream.
       *
       * afterwards owned and managed by libavcodec.
       */
      AVBufferRef *hw_frames_ctx;
 +
 +    /**
 +     * Control the form of AVSubtitle.rects[N]->ass
 +     * - decoding: set by user
 +     * - encoding: unused
 +     */
 +    int sub_text_format;
 +#define FF_SUB_TEXT_FMT_ASS              0
 +#if FF_API_ASS_TIMING
 +#define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1
 +#endif
 +
  } AVCodecContext;
  
 +AVRational av_codec_get_pkt_timebase         (const AVCodecContext *avctx);
 +void       av_codec_set_pkt_timebase         (AVCodecContext *avctx, AVRational val);
 +
 +const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx);
 +void                     av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc);
 +
 +unsigned av_codec_get_codec_properties(const AVCodecContext *avctx);
 +
 +int  av_codec_get_lowres(const AVCodecContext *avctx);
 +void av_codec_set_lowres(AVCodecContext *avctx, int val);
 +
 +int  av_codec_get_seek_preroll(const AVCodecContext *avctx);
 +void av_codec_set_seek_preroll(AVCodecContext *avctx, int val);
 +
 +uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx);
 +void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val);
 +
  /**
   * AVProfile.
   */
@@@ -3460,7 -3027,9 +3460,7 @@@ typedef struct AVCodec 
      const int *supported_samplerates;       ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
      const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
      const uint64_t *channel_layouts;         ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
 -#if FF_API_LOWRES
 -    attribute_deprecated uint8_t max_lowres; ///< maximum value for lowres supported by the decoder
 -#endif
 +    uint8_t max_lowres;                     ///< maximum value for lowres supported by the decoder, no direct access, use av_codec_get_max_lowres()
      const AVClass *priv_class;              ///< AVClass for the private context
      const AVProfile *profiles;              ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
  
      int caps_internal;
  } AVCodec;
  
 +int av_codec_get_max_lowres(const AVCodec *codec);
 +
 +struct MpegEncContext;
 +
  /**
   * @defgroup lavc_hwaccel AVHWAccel
   * @{
@@@ -3571,7 -3136,7 +3571,7 @@@ typedef struct AVHWAccel 
  
      /**
       * Hardware accelerated codec capabilities.
 -     * see FF_HWACCEL_CODEC_CAP_*
 +     * see HWACCEL_CODEC_CAP_*
       */
      int capabilities;
  
       *
       * Meaningful slice information (codec specific) is guaranteed to
       * be parsed at this point. This function is mandatory.
 +     * The only exception is XvMC, that works on MB level.
       *
       * @param avctx the codec context
       * @param buf the slice data buffer base
       */
      int frame_priv_data_size;
  
 +    /**
 +     * Called for every Macroblock in a slice.
 +     *
 +     * XvMC uses it to replace the ff_mpv_decode_mb().
 +     * Instead of decoding to raw picture, MB parameters are
 +     * stored in an array provided by the video driver.
 +     *
 +     * @param s the mpeg context
 +     */
 +    void (*decode_mb)(struct MpegEncContext *s);
 +
      /**
       * Initialize the hwaccel private data.
       *
   * Hardware acceleration should be used for decoding even if the codec level
   * used is unknown or higher than the maximum supported level reported by the
   * hardware driver.
 + *
 + * It's generally a good idea to pass this flag unless you have a specific
 + * reason not to, as hardware tends to under-report supported levels.
   */
  #define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0)
  
   */
  
  /**
 - * four components are given, that's all.
 - * the last component is alpha
 - * @deprecated Use the imgutils functions
 + * Picture data structure.
 + *
 + * Up to four components can be stored into it, the last component is
 + * alpha.
 + * @deprecated use AVFrame or imgutils functions instead
   */
  typedef struct AVPicture {
      attribute_deprecated
 -    uint8_t *data[AV_NUM_DATA_POINTERS];
 +    uint8_t *data[AV_NUM_DATA_POINTERS];    ///< pointers to the image data planes
      attribute_deprecated
      int linesize[AV_NUM_DATA_POINTERS];     ///< number of bytes per line
  } AVPicture;
   */
  #endif
  
 -#define AVPALETTE_SIZE 1024
 -#define AVPALETTE_COUNT 256
 -
  enum AVSubtitleType {
      SUBTITLE_NONE,
  
@@@ -3768,11 -3319,10 +3768,11 @@@ typedef struct AVSubtitleRect 
  
      /**
       * 0 terminated ASS/SSA compatible event line.
 -     * The pressentation of this is unaffected by the other values in this
 +     * The presentation of this is unaffected by the other values in this
       * struct.
       */
      char *ass;
 +
      int flags;
  } AVSubtitleRect;
  
@@@ -3829,7 -3379,7 +3829,7 @@@ typedef struct AVCodecParameters 
      /**
       * The average bitrate of the encoded data (in bits per second).
       */
 -    int bit_rate;
 +    int64_t bit_rate;
  
      int bits_per_coded_sample;
  
@@@ -3991,22 -3541,6 +3991,22 @@@ int avcodec_get_context_defaults3(AVCod
   */
  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);
 +
 +/**
 + * Get the AVClass for AVSubtitleRect. It can be used in combination with
 + * AV_OPT_SEARCH_FAKE_OBJ for examining options.
 + *
 + * @see av_opt_find().
 + */
 +const AVClass *avcodec_get_subtitle_rect_class(void);
 +
  /**
   * Copy the settings of the source AVCodecContext into the destination
   * AVCodecContext. The resulting destination codec context will be
   * can use this AVCodecContext to decode/encode video/audio data.
   *
   * @param dest target codec context, should be initialized with
 - *             avcodec_alloc_context3(), but otherwise uninitialized
 + *             avcodec_alloc_context3(NULL), but otherwise uninitialized
   * @param src source codec context
   * @return AVERROR() on error (e.g. memory allocation error), 0 on success
   */
@@@ -4224,20 -3758,6 +4224,20 @@@ int av_packet_from_data(AVPacket *pkt, 
   */
  attribute_deprecated
  int av_dup_packet(AVPacket *pkt);
 +/**
 + * Copy packet, including contents
 + *
 + * @return 0 on success, negative AVERROR on fail
 + */
 +int av_copy_packet(AVPacket *dst, const AVPacket *src);
 +
 +/**
 + * Copy packet side data
 + *
 + * @return 0 on success, negative AVERROR on fail
 + */
 +int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src);
 +
  /**
   * Free a packet.
   *
@@@ -4297,31 -3817,6 +4297,31 @@@ int av_packet_shrink_side_data(AVPacke
  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);
 +
 +const char *av_packet_side_data_name(enum AVPacketSideDataType type);
 +
 +/**
 + * Pack a dictionary for use in side_data.
 + *
 + * @param dict The dictionary to pack.
 + * @param size pointer to store the size of the returned data
 + * @return pointer to data if successful, NULL otherwise
 + */
 +uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size);
 +/**
 + * Unpack a dictionary from side_data.
 + *
 + * @param data data from side_data
 + * @param size size of the data
 + * @param dict the metadata storage dictionary
 + * @return 0 on success, < 0 on failure
 + */
 +int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict);
 +
 +
  /**
   * Convenience function to free all the side data stored.
   * All the other fields stay untouched.
@@@ -4346,7 -3841,7 +4346,7 @@@ void av_packet_free_side_data(AVPacket 
   *
   * @return 0 on success, a negative AVERROR on error.
   */
 -int av_packet_ref(AVPacket *dst, AVPacket *src);
 +int av_packet_ref(AVPacket *dst, const AVPacket *src);
  
  /**
   * Wipe the packet.
@@@ -4460,28 -3955,6 +4460,28 @@@ void avcodec_align_dimensions(AVCodecCo
  void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
                                 int linesize_align[AV_NUM_DATA_POINTERS]);
  
 +/**
 + * Converts AVChromaLocation to swscale x/y chroma position.
 + *
 + * The positions represent the chroma (0,0) position in a coordinates system
 + * with luma (0,0) representing the origin and luma(1,1) representing 256,256
 + *
 + * @param xpos  horizontal chroma sample position
 + * @param ypos  vertical   chroma sample position
 + */
 +int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos);
 +
 +/**
 + * Converts swscale x/y chroma position to AVChromaLocation.
 + *
 + * The positions represent the chroma (0,0) position in a coordinates system
 + * with luma (0,0) representing the origin and luma(1,1) representing 256,256
 + *
 + * @param xpos  horizontal chroma sample position
 + * @param ypos  vertical   chroma sample position
 + */
 +enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos);
 +
  /**
   * Decode the audio frame of size avpkt->size from avpkt->data into frame.
   *
   *         AVPacket is returned.
   */
  int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame,
 -                          int *got_frame_ptr, AVPacket *avpkt);
 +                          int *got_frame_ptr, const AVPacket *avpkt);
  
  /**
   * Decode the video frame of size avpkt->size from avpkt->data into picture.
   *             next call to this function or until closing or flushing the
   *             decoder. The caller may not write to it.
   *
 - * @param[in] avpkt The input AVpacket containing the input buffer.
 + * @param[in] avpkt The input AVPacket containing the input buffer.
   *            You can create such packet with av_init_packet() and by then setting
   *            data and size, some decoders might in addition need other fields like
   *            flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least
   */
  int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
                           int *got_picture_ptr,
 -                         AVPacket *avpkt);
 +                         const AVPacket *avpkt);
  
  /**
   * Decode a subtitle message.
   * and reusing a get_buffer written for video codecs would probably perform badly
   * due to a potentially very different allocation pattern.
   *
 + * Some decoders (those marked with CODEC_CAP_DELAY) have a delay between input
 + * and output. This means that for some packets they will not immediately
 + * produce decoded output and need to be flushed at the end of decoding to get
 + * all the decoded data. Flushing is done by calling this function with packets
 + * with avpkt->data set to NULL and avpkt->size set to 0 until it stops
 + * returning subtitles. It is safe to flush even those decoders that are not
 + * marked with CODEC_CAP_DELAY, then no subtitles will be returned.
 + *
   * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
   * before packets may be fed to the decoder.
   *
   * @param avctx the codec context
 - * @param[out] sub The AVSubtitle in which the decoded subtitle will be stored, must be
 -                   freed with avsubtitle_free if *got_sub_ptr is set.
 + * @param[out] sub The Preallocated AVSubtitle in which the decoded subtitle will be stored,
 + *                 must be freed with avsubtitle_free if *got_sub_ptr is set.
   * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero.
   * @param[in] avpkt The input AVPacket containing the input buffer.
   */
@@@ -4664,7 -4129,6 +4664,7 @@@ typedef struct AVCodecParserContext 
  #define PARSER_FLAG_ONCE                      0x0002
  /// Set if the parser has a valid file offset
  #define PARSER_FLAG_FETCHED_OFFSET            0x0004
 +#define PARSER_FLAG_USE_CODEC_TS              0x1000
  
      int64_t offset;      ///< byte offset from starting packet start
      int64_t cur_frame_end[AV_PARSER_PTS_NB];
@@@ -4850,7 -4314,7 +4850,7 @@@ int av_parser_parse2(AVCodecParserConte
  
  /**
   * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed
 - * @deprecated use AVBitstreamFilter
 + * @deprecated use AVBitStreamFilter
   */
  int av_parser_change(AVCodecParserContext *s,
                       AVCodecContext *avctx,
@@@ -4897,12 -4361,11 +4897,12 @@@ AVCodec *avcodec_find_encoder_by_name(c
   *                  The user can supply an output buffer by setting
   *                  avpkt->data and avpkt->size prior to calling the
   *                  function, but if the size of the user-provided data is not
 - *                  large enough, encoding will fail. All other AVPacket fields
 - *                  will be reset by the encoder using av_init_packet(). If
 - *                  avpkt->data is NULL, the encoder will allocate it.
 - *                  The encoder will set avpkt->size to the size of the
 - *                  output packet.
 + *                  large enough, encoding will fail. If avpkt->data and
 + *                  avpkt->size are set, avpkt->destruct must also be set. All
 + *                  other AVPacket fields will be reset by the encoder using
 + *                  av_init_packet(). If avpkt->data is NULL, the encoder will
 + *                  allocate it. The encoder will set avpkt->size to the size
 + *                  of the output packet.
   *
   *                  If this function fails or produces no output, avpkt will be
   *                  freed using av_packet_unref().
@@@ -4969,103 -4432,6 +4969,103 @@@ int avcodec_encode_subtitle(AVCodecCont
   * @}
   */
  
 +#if FF_API_AVCODEC_RESAMPLE
 +/**
 + * @defgroup lavc_resample Audio resampling
 + * @ingroup libavc
 + * @deprecated use libswresample instead
 + *
 + * @{
 + */
 +struct ReSampleContext;
 +struct AVResampleContext;
 +
 +typedef struct ReSampleContext ReSampleContext;
 +
 +/**
 + *  Initialize audio resampling context.
 + *
 + * @param output_channels  number of output channels
 + * @param input_channels   number of input channels
 + * @param output_rate      output sample rate
 + * @param input_rate       input sample rate
 + * @param sample_fmt_out   requested output sample format
 + * @param sample_fmt_in    input sample format
 + * @param filter_length    length of each FIR filter in the filterbank relative to the cutoff frequency
 + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
 + * @param linear           if 1 then the used FIR filter will be linearly interpolated
 +                           between the 2 closest, if 0 the closest will be used
 + * @param cutoff           cutoff frequency, 1.0 corresponds to half the output sampling rate
 + * @return allocated ReSampleContext, NULL if error occurred
 + */
 +attribute_deprecated
 +ReSampleContext *av_audio_resample_init(int output_channels, int input_channels,
 +                                        int output_rate, int input_rate,
 +                                        enum AVSampleFormat sample_fmt_out,
 +                                        enum AVSampleFormat sample_fmt_in,
 +                                        int filter_length, int log2_phase_count,
 +                                        int linear, double cutoff);
 +
 +attribute_deprecated
 +int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
 +
 +/**
 + * Free resample context.
 + *
 + * @param s a non-NULL pointer to a resample context previously
 + *          created with av_audio_resample_init()
 + */
 +attribute_deprecated
 +void audio_resample_close(ReSampleContext *s);
 +
 +
 +/**
 + * Initialize an audio resampler.
 + * Note, if either rate is not an integer then simply scale both rates up so they are.
 + * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq
 + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
 + * @param linear If 1 then the used FIR filter will be linearly interpolated
 +                 between the 2 closest, if 0 the closest will be used
 + * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate
 + */
 +attribute_deprecated
 +struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
 +
 +/**
 + * Resample an array of samples using a previously configured context.
 + * @param src an array of unconsumed samples
 + * @param consumed the number of samples of src which have been consumed are returned here
 + * @param src_size the number of unconsumed samples available
 + * @param dst_size the amount of space in samples available in dst
 + * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context.
 + * @return the number of samples written in dst or -1 if an error occurred
 + */
 +attribute_deprecated
 +int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
 +
 +
 +/**
 + * Compensate samplerate/timestamp drift. The compensation is done by changing
 + * the resampler parameters, so no audible clicks or similar distortions occur
 + * @param compensation_distance distance in output samples over which the compensation should be performed
 + * @param sample_delta number of output samples which should be output less
 + *
 + * example: av_resample_compensate(c, 10, 500)
 + * here instead of 510 samples only 500 samples would be output
 + *
 + * note, due to rounding the actual compensation might be slightly different,
 + * especially if the compensation_distance is large and the in_rate used during init is small
 + */
 +attribute_deprecated
 +void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
 +attribute_deprecated
 +void av_resample_close(struct AVResampleContext *c);
 +
 +/**
 + * @}
 + */
 +#endif
 +
  #if FF_API_AVPICTURE
  /**
   * @addtogroup lavc_picture
@@@ -5088,14 -4454,14 +5088,14 @@@ void avpicture_free(AVPicture *picture)
   * @deprecated use av_image_fill_arrays() instead.
   */
  attribute_deprecated
 -int avpicture_fill(AVPicture *picture, uint8_t *ptr,
 +int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
                     enum AVPixelFormat pix_fmt, int width, int height);
  
  /**
   * @deprecated use av_image_copy_to_buffer() instead.
   */
  attribute_deprecated
 -int avpicture_layout(const AVPicturesrc, enum AVPixelFormat pix_fmt,
 +int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt,
                       int width, int height,
                       unsigned char *dest, int dest_size);
  
@@@ -5148,21 -4514,10 +5148,21 @@@ int av_picture_pad(AVPicture *dst, cons
   */
  
  /**
 - * @deprecated Use av_pix_fmt_get_chroma_sub_sample
 + * Utility function to access log2_chroma_w log2_chroma_h from
 + * the pixel format AVPixFmtDescriptor.
 + *
 + * This function asserts that pix_fmt is valid. See av_pix_fmt_get_chroma_sub_sample
 + * for one that returns a failure code and continues in case of invalid
 + * pix_fmts.
 + *
 + * @param[in]  pix_fmt the pixel format
 + * @param[out] h_shift store log2_chroma_w
 + * @param[out] v_shift store log2_chroma_h
 + *
 + * @see av_pix_fmt_get_chroma_sub_sample
   */
  
 -void attribute_deprecated avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift);
 +void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift);
  
  /**
   * Return a value representing the fourCC code associated to the
   */
  unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt);
  
 -#define FF_LOSS_RESOLUTION  0x0001 /**< loss due to resolution change */
 -#define FF_LOSS_DEPTH       0x0002 /**< loss due to color depth change */
 -#define FF_LOSS_COLORSPACE  0x0004 /**< loss due to color space conversion */
 -#define FF_LOSS_ALPHA       0x0008 /**< loss of alpha bits */
 -#define FF_LOSS_COLORQUANT  0x0010 /**< loss due to color quantization */
 -#define FF_LOSS_CHROMA      0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */
 -
 -/**
 - * Compute what kind of losses will occur when converting from one specific
 - * pixel format to another.
 - * 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. These losses can involve loss of chroma, but also loss of
 - * resolution, loss of color depth, loss due to the color space conversion, loss
 - * of the alpha bits or loss due to color quantization.
 - * avcodec_get_fix_fmt_loss() informs you about the various types of losses
 - * which will occur when converting from one pixel format to another.
 - *
 - * @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.
 +/**
 + * @deprecated see av_get_pix_fmt_loss()
   */
  int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt,
                               int has_alpha);
   * format.  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() searches which of
 + * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of
   * the given pixel formats should be used to suffer the least amount of loss.
   * The pixel formats from which it chooses one, are determined by the
   * pix_fmt_list parameter.
   * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
   * @return The best pixel format to convert to or -1 if none was found.
   */
 -enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat *pix_fmt_list,
 +enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list,
 +                                            enum AVPixelFormat src_pix_fmt,
 +                                            int has_alpha, int *loss_ptr);
 +
 +/**
 + * @deprecated see av_find_best_pix_fmt_of_2()
 + */
 +enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
 +                                            enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
 +
 +attribute_deprecated
 +#if AV_HAVE_INCOMPATIBLE_LIBAV_ABI
 +enum AVPixelFormat avcodec_find_best_pix_fmt2(const enum AVPixelFormat *pix_fmt_list,
                                                enum AVPixelFormat src_pix_fmt,
                                                int has_alpha, int *loss_ptr);
 +#else
 +enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
 +                                            enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
 +#endif
 +
  
  enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
  
@@@ -5269,12 -4628,7 +5269,12 @@@ int avcodec_default_execute2(AVCodecCon
  //FIXME func typedef
  
  /**
 - * Fill audio frame data and linesize.
 + * Fill AVFrame audio data and linesize pointers.
 + *
 + * The buffer buf must be a preallocated buffer with a size big enough
 + * to contain the specified samples amount. The filled AVFrame data
 + * pointers will point to this buffer.
 + *
   * AVFrame extended_data channel pointers are allocated if necessary for
   * planar audio.
   *
   * @param buf         buffer to use for frame data
   * @param buf_size    size of buffer
   * @param align       plane size sample alignment (0 = default)
 - * @return            0 on success, negative error code on failure
 + * @return            >=0 on success, negative error code on failure
 + * @todo return the size in bytes required to store the samples in
 + * case of success, at the next libavutil bump
   */
  int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
                               enum AVSampleFormat sample_fmt, const uint8_t *buf,
@@@ -5314,14 -4666,6 +5314,14 @@@ void avcodec_flush_buffers(AVCodecConte
   */
  int av_get_bits_per_sample(enum AVCodecID codec_id);
  
 +/**
 + * Return the PCM codec associated with a sample format.
 + * @param be  endianness, 0 for little, 1 for big,
 + *            -1 (or anything else) for native
 + * @return  AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE
 + */
 +enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be);
 +
  /**
   * Return codec bits per sample.
   * Only return non-zero if the bits per sample is exactly correct, not an
@@@ -5342,17 -4686,18 +5342,23 @@@ int av_get_exact_bits_per_sample(enum A
   */
  int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes);
  
+ /**
+  * This function is the same as av_get_audio_frame_duration(), except it works
+  * with AVCodecParameters instead of an AVCodecContext.
+  */
+ int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes);
  
  typedef struct AVBitStreamFilterContext {
      void *priv_data;
      struct AVBitStreamFilter *filter;
      AVCodecParserContext *parser;
      struct AVBitStreamFilterContext *next;
 +    /**
 +     * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter().
 +     * Not for access by library users.
 +     */
 +    char *args;
  } AVBitStreamFilterContext;
  
  
@@@ -5367,98 -4712,26 +5373,98 @@@ typedef struct AVBitStreamFilter 
      struct AVBitStreamFilter *next;
  } AVBitStreamFilter;
  
 +/**
 + * Register a bitstream filter.
 + *
 + * The filter will be accessible to the application code through
 + * av_bitstream_filter_next() or can be directly initialized with
 + * av_bitstream_filter_init().
 + *
 + * @see avcodec_register_all()
 + */
  void av_register_bitstream_filter(AVBitStreamFilter *bsf);
 +
 +/**
 + * Create and initialize a bitstream filter context given a bitstream
 + * filter name.
 + *
 + * The returned context must be freed with av_bitstream_filter_close().
 + *
 + * @param name    the name of the bitstream filter
 + * @return a bitstream filter context if a matching filter was found
 + * and successfully initialized, NULL otherwise
 + */
  AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);
 +
 +/**
 + * Filter bitstream.
 + *
 + * This function filters the buffer buf with size buf_size, and places the
 + * filtered buffer in the buffer pointed to by poutbuf.
 + *
 + * The output buffer must be freed by the caller.
 + *
 + * @param bsfc            bitstream filter context created by av_bitstream_filter_init()
 + * @param avctx           AVCodecContext accessed by the filter, may be NULL.
 + *                        If specified, this must point to the encoder context of the
 + *                        output stream the packet is sent to.
 + * @param args            arguments which specify the filter configuration, may be NULL
 + * @param poutbuf         pointer which is updated to point to the filtered buffer
 + * @param poutbuf_size    pointer which is updated to the filtered buffer size in bytes
 + * @param buf             buffer containing the data to filter
 + * @param buf_size        size in bytes of buf
 + * @param keyframe        set to non-zero if the buffer to filter corresponds to a key-frame packet data
 + * @return >= 0 in case of success, or a negative error code in case of failure
 + *
 + * If the return value is positive, an output buffer is allocated and
 + * is available in *poutbuf, and is distinct from the input buffer.
 + *
 + * If the return value is 0, the output buffer is not allocated and
 + * should be considered identical to the input buffer, or in case
 + * *poutbuf was set it points to the input buffer (not necessarily to
 + * its starting address). A special case is if *poutbuf was set to NULL and
 + * *poutbuf_size was set to 0, which indicates the packet should be dropped.
 + */
  int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
                                 AVCodecContext *avctx, const char *args,
                                 uint8_t **poutbuf, int *poutbuf_size,
                                 const uint8_t *buf, int buf_size, int keyframe);
 +
 +/**
 + * Release bitstream filter context.
 + *
 + * @param bsf the bitstream filter context created with
 + * av_bitstream_filter_init(), can be NULL
 + */
  void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);
  
 +/**
 + * If f is NULL, return the first registered bitstream filter,
 + * if f is non-NULL, return the next registered bitstream filter
 + * after f, or NULL if f is the last one.
 + *
 + * This function can be used to iterate over all registered bitstream
 + * filters.
 + */
  AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f);
  
  /* memory */
  
  /**
 - * Allocate a buffer with padding, reusing the given one if large enough.
 - *
   * Same behaviour av_fast_malloc but the buffer has additional
 - * AV_INPUT_PADDING_SIZE at the end which will always memset to 0.
 + * AV_INPUT_BUFFER_PADDING_SIZE at the end which 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);
  
 +/**
 + * Same behaviour av_fast_padded_malloc except that buffer will always
 + * be 0-initialized after call.
 + */
 +void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size);
 +
  /**
   * Encode extradata length to a buffer. Used by xiph codecs.
   *
@@@ -5471,7 -4744,7 +5477,7 @@@ unsigned int av_xiphlacing(unsigned cha
  #if FF_API_MISSING_SAMPLE
  /**
   * 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
@@@ -5487,7 -4760,7 +5493,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
@@@ -5551,12 -4824,6 +5557,12 @@@ int av_lockmgr_register(int (*cb)(void 
   */
  enum AVMediaType avcodec_get_type(enum AVCodecID codec_id);
  
 +/**
 + * Get the name of a codec.
 + * @return  a static string identifying the codec; never NULL
 + */
 +const char *avcodec_get_name(enum AVCodecID id);
 +
  /**
   * @return a positive value if s is open (i.e. avcodec_open2() was called on it
   * with no corresponding avcodec_close()), 0 otherwise.
diff --combined libavcodec/utils.c
index f4312b28f4649d295153064b45a6498a83e83d33,a9a74230fdf52a3aa52881ae739acc9877fd82aa..d38e2f927fc7c7104b64e6f4e2b39489128e78bf
@@@ -3,20 -3,20 +3,20 @@@
   * Copyright (c) 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
   */
  
   */
  
  #include "config.h"
 +#include "libavutil/atomic.h"
  #include "libavutil/attributes.h"
  #include "libavutil/avassert.h"
  #include "libavutil/avstring.h"
 +#include "libavutil/bprint.h"
  #include "libavutil/channel_layout.h"
  #include "libavutil/crc.h"
  #include "libavutil/frame.h"
  #include "libavutil/hwcontext.h"
  #include "libavutil/internal.h"
  #include "libavutil/mathematics.h"
 +#include "libavutil/mem_internal.h"
  #include "libavutil/pixdesc.h"
  #include "libavutil/imgutils.h"
  #include "libavutil/samplefmt.h"
  #include "libavutil/dict.h"
 +#include "libavutil/thread.h"
  #include "avcodec.h"
  #include "libavutil/opt.h"
  #include "me_cmp.h"
  #include "mpegvideo.h"
  #include "thread.h"
 +#include "frame_thread_encoder.h"
  #include "internal.h"
 +#include "raw.h"
  #include "bytestream.h"
  #include "version.h"
  #include <stdlib.h>
  #include <stdarg.h>
  #include <limits.h>
  #include <float.h>
 +#if CONFIG_ICONV
 +# include <iconv.h>
 +#endif
 +
 +#include "libavutil/ffversion.h"
 +const char av_codec_ffversion[] = "FFmpeg version " FFMPEG_VERSION;
 +
 +#if HAVE_PTHREADS || HAVE_W32THREADS || HAVE_OS2THREADS
 +static int default_lockmgr_cb(void **arg, enum AVLockOp op)
 +{
 +    void * volatile * mutex = arg;
 +    int err;
 +
 +    switch (op) {
 +    case AV_LOCK_CREATE:
 +        return 0;
 +    case AV_LOCK_OBTAIN:
 +        if (!*mutex) {
 +            pthread_mutex_t *tmp = av_malloc(sizeof(pthread_mutex_t));
 +            if (!tmp)
 +                return AVERROR(ENOMEM);
 +            if ((err = pthread_mutex_init(tmp, NULL))) {
 +                av_free(tmp);
 +                return AVERROR(err);
 +            }
 +            if (avpriv_atomic_ptr_cas(mutex, NULL, tmp)) {
 +                pthread_mutex_destroy(tmp);
 +                av_free(tmp);
 +            }
 +        }
 +
 +        if ((err = pthread_mutex_lock(*mutex)))
 +            return AVERROR(err);
 +
 +        return 0;
 +    case AV_LOCK_RELEASE:
 +        if ((err = pthread_mutex_unlock(*mutex)))
 +            return AVERROR(err);
 +
 +        return 0;
 +    case AV_LOCK_DESTROY:
 +        if (*mutex)
 +            pthread_mutex_destroy(*mutex);
 +        av_free(*mutex);
 +        avpriv_atomic_ptr_cas(mutex, *mutex, NULL);
 +        return 0;
 +    }
 +    return 1;
 +}
 +static int (*lockmgr_cb)(void **mutex, enum AVLockOp op) = default_lockmgr_cb;
 +#else
 +static int (*lockmgr_cb)(void **mutex, enum AVLockOp op) = NULL;
 +#endif
  
 +
 +volatile int ff_avcodec_locked;
  static int volatile entangled_thread_counter = 0;
 -static int (*lockmgr_cb)(void **mutex, enum AVLockOp op);
  static void *codec_mutex;
  static void *avformat_mutex;
  
  void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
  {
 -    void **p = ptr;
 +    uint8_t **p = ptr;
 +    if (min_size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) {
 +        av_freep(p);
 +        *size = 0;
 +        return;
 +    }
 +    if (!ff_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE, 1))
 +        memset(*p + min_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
 +}
 +
 +void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size)
 +{
 +    uint8_t **p = ptr;
      if (min_size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) {
          av_freep(p);
          *size = 0;
          return;
      }
 -    av_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE);
 -    if (*size)
 -        memset((uint8_t *)*p + min_size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
 +    if (!ff_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE, 1))
 +        memset(*p, 0, min_size + AV_INPUT_BUFFER_PADDING_SIZE);
  }
  
  /* encoder management */
  static AVCodec *first_avcodec = NULL;
 +static AVCodec **last_avcodec = &first_avcodec;
  
  AVCodec *av_codec_next(const AVCodec *c)
  {
@@@ -179,13 -107,12 +179,13 @@@ av_cold void avcodec_register(AVCodec *
  {
      AVCodec **p;
      avcodec_init();
 -    p = &first_avcodec;
 -    while (*p)
 -        p = &(*p)->next;
 -    *p          = codec;
 +    p = last_avcodec;
      codec->next = NULL;
  
 +    while(*p || avpriv_atomic_ptr_cas((void * volatile *)p, NULL, codec))
 +        p = &(*p)->next;
 +    last_avcodec = &codec->next;
 +
      if (codec->init_static_data)
          codec->init_static_data(codec);
  }
@@@ -200,10 -127,7 +200,10 @@@ unsigned avcodec_get_edge_width(void
  #if FF_API_SET_DIMENSIONS
  void avcodec_set_dimensions(AVCodecContext *s, int width, int height)
  {
 -    ff_set_dimensions(s, width, height);
 +    int ret = ff_set_dimensions(s, width, height);
 +    if (ret < 0) {
 +        av_log(s, AV_LOG_WARNING, "Failed to set dimensions %d %d\n", width, height);
 +    }
  }
  #endif
  
@@@ -213,11 -137,8 +213,11 @@@ int ff_set_dimensions(AVCodecContext *s
  
      if (ret < 0)
          width = height = 0;
 -    s->width  = s->coded_width  = width;
 -    s->height = s->coded_height = height;
 +
 +    s->coded_width  = width;
 +    s->coded_height = height;
 +    s->width        = AV_CEIL_RSHIFT(width,  s->lowres);
 +    s->height       = AV_CEIL_RSHIFT(height, s->lowres);
  
      return ret;
  }
@@@ -257,18 -178,18 +257,18 @@@ int ff_side_data_update_matrix_encoding
      return 0;
  }
  
 -#if HAVE_SIMD_ALIGN_16
 -#   define STRIDE_ALIGN 16
 -#else
 -#   define STRIDE_ALIGN 8
 -#endif
 -
  void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
                                 int linesize_align[AV_NUM_DATA_POINTERS])
  {
      int i;
      int w_align = 1;
      int h_align = 1;
 +    AVPixFmtDescriptor const *desc = av_pix_fmt_desc_get(s->pix_fmt);
 +
 +    if (desc) {
 +        w_align = 1 << desc->log2_chroma_w;
 +        h_align = 1 << desc->log2_chroma_h;
 +    }
  
      switch (s->pix_fmt) {
      case AV_PIX_FMT_YUV420P:
      case AV_PIX_FMT_YUV420P9BE:
      case AV_PIX_FMT_YUV420P10LE:
      case AV_PIX_FMT_YUV420P10BE:
 +    case AV_PIX_FMT_YUV420P12LE:
 +    case AV_PIX_FMT_YUV420P12BE:
 +    case AV_PIX_FMT_YUV420P14LE:
 +    case AV_PIX_FMT_YUV420P14BE:
 +    case AV_PIX_FMT_YUV420P16LE:
 +    case AV_PIX_FMT_YUV420P16BE:
 +    case AV_PIX_FMT_YUVA420P9LE:
 +    case AV_PIX_FMT_YUVA420P9BE:
 +    case AV_PIX_FMT_YUVA420P10LE:
 +    case AV_PIX_FMT_YUVA420P10BE:
 +    case AV_PIX_FMT_YUVA420P16LE:
 +    case AV_PIX_FMT_YUVA420P16BE:
      case AV_PIX_FMT_YUV422P9LE:
      case AV_PIX_FMT_YUV422P9BE:
      case AV_PIX_FMT_YUV422P10LE:
      case AV_PIX_FMT_YUV422P10BE:
 +    case AV_PIX_FMT_YUV422P12LE:
 +    case AV_PIX_FMT_YUV422P12BE:
 +    case AV_PIX_FMT_YUV422P14LE:
 +    case AV_PIX_FMT_YUV422P14BE:
 +    case AV_PIX_FMT_YUV422P16LE:
 +    case AV_PIX_FMT_YUV422P16BE:
 +    case AV_PIX_FMT_YUVA422P9LE:
 +    case AV_PIX_FMT_YUVA422P9BE:
      case AV_PIX_FMT_YUVA422P10LE:
      case AV_PIX_FMT_YUVA422P10BE:
 +    case AV_PIX_FMT_YUVA422P16LE:
 +    case AV_PIX_FMT_YUVA422P16BE:
 +    case AV_PIX_FMT_YUV440P10LE:
 +    case AV_PIX_FMT_YUV440P10BE:
 +    case AV_PIX_FMT_YUV440P12LE:
 +    case AV_PIX_FMT_YUV440P12BE:
      case AV_PIX_FMT_YUV444P9LE:
      case AV_PIX_FMT_YUV444P9BE:
      case AV_PIX_FMT_YUV444P10LE:
      case AV_PIX_FMT_YUV444P10BE:
 +    case AV_PIX_FMT_YUV444P12LE:
 +    case AV_PIX_FMT_YUV444P12BE:
 +    case AV_PIX_FMT_YUV444P14LE:
 +    case AV_PIX_FMT_YUV444P14BE:
 +    case AV_PIX_FMT_YUV444P16LE:
 +    case AV_PIX_FMT_YUV444P16BE:
 +    case AV_PIX_FMT_YUVA444P9LE:
 +    case AV_PIX_FMT_YUVA444P9BE:
      case AV_PIX_FMT_YUVA444P10LE:
      case AV_PIX_FMT_YUVA444P10BE:
 +    case AV_PIX_FMT_YUVA444P16LE:
 +    case AV_PIX_FMT_YUVA444P16BE:
      case AV_PIX_FMT_GBRP9LE:
      case AV_PIX_FMT_GBRP9BE:
      case AV_PIX_FMT_GBRP10LE:
      case AV_PIX_FMT_GBRP10BE:
 +    case AV_PIX_FMT_GBRP12LE:
 +    case AV_PIX_FMT_GBRP12BE:
 +    case AV_PIX_FMT_GBRP14LE:
 +    case AV_PIX_FMT_GBRP14BE:
 +    case AV_PIX_FMT_GBRP16LE:
 +    case AV_PIX_FMT_GBRP16BE:
 +    case AV_PIX_FMT_GBRAP12LE:
 +    case AV_PIX_FMT_GBRAP12BE:
 +    case AV_PIX_FMT_GBRAP16LE:
 +    case AV_PIX_FMT_GBRAP16BE:
          w_align = 16; //FIXME assume 16 pixel per macroblock
          h_align = 16 * 2; // interlaced needs 2 macroblocks height
          break;
      case AV_PIX_FMT_YUV411P:
 +    case AV_PIX_FMT_YUVJ411P:
      case AV_PIX_FMT_UYYVYY411:
          w_align = 32;
 -        h_align = 8;
 +        h_align = 16 * 2;
          break;
      case AV_PIX_FMT_YUV410P:
          if (s->codec_id == AV_CODEC_ID_SVQ1) {
              w_align = 64;
              h_align = 64;
          }
 +        break;
      case AV_PIX_FMT_RGB555:
          if (s->codec_id == AV_CODEC_ID_RPZA) {
              w_align = 4;
              h_align = 4;
          }
 +        break;
      case AV_PIX_FMT_PAL8:
      case AV_PIX_FMT_BGR8:
      case AV_PIX_FMT_RGB8:
 -        if (s->codec_id == AV_CODEC_ID_SMC) {
 +        if (s->codec_id == AV_CODEC_ID_SMC ||
 +            s->codec_id == AV_CODEC_ID_CINEPAK) {
              w_align = 4;
              h_align = 4;
          }
 +        if (s->codec_id == AV_CODEC_ID_JV) {
 +            w_align = 8;
 +            h_align = 8;
 +        }
          break;
      case AV_PIX_FMT_BGR24:
          if ((s->codec_id == AV_CODEC_ID_MSZH) ||
              h_align = 4;
          }
          break;
 +    case AV_PIX_FMT_RGB24:
 +        if (s->codec_id == AV_CODEC_ID_CINEPAK) {
 +            w_align = 4;
 +            h_align = 4;
 +        }
 +        break;
      default:
 -        w_align = 1;
 -        h_align = 1;
          break;
      }
  
 +    if (s->codec_id == AV_CODEC_ID_IFF_ILBM) {
 +        w_align = FFMAX(w_align, 8);
 +    }
 +
      *width  = FFALIGN(*width, w_align);
      *height = FFALIGN(*height, h_align);
 -    if (s->codec_id == AV_CODEC_ID_H264)
 +    if (s->codec_id == AV_CODEC_ID_H264 || s->lowres) {
          // some of the optimized chroma MC reads one line too much
 +        // which is also done in mpeg decoders with lowres > 0
          *height += 2;
  
 +        // H.264 uses edge emulation for out of frame motion vectors, for this
 +        // it requires a temporary area large enough to hold a 21x21 block,
 +        // increasing witdth ensure that the temporary area is large enough,
 +        // the next rounded up width is 32
 +        *width = FFMAX(*width, 32);
 +    }
 +
      for (i = 0; i < 4; i++)
          linesize_align[i] = STRIDE_ALIGN;
  }
@@@ -444,29 -295,6 +444,29 @@@ void avcodec_align_dimensions(AVCodecCo
      *width              = FFALIGN(*width, align);
  }
  
 +int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos)
 +{
 +    if (pos <= AVCHROMA_LOC_UNSPECIFIED || pos >= AVCHROMA_LOC_NB)
 +        return AVERROR(EINVAL);
 +    pos--;
 +
 +    *xpos = (pos&1) * 128;
 +    *ypos = ((pos>>1)^(pos<4)) * 128;
 +
 +    return 0;
 +}
 +
 +enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos)
 +{
 +    int pos, xout, yout;
 +
 +    for (pos = AVCHROMA_LOC_UNSPECIFIED + 1; pos < AVCHROMA_LOC_NB; pos++) {
 +        if (avcodec_enum_to_chroma_pos(&xout, &yout, pos) == 0 && xout == xpos && yout == ypos)
 +            return pos;
 +    }
 +    return AVCHROMA_LOC_UNSPECIFIED;
 +}
 +
  int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
                               enum AVSampleFormat sample_fmt, const uint8_t *buf,
                               int buf_size, int align)
  
      planar = av_sample_fmt_is_planar(sample_fmt);
      if (planar && nb_channels > AV_NUM_DATA_POINTERS) {
 -        if (!(frame->extended_data = av_mallocz(nb_channels *
 +        if (!(frame->extended_data = av_mallocz_array(nb_channels,
                                                  sizeof(*frame->extended_data))))
              return AVERROR(ENOMEM);
      } else {
      }
  
      if ((ret = av_samples_fill_arrays(frame->extended_data, &frame->linesize[0],
 -                                      buf, nb_channels, frame->nb_samples,
 +                                      (uint8_t *)(intptr_t)buf, nb_channels, frame->nb_samples,
                                        sample_fmt, align)) < 0) {
          if (frame->extended_data != frame->data)
 -            av_free(frame->extended_data);
 +            av_freep(&frame->extended_data);
          return ret;
      }
      if (frame->extended_data != frame->data) {
@@@ -526,9 -354,7 +526,9 @@@ static int update_frame_pool(AVCodecCon
          do {
              // NOTE: do not align linesizes individually, this breaks e.g. assumptions
              // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2
 -            av_image_fill_linesizes(linesize, avctx->pix_fmt, w);
 +            ret = av_image_fill_linesizes(linesize, avctx->pix_fmt, w);
 +            if (ret < 0)
 +                return ret;
              // increase alignment of w for next try (rhs gives the lowest bit set in w)
              w += w & ~(w - 1);
  
              av_buffer_pool_uninit(&pool->pools[i]);
              pool->linesize[i] = linesize[i];
              if (size[i]) {
 -                pool->pools[i] = av_buffer_pool_init(size[i] + 16, NULL);
 +                pool->pools[i] = av_buffer_pool_init(size[i] + 16 + STRIDE_ALIGN - 1,
 +                                                     CONFIG_MEMORY_POISONING ?
 +                                                        NULL :
 +                                                        av_buffer_allocz);
                  if (!pool->pools[i]) {
                      ret = AVERROR(ENOMEM);
                      goto fail;
          break;
          }
      case AVMEDIA_TYPE_AUDIO: {
 -        int ch     = av_get_channel_layout_nb_channels(frame->channel_layout);
 +        int ch     = av_frame_get_channels(frame); //av_get_channel_layout_nb_channels(frame->channel_layout);
          int planar = av_sample_fmt_is_planar(frame->format);
          int planes = planar ? ch : 1;
  
@@@ -614,19 -437,17 +614,19 @@@ static int audio_get_buffer(AVCodecCont
      frame->linesize[0] = pool->linesize[0];
  
      if (planes > AV_NUM_DATA_POINTERS) {
 -        frame->extended_data = av_mallocz(planes * sizeof(*frame->extended_data));
 +        frame->extended_data = av_mallocz_array(planes, sizeof(*frame->extended_data));
          frame->nb_extended_buf = planes - AV_NUM_DATA_POINTERS;
 -        frame->extended_buf  = av_mallocz(frame->nb_extended_buf *
 +        frame->extended_buf  = av_mallocz_array(frame->nb_extended_buf,
                                            sizeof(*frame->extended_buf));
          if (!frame->extended_data || !frame->extended_buf) {
              av_freep(&frame->extended_data);
              av_freep(&frame->extended_buf);
              return AVERROR(ENOMEM);
          }
 -    } else
 +    } else {
          frame->extended_data = frame->data;
 +        av_assert0(frame->nb_extended_buf == 0);
 +    }
  
      for (i = 0; i < FFMIN(planes, AV_NUM_DATA_POINTERS); i++) {
          frame->buf[i] = av_buffer_pool_get(pool->pools[0]);
@@@ -653,21 -474,13 +653,21 @@@ fail
  static int video_get_buffer(AVCodecContext *s, AVFrame *pic)
  {
      FramePool *pool = s->internal->pool;
 +    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pic->format);
      int i;
  
 -    if (pic->data[0]) {
 -        av_log(s, AV_LOG_ERROR, "pic->data[0]!=NULL in avcodec_default_get_buffer\n");
 +    if (pic->data[0] || pic->data[1] || pic->data[2] || pic->data[3]) {
 +        av_log(s, AV_LOG_ERROR, "pic->data[*]!=NULL in avcodec_default_get_buffer\n");
          return -1;
      }
  
 +    if (!desc) {
 +        av_log(s, AV_LOG_ERROR,
 +            "Unable to get pixel format descriptor for format %s\n",
 +            av_get_pix_fmt_name(pic->format));
 +        return AVERROR(EINVAL);
 +    }
 +
      memset(pic->data, 0, sizeof(pic->data));
      pic->extended_data = pic->data;
  
          pic->data[i] = NULL;
          pic->linesize[i] = 0;
      }
 -    if (pic->data[1] && !pic->data[2])
 -        avpriv_set_systematic_pal2((uint32_t *)pic->data[1], s->pix_fmt);
 +    if (desc->flags & AV_PIX_FMT_FLAG_PAL ||
 +        desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL)
 +        avpriv_set_systematic_pal2((uint32_t *)pic->data[1], pic->format);
  
      if (s->debug & FF_DEBUG_BUFFERS)
          av_log(s, AV_LOG_DEBUG, "default_get_buffer called on pic %p\n", pic);
@@@ -697,29 -509,6 +697,29 @@@ fail
      return AVERROR(ENOMEM);
  }
  
 +void ff_color_frame(AVFrame *frame, const int c[4])
 +{
 +    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format);
 +    int p, y, x;
 +
 +    av_assert0(desc->flags & AV_PIX_FMT_FLAG_PLANAR);
 +
 +    for (p = 0; p<desc->nb_components; p++) {
 +        uint8_t *dst = frame->data[p];
 +        int is_chroma = p == 1 || p == 2;
 +        int bytes  = is_chroma ? AV_CEIL_RSHIFT(frame->width,  desc->log2_chroma_w) : frame->width;
 +        int height = is_chroma ? AV_CEIL_RSHIFT(frame->height, desc->log2_chroma_h) : frame->height;
 +        for (y = 0; y < height; y++) {
 +            if (desc->comp[0].depth >= 9) {
 +                for (x = 0; x<bytes; x++)
 +                    ((uint16_t*)dst)[x] = c[p];
 +            }else
 +                memset(dst, c[p], bytes);
 +            dst += frame->linesize[p];
 +        }
 +    }
 +}
 +
  int avcodec_default_get_buffer2(AVCodecContext *avctx, AVFrame *frame, int flags)
  {
      int ret;
      }
  }
  
 -int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
 +static int add_metadata_from_side_data(AVPacket *avpkt, AVFrame *frame)
 +{
 +    int size;
 +    const uint8_t *side_metadata;
 +
 +    AVDictionary **frame_md = avpriv_frame_get_metadatap(frame);
 +
 +    side_metadata = av_packet_get_side_data(avpkt,
 +                                            AV_PKT_DATA_STRINGS_METADATA, &size);
 +    return av_packet_unpack_dictionary(side_metadata, size, frame_md);
 +}
 +
 +int ff_init_buffer_info(AVCodecContext *avctx, AVFrame *frame)
  {
      AVPacket *pkt = avctx->internal->pkt;
      int i;
 -    struct {
 +    static const struct {
          enum AVPacketSideDataType packet;
          enum AVFrameSideDataType frame;
      } sd[] = {
 -        { AV_PKT_DATA_REPLAYGAIN ,   AV_FRAME_DATA_REPLAYGAIN },
 -        { AV_PKT_DATA_DISPLAYMATRIX, AV_FRAME_DATA_DISPLAYMATRIX },
 -        { AV_PKT_DATA_STEREO3D,      AV_FRAME_DATA_STEREO3D },
 -        { AV_PKT_DATA_AUDIO_SERVICE_TYPE, AV_FRAME_DATA_AUDIO_SERVICE_TYPE },
 +        { AV_PKT_DATA_REPLAYGAIN ,                AV_FRAME_DATA_REPLAYGAIN },
 +        { AV_PKT_DATA_DISPLAYMATRIX,              AV_FRAME_DATA_DISPLAYMATRIX },
 +        { AV_PKT_DATA_STEREO3D,                   AV_FRAME_DATA_STEREO3D },
 +        { AV_PKT_DATA_AUDIO_SERVICE_TYPE,         AV_FRAME_DATA_AUDIO_SERVICE_TYPE },
 +        { AV_PKT_DATA_MASTERING_DISPLAY_METADATA, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA },
      };
  
 -    frame->color_primaries = avctx->color_primaries;
 -    frame->color_trc       = avctx->color_trc;
 -    frame->colorspace      = avctx->colorspace;
 -    frame->color_range     = avctx->color_range;
 -    frame->chroma_location = avctx->chroma_sample_location;
 -
 -    frame->reordered_opaque = avctx->reordered_opaque;
 -    if (!pkt) {
 -        frame->pkt_pts = AV_NOPTS_VALUE;
 -        return 0;
 -    }
 -
 -    frame->pkt_pts = pkt->pts;
 -
 -    for (i = 0; i < FF_ARRAY_ELEMS(sd); i++) {
 -        int size;
 -        uint8_t *packet_sd = av_packet_get_side_data(pkt, sd[i].packet, &size);
 -        if (packet_sd) {
 -            AVFrameSideData *frame_sd = av_frame_new_side_data(frame,
 -                                                               sd[i].frame,
 -                                                               size);
 -            if (!frame_sd)
 -                return AVERROR(ENOMEM);
 -
 -            memcpy(frame_sd->data, packet_sd, size);
 +    if (pkt) {
 +        frame->pkt_pts = pkt->pts;
 +        av_frame_set_pkt_pos     (frame, pkt->pos);
 +        av_frame_set_pkt_duration(frame, pkt->duration);
 +        av_frame_set_pkt_size    (frame, pkt->size);
 +
 +        for (i = 0; i < FF_ARRAY_ELEMS(sd); i++) {
 +            int size;
 +            uint8_t *packet_sd = av_packet_get_side_data(pkt, sd[i].packet, &size);
 +            if (packet_sd) {
 +                AVFrameSideData *frame_sd = av_frame_new_side_data(frame,
 +                                                                   sd[i].frame,
 +                                                                   size);
 +                if (!frame_sd)
 +                    return AVERROR(ENOMEM);
 +
 +                memcpy(frame_sd->data, packet_sd, size);
 +            }
          }
 +        add_metadata_from_side_data(pkt, frame);
 +    } else {
 +        frame->pkt_pts = AV_NOPTS_VALUE;
 +        av_frame_set_pkt_pos     (frame, -1);
 +        av_frame_set_pkt_duration(frame, 0);
 +        av_frame_set_pkt_size    (frame, -1);
      }
 +    frame->reordered_opaque = avctx->reordered_opaque;
  
 -    return 0;
 -}
 -
 -int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
 -{
 -    const AVHWAccel *hwaccel = avctx->hwaccel;
 -    int override_dimensions = 1;
 -    int ret;
 -
 -    switch (avctx->codec_type) {
 +    if (frame->color_primaries == AVCOL_PRI_UNSPECIFIED)
 +        frame->color_primaries = avctx->color_primaries;
 +    if (frame->color_trc == AVCOL_TRC_UNSPECIFIED)
 +        frame->color_trc = avctx->color_trc;
 +    if (av_frame_get_colorspace(frame) == AVCOL_SPC_UNSPECIFIED)
 +        av_frame_set_colorspace(frame, avctx->colorspace);
 +    if (av_frame_get_color_range(frame) == AVCOL_RANGE_UNSPECIFIED)
 +        av_frame_set_color_range(frame, avctx->color_range);
 +    if (frame->chroma_location == AVCHROMA_LOC_UNSPECIFIED)
 +        frame->chroma_location = avctx->chroma_sample_location;
 +
 +    switch (avctx->codec->type) {
      case AVMEDIA_TYPE_VIDEO:
 -        if (frame->width <= 0 || frame->height <= 0) {
 -            frame->width  = FFMAX(avctx->width, avctx->coded_width);
 -            frame->height = FFMAX(avctx->height, avctx->coded_height);
 -            override_dimensions = 0;
 -        }
 -        if (frame->format < 0)
 -            frame->format              = avctx->pix_fmt;
 +        frame->format              = avctx->pix_fmt;
          if (!frame->sample_aspect_ratio.num)
              frame->sample_aspect_ratio = avctx->sample_aspect_ratio;
  
 -        if (av_image_check_sar(frame->width, frame->height,
 +        if (frame->width && frame->height &&
 +            av_image_check_sar(frame->width, frame->height,
                                 frame->sample_aspect_ratio) < 0) {
              av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %u/%u\n",
                     frame->sample_aspect_ratio.num,
              frame->sample_aspect_ratio = (AVRational){ 0, 1 };
          }
  
 -        if ((ret = av_image_check_size(avctx->width, avctx->height, 0, avctx)) < 0)
 -            return ret;
          break;
      case AVMEDIA_TYPE_AUDIO:
          if (!frame->sample_rate)
                             avctx->channels);
                      return AVERROR(ENOSYS);
                  }
 -
 -                frame->channel_layout = av_get_default_channel_layout(avctx->channels);
 -                if (!frame->channel_layout)
 -                    frame->channel_layout = (1ULL << avctx->channels) - 1;
              }
          }
 +        av_frame_set_channels(frame, avctx->channels);
          break;
 -    default: return AVERROR(EINVAL);
      }
 +    return 0;
 +}
 +
 +int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
 +{
 +    return ff_init_buffer_info(avctx, frame);
 +}
 +
 +static void validate_avframe_allocation(AVCodecContext *avctx, AVFrame *frame)
 +{
 +    if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
 +        int i;
 +        int num_planes = av_pix_fmt_count_planes(frame->format);
 +        const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format);
 +        int flags = desc ? desc->flags : 0;
 +        if (num_planes == 1 && (flags & AV_PIX_FMT_FLAG_PAL))
 +            num_planes = 2;
 +        for (i = 0; i < num_planes; i++) {
 +            av_assert0(frame->data[i]);
 +        }
 +        // For now do not enforce anything for palette of pseudopal formats
 +        if (num_planes == 1 && (flags & AV_PIX_FMT_FLAG_PSEUDOPAL))
 +            num_planes = 2;
 +        // For formats without data like hwaccel allow unused pointers to be non-NULL.
 +        for (i = num_planes; num_planes > 0 && i < FF_ARRAY_ELEMS(frame->data); i++) {
 +            if (frame->data[i])
 +                av_log(avctx, AV_LOG_ERROR, "Buffer returned by get_buffer2() did not zero unused plane pointers\n");
 +            frame->data[i] = NULL;
 +        }
 +    }
 +}
 +
 +static int get_buffer_internal(AVCodecContext *avctx, AVFrame *frame, int flags)
 +{
 +    const AVHWAccel *hwaccel = avctx->hwaccel;
 +    int override_dimensions = 1;
 +    int ret;
 +
 +    if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
 +        if ((ret = av_image_check_size(avctx->width, avctx->height, 0, avctx)) < 0 || avctx->pix_fmt<0) {
 +            av_log(avctx, AV_LOG_ERROR, "video_get_buffer: image parameters invalid\n");
 +            return AVERROR(EINVAL);
 +        }
 +
 +        if (frame->width <= 0 || frame->height <= 0) {
 +            frame->width  = FFMAX(avctx->width,  AV_CEIL_RSHIFT(avctx->coded_width,  avctx->lowres));
 +            frame->height = FFMAX(avctx->height, AV_CEIL_RSHIFT(avctx->coded_height, avctx->lowres));
 +            override_dimensions = 0;
 +        }
  
 +        if (frame->data[0] || frame->data[1] || frame->data[2] || frame->data[3]) {
 +            av_log(avctx, AV_LOG_ERROR, "pic->data[*]!=NULL in get_buffer_internal\n");
 +            return AVERROR(EINVAL);
 +        }
 +    }
      ret = ff_decode_frame_props(avctx, frame);
      if (ret < 0)
          return ret;
          avctx->sw_pix_fmt = avctx->pix_fmt;
  
      ret = avctx->get_buffer2(avctx, frame, flags);
 +    if (ret >= 0)
 +        validate_avframe_allocation(avctx, frame);
  
  end:
      if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && !override_dimensions) {
      return ret;
  }
  
 -int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame)
 +int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
 +{
 +    int ret = get_buffer_internal(avctx, frame, flags);
 +    if (ret < 0) {
 +        av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
 +        frame->width = frame->height = 0;
 +    }
 +    return ret;
 +}
 +
 +static int reget_buffer_internal(AVCodecContext *avctx, AVFrame *frame)
  {
      AVFrame *tmp;
      int ret;
  
      av_assert0(avctx->codec_type == AVMEDIA_TYPE_VIDEO);
  
 +    if (frame->data[0] && (frame->width != avctx->width || frame->height != avctx->height || frame->format != avctx->pix_fmt)) {
 +        av_log(avctx, AV_LOG_WARNING, "Picture changed from size:%dx%d fmt:%s to size:%dx%d fmt:%s in reget buffer()\n",
 +               frame->width, frame->height, av_get_pix_fmt_name(frame->format), avctx->width, avctx->height, av_get_pix_fmt_name(avctx->pix_fmt));
 +        av_frame_unref(frame);
 +    }
 +
 +    ff_init_buffer_info(avctx, frame);
 +
      if (!frame->data[0])
          return ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF);
  
      return 0;
  }
  
 +int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame)
 +{
 +    int ret = reget_buffer_internal(avctx, frame);
 +    if (ret < 0)
 +        av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
 +    return ret;
 +}
 +
  int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size)
  {
      int i;
@@@ -1006,17 -709,6 +1006,17 @@@ int avcodec_default_execute2(AVCodecCon
      return 0;
  }
  
 +enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags,
 +                                       unsigned int fourcc)
 +{
 +    while (tags->pix_fmt >= 0) {
 +        if (tags->fourcc == fourcc)
 +            return tags->pix_fmt;
 +        tags++;
 +    }
 +    return AV_PIX_FMT_NONE;
 +}
 +
  static int is_hwaccel_pix_fmt(enum AVPixelFormat pix_fmt)
  {
      const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
@@@ -1049,11 -741,6 +1049,11 @@@ static int setup_hwaccel(AVCodecContex
      AVHWAccel *hwa = find_hwaccel(avctx->codec_id, fmt);
      int ret        = 0;
  
 +    if (avctx->active_thread_type & FF_THREAD_FRAME) {
 +        av_log(avctx, AV_LOG_WARNING,
 +               "Hardware accelerated decoding with frame threading is known to be unstable and its use is discouraged.\n");
 +    }
 +
      if (!hwa) {
          av_log(avctx, AV_LOG_ERROR,
                 "Could not find an AVHWAccel for the pixel format: %s",
          return AVERROR(ENOENT);
      }
  
 +    if (hwa->capabilities & HWACCEL_CODEC_CAP_EXPERIMENTAL &&
 +        avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) {
 +        av_log(avctx, AV_LOG_WARNING, "Ignoring experimental hwaccel: %s\n",
 +               hwa->name);
 +        return AVERROR_PATCHWELCOME;
 +    }
 +
      if (hwa->priv_data_size) {
          avctx->internal->hwaccel_priv_data = av_mallocz(hwa->priv_data_size);
          if (!avctx->internal->hwaccel_priv_data)
@@@ -1123,10 -803,6 +1123,10 @@@ int ff_get_format(AVCodecContext *avctx
  
          if (!(desc->flags & AV_PIX_FMT_FLAG_HWACCEL))
              break;
 +#if FF_API_CAP_VDPAU
 +        if (avctx->codec->capabilities&AV_CODEC_CAP_HWACCEL_VDPAU)
 +            break;
 +#endif
  
          if (!setup_hwaccel(avctx, ret, desc->name))
              break;
      return ret;
  }
  
 +MAKE_ACCESSORS(AVCodecContext, codec, AVRational, pkt_timebase)
 +MAKE_ACCESSORS(AVCodecContext, codec, const AVCodecDescriptor *, codec_descriptor)
 +MAKE_ACCESSORS(AVCodecContext, codec, int, lowres)
 +MAKE_ACCESSORS(AVCodecContext, codec, int, seek_preroll)
 +MAKE_ACCESSORS(AVCodecContext, codec, uint16_t*, chroma_intra_matrix)
 +
 +unsigned av_codec_get_codec_properties(const AVCodecContext *codec)
 +{
 +    return codec->properties;
 +}
 +
 +int av_codec_get_max_lowres(const AVCodec *codec)
 +{
 +    return codec->max_lowres;
 +}
 +
 +static void get_subtitle_defaults(AVSubtitle *sub)
 +{
 +    memset(sub, 0, sizeof(*sub));
 +    sub->pts = AV_NOPTS_VALUE;
 +}
 +
 +static int64_t get_bit_rate(AVCodecContext *ctx)
 +{
 +    int64_t bit_rate;
 +    int bits_per_sample;
 +
 +    switch (ctx->codec_type) {
 +    case AVMEDIA_TYPE_VIDEO:
 +    case AVMEDIA_TYPE_DATA:
 +    case AVMEDIA_TYPE_SUBTITLE:
 +    case AVMEDIA_TYPE_ATTACHMENT:
 +        bit_rate = ctx->bit_rate;
 +        break;
 +    case AVMEDIA_TYPE_AUDIO:
 +        bits_per_sample = av_get_bits_per_sample(ctx->codec_id);
 +        bit_rate = bits_per_sample ? ctx->sample_rate * (int64_t)ctx->channels * bits_per_sample : ctx->bit_rate;
 +        break;
 +    default:
 +        bit_rate = 0;
 +        break;
 +    }
 +    return bit_rate;
 +}
 +
 +int attribute_align_arg ff_codec_open2_recursive(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
 +{
 +    int ret = 0;
 +
 +    ff_unlock_avcodec(codec);
 +
 +    ret = avcodec_open2(avctx, codec, options);
 +
 +    ff_lock_avcodec(avctx, codec);
 +    return ret;
 +}
 +
  int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
  {
      int ret = 0;
      AVDictionary *tmp = NULL;
 +    const AVPixFmtDescriptor *pixdesc;
  
      if (avcodec_is_open(avctx))
          return 0;
  
      if ((!codec && !avctx->codec)) {
 -        av_log(avctx, AV_LOG_ERROR, "No codec provided to avcodec_open2().\n");
 +        av_log(avctx, AV_LOG_ERROR, "No codec provided to avcodec_open2()\n");
          return AVERROR(EINVAL);
      }
      if ((codec && avctx->codec && codec != avctx->codec)) {
          av_log(avctx, AV_LOG_ERROR, "This AVCodecContext was allocated for %s, "
 -                                    "but %s passed to avcodec_open2().\n", avctx->codec->name, codec->name);
 +                                    "but %s passed to avcodec_open2()\n", avctx->codec->name, codec->name);
          return AVERROR(EINVAL);
      }
      if (!codec)
      if (options)
          av_dict_copy(&tmp, *options, 0);
  
 -    /* If there is a user-supplied mutex locking routine, call it. */
 -    if (!(codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE) && codec->init) {
 -        if (lockmgr_cb) {
 -            if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN))
 -                return -1;
 -        }
 -
 -        entangled_thread_counter++;
 -        if (entangled_thread_counter != 1) {
 -            av_log(avctx, AV_LOG_ERROR,
 -                   "Insufficient thread locking. At least %d threads are "
 -                   "calling avcodec_open2() at the same time right now.\n",
 -                   entangled_thread_counter);
 -            ret = -1;
 -            goto end;
 -        }
 -    }
 +    ret = ff_lock_avcodec(avctx, codec);
 +    if (ret < 0)
 +        return ret;
  
      avctx->internal = av_mallocz(sizeof(AVCodecInternal));
      if (!avctx->internal) {
      if ((ret = av_opt_set_dict(avctx, &tmp)) < 0)
          goto free_and_end;
  
 -    if (avctx->coded_width && avctx->coded_height && !avctx->width && !avctx->height)
 +    if (avctx->codec_whitelist && av_match_list(codec->name, avctx->codec_whitelist, ',') <= 0) {
 +        av_log(avctx, AV_LOG_ERROR, "Codec (%s) not on whitelist \'%s\'\n", codec->name, avctx->codec_whitelist);
 +        ret = AVERROR(EINVAL);
 +        goto free_and_end;
 +    }
 +
 +    // only call ff_set_dimensions() for non H.264/VP6F/DXV codecs so as not to overwrite previously setup dimensions
 +    if (!(avctx->coded_width && avctx->coded_height && avctx->width && avctx->height &&
 +          (avctx->codec_id == AV_CODEC_ID_H264 || avctx->codec_id == AV_CODEC_ID_VP6F || avctx->codec_id == AV_CODEC_ID_DXV))) {
 +    if (avctx->coded_width && avctx->coded_height)
          ret = ff_set_dimensions(avctx, avctx->coded_width, avctx->coded_height);
      else if (avctx->width && avctx->height)
          ret = ff_set_dimensions(avctx, avctx->width, avctx->height);
      if (ret < 0)
          goto free_and_end;
 +    }
  
      if ((avctx->coded_width || avctx->coded_height || avctx->width || avctx->height)
          && (  av_image_check_size(avctx->coded_width, avctx->coded_height, 0, avctx) < 0
             || av_image_check_size(avctx->width,       avctx->height,       0, avctx) < 0)) {
 -        av_log(avctx, AV_LOG_WARNING, "ignoring invalid width/height values\n");
 +        av_log(avctx, AV_LOG_WARNING, "Ignoring invalid width/height values\n");
          ff_set_dimensions(avctx, 0, 0);
      }
  
      }
      if (avctx->codec_id != codec->id || (avctx->codec_type != codec->type
                                           && avctx->codec_type != AVMEDIA_TYPE_ATTACHMENT)) {
 -        av_log(avctx, AV_LOG_ERROR, "codec type or id mismatches\n");
 +        av_log(avctx, AV_LOG_ERROR, "Codec type or id mismatches\n");
          ret = AVERROR(EINVAL);
          goto free_and_end;
      }
      avctx->frame_number = 0;
 +    avctx->codec_descriptor = avcodec_descriptor_get(avctx->codec_id);
  
      if ((avctx->codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) &&
          avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) {
 +        const char *codec_string = av_codec_is_encoder(codec) ? "encoder" : "decoder";
 +        AVCodec *codec2;
 +        av_log(avctx, AV_LOG_ERROR,
 +               "The %s '%s' is experimental but experimental codecs are not enabled, "
 +               "add '-strict %d' if you want to use it.\n",
 +               codec_string, codec->name, FF_COMPLIANCE_EXPERIMENTAL);
 +        codec2 = av_codec_is_encoder(codec) ? avcodec_find_encoder(codec->id) : avcodec_find_decoder(codec->id);
 +        if (!(codec2->capabilities & AV_CODEC_CAP_EXPERIMENTAL))
 +            av_log(avctx, AV_LOG_ERROR, "Alternatively use the non experimental %s '%s'.\n",
 +                codec_string, codec2->name);
          ret = AVERROR_EXPERIMENTAL;
          goto free_and_end;
      }
          avctx->time_base.den = avctx->sample_rate;
      }
  
 -    if (HAVE_THREADS) {
 +    if (!HAVE_THREADS)
 +        av_log(avctx, AV_LOG_WARNING, "Warning: not compiled with thread support, using thread emulation\n");
 +
 +    if (CONFIG_FRAME_THREAD_ENCODER && av_codec_is_encoder(avctx->codec)) {
 +        ff_unlock_avcodec(codec); //we will instantiate a few encoders thus kick the counter to prevent false detection of a problem
 +        ret = ff_frame_thread_encoder_init(avctx, options ? *options : NULL);
 +        ff_lock_avcodec(avctx, codec);
 +        if (ret < 0)
 +            goto free_and_end;
 +    }
 +
 +    if (HAVE_THREADS
 +        && !(avctx->internal->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))) {
          ret = ff_thread_init(avctx);
          if (ret < 0) {
              goto free_and_end;
      if (!HAVE_THREADS && !(codec->capabilities & AV_CODEC_CAP_AUTO_THREADS))
          avctx->thread_count = 1;
  
 +    if (avctx->codec->max_lowres < avctx->lowres || avctx->lowres < 0) {
 +        av_log(avctx, AV_LOG_ERROR, "The maximum value for lowres supported by the decoder is %d\n",
 +               avctx->codec->max_lowres);
 +        ret = AVERROR(EINVAL);
 +        goto free_and_end;
 +    }
 +
 +#if FF_API_VISMV
 +    if (avctx->debug_mv)
 +        av_log(avctx, AV_LOG_WARNING, "The 'vismv' option is deprecated, "
 +               "see the codecview filter instead.\n");
 +#endif
 +
      if (av_codec_is_encoder(avctx->codec)) {
          int i;
  #if FF_API_CODED_FRAME
@@@ -1408,10 -994,7 +1408,10 @@@ FF_ENABLE_DEPRECATION_WARNING
                  }
              }
              if (avctx->codec->sample_fmts[i] == AV_SAMPLE_FMT_NONE) {
 -                av_log(avctx, AV_LOG_ERROR, "Specified sample_fmt is not supported.\n");
 +                char buf[128];
 +                snprintf(buf, sizeof(buf), "%d", avctx->sample_fmt);
 +                av_log(avctx, AV_LOG_ERROR, "Specified sample format %s is invalid or not supported\n",
 +                       (char *)av_x_if_null(av_get_sample_fmt_name(avctx->sample_fmt), buf));
                  ret = AVERROR(EINVAL);
                  goto free_and_end;
              }
              for (i = 0; avctx->codec->pix_fmts[i] != AV_PIX_FMT_NONE; i++)
                  if (avctx->pix_fmt == avctx->codec->pix_fmts[i])
                      break;
 -            if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_NONE) {
 -                av_log(avctx, AV_LOG_ERROR, "Specified pix_fmt is not supported\n");
 +            if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_NONE
 +                && !((avctx->codec_id == AV_CODEC_ID_MJPEG || avctx->codec_id == AV_CODEC_ID_LJPEG)
 +                     && avctx->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL)) {
 +                char buf[128];
 +                snprintf(buf, sizeof(buf), "%d", avctx->pix_fmt);
 +                av_log(avctx, AV_LOG_ERROR, "Specified pixel format %s is invalid or not supported\n",
 +                       (char *)av_x_if_null(av_get_pix_fmt_name(avctx->pix_fmt), buf));
                  ret = AVERROR(EINVAL);
                  goto free_and_end;
              }
              if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ420P ||
 +                avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ411P ||
                  avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ422P ||
                  avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ440P ||
                  avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ444P)
                  if (avctx->sample_rate == avctx->codec->supported_samplerates[i])
                      break;
              if (avctx->codec->supported_samplerates[i] == 0) {
 -                av_log(avctx, AV_LOG_ERROR, "Specified sample_rate is not supported\n");
 +                av_log(avctx, AV_LOG_ERROR, "Specified sample rate %d is not supported\n",
 +                       avctx->sample_rate);
                  ret = AVERROR(EINVAL);
                  goto free_and_end;
              }
          }
 +        if (avctx->sample_rate < 0) {
 +            av_log(avctx, AV_LOG_ERROR, "Specified sample rate %d is not supported\n",
 +                    avctx->sample_rate);
 +            ret = AVERROR(EINVAL);
 +            goto free_and_end;
 +        }
          if (avctx->codec->channel_layouts) {
              if (!avctx->channel_layout) {
 -                av_log(avctx, AV_LOG_WARNING, "channel_layout not specified\n");
 +                av_log(avctx, AV_LOG_WARNING, "Channel layout not specified\n");
              } else {
                  for (i = 0; avctx->codec->channel_layouts[i] != 0; i++)
                      if (avctx->channel_layout == avctx->codec->channel_layouts[i])
                          break;
                  if (avctx->codec->channel_layouts[i] == 0) {
 -                    av_log(avctx, AV_LOG_ERROR, "Specified channel_layout is not supported\n");
 +                    char buf[512];
 +                    av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
 +                    av_log(avctx, AV_LOG_ERROR, "Specified channel layout '%s' is not supported\n", buf);
                      ret = AVERROR(EINVAL);
                      goto free_and_end;
                  }
              }
          }
          if (avctx->channel_layout && avctx->channels) {
 -            if (av_get_channel_layout_nb_channels(avctx->channel_layout) != avctx->channels) {
 -                av_log(avctx, AV_LOG_ERROR, "channel layout does not match number of channels\n");
 +            int channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
 +            if (channels != avctx->channels) {
 +                char buf[512];
 +                av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
 +                av_log(avctx, AV_LOG_ERROR,
 +                       "Channel layout '%s' with %d channels does not match number of specified channels %d\n",
 +                       buf, channels, avctx->channels);
                  ret = AVERROR(EINVAL);
                  goto free_and_end;
              }
          } else if (avctx->channel_layout) {
              avctx->channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
          }
 +        if (avctx->channels < 0) {
 +            av_log(avctx, AV_LOG_ERROR, "Specified number of channels %d is not supported\n",
 +                    avctx->channels);
 +            ret = AVERROR(EINVAL);
 +            goto free_and_end;
 +        }
 +        if(avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
 +            pixdesc = av_pix_fmt_desc_get(avctx->pix_fmt);
 +            if (    avctx->bits_per_raw_sample < 0
 +                || (avctx->bits_per_raw_sample > 8 && pixdesc->comp[0].depth <= 8)) {
 +                av_log(avctx, AV_LOG_WARNING, "Specified bit depth %d not possible with the specified pixel formats depth %d\n",
 +                    avctx->bits_per_raw_sample, pixdesc->comp[0].depth);
 +                avctx->bits_per_raw_sample = pixdesc->comp[0].depth;
 +            }
 +            if (avctx->width <= 0 || avctx->height <= 0) {
 +                av_log(avctx, AV_LOG_ERROR, "dimensions not set\n");
 +                ret = AVERROR(EINVAL);
 +                goto free_and_end;
 +            }
 +        }
 +        if (   (avctx->codec_type == AVMEDIA_TYPE_VIDEO || avctx->codec_type == AVMEDIA_TYPE_AUDIO)
 +            && avctx->bit_rate>0 && avctx->bit_rate<1000) {
 +            av_log(avctx, AV_LOG_WARNING, "Bitrate %"PRId64" is extremely low, maybe you mean %"PRId64"k\n", (int64_t)avctx->bit_rate, (int64_t)avctx->bit_rate);
 +        }
  
          if (!avctx->rc_initial_buffer_occupancy)
              avctx->rc_initial_buffer_occupancy = avctx->rc_buffer_size * 3 / 4;
  
 -        if (avctx->ticks_per_frame &&
 +        if (avctx->ticks_per_frame && avctx->time_base.num &&
              avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) {
              av_log(avctx, AV_LOG_ERROR,
                     "ticks_per_frame %d too large for the timebase %d/%d.",
          }
      }
  
 -    if (avctx->codec->init && !(avctx->active_thread_type & FF_THREAD_FRAME)) {
 +    avctx->pts_correction_num_faulty_pts =
 +    avctx->pts_correction_num_faulty_dts = 0;
 +    avctx->pts_correction_last_pts =
 +    avctx->pts_correction_last_dts = INT64_MIN;
 +
 +    if (   !CONFIG_GRAY && avctx->flags & AV_CODEC_FLAG_GRAY
 +        && avctx->codec_descriptor->type == AVMEDIA_TYPE_VIDEO)
 +        av_log(avctx, AV_LOG_WARNING,
 +               "gray decoding requested but not enabled at configuration time\n");
 +
 +    if (   avctx->codec->init && (!(avctx->active_thread_type&FF_THREAD_FRAME)
 +        || avctx->internal->frame_thread_encoder)) {
          ret = avctx->codec->init(avctx);
          if (ret < 0) {
              goto free_and_end;
          }
      }
  
 +    ret=0;
 +
  #if FF_API_AUDIOENC_DELAY
      if (av_codec_is_encoder(avctx->codec))
          avctx->delay = avctx->initial_padding;
  #endif
  
      if (av_codec_is_decoder(avctx->codec)) {
 +        if (!avctx->bit_rate)
 +            avctx->bit_rate = get_bit_rate(avctx);
          /* validate channel layout from the decoder */
          if (avctx->channel_layout) {
              int channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
              if (!avctx->channels)
                  avctx->channels = channels;
              else if (channels != avctx->channels) {
 +                char buf[512];
 +                av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout);
                  av_log(avctx, AV_LOG_WARNING,
 -                       "channel layout does not match number of channels\n");
 +                       "Channel layout '%s' with %d channels does not match specified number of channels %d: "
 +                       "ignoring specified channel layout\n",
 +                       buf, channels, avctx->channels);
                  avctx->channel_layout = 0;
              }
          }
              ret = AVERROR(EINVAL);
              goto free_and_end;
          }
 +        if (avctx->sub_charenc) {
 +            if (avctx->codec_type != AVMEDIA_TYPE_SUBTITLE) {
 +                av_log(avctx, AV_LOG_ERROR, "Character encoding is only "
 +                       "supported with subtitles codecs\n");
 +                ret = AVERROR(EINVAL);
 +                goto free_and_end;
 +            } else if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) {
 +                av_log(avctx, AV_LOG_WARNING, "Codec '%s' is bitmap-based, "
 +                       "subtitles character encoding will be ignored\n",
 +                       avctx->codec_descriptor->name);
 +                avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_DO_NOTHING;
 +            } else {
 +                /* input character encoding is set for a text based subtitle
 +                 * codec at this point */
 +                if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_AUTOMATIC)
 +                    avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_PRE_DECODER;
 +
 +                if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_PRE_DECODER) {
 +#if CONFIG_ICONV
 +                    iconv_t cd = iconv_open("UTF-8", avctx->sub_charenc);
 +                    if (cd == (iconv_t)-1) {
 +                        ret = AVERROR(errno);
 +                        av_log(avctx, AV_LOG_ERROR, "Unable to open iconv context "
 +                               "with input character encoding \"%s\"\n", avctx->sub_charenc);
 +                        goto free_and_end;
 +                    }
 +                    iconv_close(cd);
 +#else
 +                    av_log(avctx, AV_LOG_ERROR, "Character encoding subtitles "
 +                           "conversion needs a libavcodec built with iconv support "
 +                           "for this codec\n");
 +                    ret = AVERROR(ENOSYS);
 +                    goto free_and_end;
 +#endif
 +                }
 +            }
 +        }
  
  #if FF_API_AVCTX_TIMEBASE
          if (avctx->framerate.num > 0 && avctx->framerate.den > 0)
 -            avctx->time_base = av_inv_q(avctx->framerate);
 +            avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1}));
  #endif
      }
 -end:
 -    if (!(codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE) && codec->init) {
 -        entangled_thread_counter--;
 -
 -        /* Release any user-supplied mutex. */
 -        if (lockmgr_cb) {
 -            (*lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE);
 -        }
 +    if (codec->priv_data_size > 0 && avctx->priv_data && codec->priv_class) {
 +        av_assert0(*(const AVClass **)avctx->priv_data == codec->priv_class);
      }
  
 +end:
 +    ff_unlock_avcodec(codec);
      if (options) {
          av_dict_free(options);
          *options = tmp;
@@@ -1641,7 -1128,7 +1641,7 @@@ free_and_end
          (avctx->codec->caps_internal & FF_CODEC_CAP_INIT_CLEANUP))
          avctx->codec->close(avctx);
  
 -    if (avctx->priv_data && avctx->codec && avctx->codec->priv_class)
 +    if (codec->priv_class && codec->priv_data_size)
          av_opt_free(avctx->priv_data);
      av_opt_free(avctx);
  
@@@ -1662,52 -1149,26 +1662,52 @@@ FF_ENABLE_DEPRECATION_WARNING
      goto end;
  }
  
 -int ff_alloc_packet(AVPacket *avpkt, int size)
 +int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
  {
 -    if (size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE)
 +    if (avpkt->size < 0) {
 +        av_log(avctx, AV_LOG_ERROR, "Invalid negative user packet size %d\n", avpkt->size);
 +        return AVERROR(EINVAL);
 +    }
 +    if (size < 0 || size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) {
 +        av_log(avctx, AV_LOG_ERROR, "Invalid minimum required packet size %"PRId64" (max allowed is %d)\n",
 +               size, INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE);
          return AVERROR(EINVAL);
 +    }
 +
 +    if (avctx && 2*min_size < size) { // FIXME The factor needs to be finetuned
 +        av_assert0(!avpkt->data || avpkt->data != avctx->internal->byte_buffer);
 +        if (!avpkt->data || avpkt->size < size) {
 +            av_fast_padded_malloc(&avctx->internal->byte_buffer, &avctx->internal->byte_buffer_size, size);
 +            avpkt->data = avctx->internal->byte_buffer;
 +            avpkt->size = avctx->internal->byte_buffer_size;
 +        }
 +    }
  
      if (avpkt->data) {
          AVBufferRef *buf = avpkt->buf;
  
 -        if (avpkt->size < size)
 +        if (avpkt->size < size) {
 +            av_log(avctx, AV_LOG_ERROR, "User packet is too small (%d < %"PRId64")\n", avpkt->size, size);
              return AVERROR(EINVAL);
 +        }
  
          av_init_packet(avpkt);
          avpkt->buf      = buf;
          avpkt->size     = size;
          return 0;
      } else {
 -        return av_new_packet(avpkt, size);
 +        int ret = av_new_packet(avpkt, size);
 +        if (ret < 0)
 +            av_log(avctx, AV_LOG_ERROR, "Failed to allocate packet of size %"PRId64"\n", size);
 +        return ret;
      }
  }
  
 +int ff_alloc_packet(AVPacket *avpkt, int size)
 +{
 +    return ff_alloc_packet2(NULL, avpkt, size, 0);
 +}
 +
  /**
   * Pad last frame with silence.
   */
@@@ -1721,7 -1182,6 +1721,7 @@@ static int pad_last_frame(AVCodecContex
  
      frame->format         = src->format;
      frame->channel_layout = src->channel_layout;
 +    av_frame_set_channels(frame, av_frame_get_channels(src));
      frame->nb_samples     = s->frame_size;
      ret = av_frame_get_buffer(frame, 32);
      if (ret < 0)
@@@ -1753,11 -1213,10 +1753,11 @@@ int attribute_align_arg avcodec_encode_
                                                const AVFrame *frame,
                                                int *got_packet_ptr)
  {
 -    AVFrame tmp;
 +    AVFrame *extended_frame = NULL;
      AVFrame *padded_frame = NULL;
      int ret;
 -    int user_packet = !!avpkt->data;
 +    AVPacket user_pkt = *avpkt;
 +    int needs_realloc = !user_pkt.data;
  
      *got_packet_ptr = 0;
  
          }
          av_log(avctx, AV_LOG_WARNING, "extended_data is not set.\n");
  
 -        tmp = *frame;
 -        tmp.extended_data = tmp.data;
 -        frame = &tmp;
 +        extended_frame = av_frame_alloc();
 +        if (!extended_frame)
 +            return AVERROR(ENOMEM);
 +
 +        memcpy(extended_frame, frame, sizeof(AVFrame));
 +        extended_frame->extended_data = extended_frame->data;
 +        frame = extended_frame;
      }
  
      /* extract audio service type metadata */
      /* check for valid frame size */
      if (frame) {
          if (avctx->codec->capabilities & AV_CODEC_CAP_SMALL_LAST_FRAME) {
 -            if (frame->nb_samples > avctx->frame_size)
 -                return AVERROR(EINVAL);
 +            if (frame->nb_samples > avctx->frame_size) {
 +                av_log(avctx, AV_LOG_ERROR, "more samples than frame size (avcodec_encode_audio2)\n");
 +                ret = AVERROR(EINVAL);
 +                goto end;
 +            }
          } else if (!(avctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)) {
              if (frame->nb_samples < avctx->frame_size &&
                  !avctx->internal->last_audio_frame) {
                  ret = pad_last_frame(avctx, &padded_frame, frame);
                  if (ret < 0)
 -                    return ret;
 +                    goto end;
  
                  frame = padded_frame;
                  avctx->internal->last_audio_frame = 1;
              }
  
              if (frame->nb_samples != avctx->frame_size) {
 +                av_log(avctx, AV_LOG_ERROR, "nb_samples (%d) != frame_size (%d) (avcodec_encode_audio2)\n", frame->nb_samples, avctx->frame_size);
                  ret = AVERROR(EINVAL);
                  goto end;
              }
          }
      }
  
 +    av_assert0(avctx->codec->encode2);
 +
      ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr);
      if (!ret) {
          if (*got_packet_ptr) {
          } else {
              avpkt->size = 0;
          }
 +    }
 +    if (avpkt->data && avpkt->data == avctx->internal->byte_buffer) {
 +        needs_realloc = 0;
 +        if (user_pkt.data) {
 +            if (user_pkt.size >= avpkt->size) {
 +                memcpy(user_pkt.data, avpkt->data, avpkt->size);
 +            } else {
 +                av_log(avctx, AV_LOG_ERROR, "Provided packet is too small, needs to be %d\n", avpkt->size);
 +                avpkt->size = user_pkt.size;
 +                ret = -1;
 +            }
 +            avpkt->buf      = user_pkt.buf;
 +            avpkt->data     = user_pkt.data;
 +        } else {
 +            if (av_dup_packet(avpkt) < 0) {
 +                ret = AVERROR(ENOMEM);
 +            }
 +        }
 +    }
  
 -        if (!user_packet && avpkt->size) {
 -            ret = av_buffer_realloc(&avpkt->buf, avpkt->size);
 +    if (!ret) {
 +        if (needs_realloc && avpkt->data) {
 +            ret = av_buffer_realloc(&avpkt->buf, avpkt->size + AV_INPUT_BUFFER_PADDING_SIZE);
              if (ret >= 0)
                  avpkt->data = avpkt->buf->data;
          }
  
  end:
      av_frame_free(&padded_frame);
 +    av_free(extended_frame);
  
  #if FF_API_AUDIOENC_DELAY
      avctx->delay = avctx->initial_padding;
@@@ -1895,18 -1323,10 +1895,18 @@@ int attribute_align_arg avcodec_encode_
                                                int *got_packet_ptr)
  {
      int ret;
 -    int user_packet = !!avpkt->data;
 +    AVPacket user_pkt = *avpkt;
 +    int needs_realloc = !user_pkt.data;
  
      *got_packet_ptr = 0;
  
 +    if(CONFIG_FRAME_THREAD_ENCODER &&
 +       avctx->internal->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))
 +        return ff_thread_video_encode_frame(avctx, avpkt, frame, got_packet_ptr);
 +
 +    if ((avctx->flags&AV_CODEC_FLAG_PASS1) && avctx->stats_out)
 +        avctx->stats_out[0] = '\0';
 +
      if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY) && !frame) {
          av_packet_unref(avpkt);
          av_init_packet(avpkt);
      if (av_image_check_size(avctx->width, avctx->height, 0, avctx))
          return AVERROR(EINVAL);
  
 +    if (frame && frame->format == AV_PIX_FMT_NONE)
 +        av_log(avctx, AV_LOG_WARNING, "AVFrame.format is not set\n");
 +    if (frame && (frame->width == 0 || frame->height == 0))
 +        av_log(avctx, AV_LOG_WARNING, "AVFrame.width or height is not set\n");
 +
      av_assert0(avctx->codec->encode2);
  
      ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr);
 +    av_assert0(ret <= 0);
 +
 +    if (avpkt->data && avpkt->data == avctx->internal->byte_buffer) {
 +        needs_realloc = 0;
 +        if (user_pkt.data) {
 +            if (user_pkt.size >= avpkt->size) {
 +                memcpy(user_pkt.data, avpkt->data, avpkt->size);
 +            } else {
 +                av_log(avctx, AV_LOG_ERROR, "Provided packet is too small, needs to be %d\n", avpkt->size);
 +                avpkt->size = user_pkt.size;
 +                ret = -1;
 +            }
 +            avpkt->buf      = user_pkt.buf;
 +            avpkt->data     = user_pkt.data;
 +        } else {
 +            if (av_dup_packet(avpkt) < 0) {
 +                ret = AVERROR(ENOMEM);
 +            }
 +        }
 +    }
 +
      if (!ret) {
          if (!*got_packet_ptr)
              avpkt->size = 0;
          else if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY))
              avpkt->pts = avpkt->dts = frame->pts;
  
 -        if (!user_packet && avpkt->size) {
 -            ret = av_buffer_realloc(&avpkt->buf, avpkt->size);
 +        if (needs_realloc && avpkt->data) {
 +            ret = av_buffer_realloc(&avpkt->buf, avpkt->size + AV_INPUT_BUFFER_PADDING_SIZE);
              if (ret >= 0)
                  avpkt->data = avpkt->buf->data;
          }
@@@ -1976,54 -1370,18 +1976,54 @@@ int avcodec_encode_subtitle(AVCodecCont
          av_log(avctx, AV_LOG_ERROR, "start_display_time must be 0.\n");
          return -1;
      }
 -    if (sub->num_rects == 0 || !sub->rects)
 -        return -1;
 +
      ret = avctx->codec->encode_sub(avctx, buf, buf_size, sub);
      avctx->frame_number++;
      return ret;
  }
  
 +/**
 + * Attempt to guess proper monotonic timestamps for decoded video frames
 + * which might have incorrect times. Input timestamps may wrap around, in
 + * which case the output will as well.
 + *
 + * @param pts the pts field of the decoded AVPacket, as passed through
 + * AVFrame.pkt_pts
 + * @param dts the dts field of the decoded AVPacket
 + * @return one of the input values, may be AV_NOPTS_VALUE
 + */
 +static int64_t guess_correct_pts(AVCodecContext *ctx,
 +                                 int64_t reordered_pts, int64_t dts)
 +{
 +    int64_t pts = AV_NOPTS_VALUE;
 +
 +    if (dts != AV_NOPTS_VALUE) {
 +        ctx->pts_correction_num_faulty_dts += dts <= ctx->pts_correction_last_dts;
 +        ctx->pts_correction_last_dts = dts;
 +    } else if (reordered_pts != AV_NOPTS_VALUE)
 +        ctx->pts_correction_last_dts = reordered_pts;
 +
 +    if (reordered_pts != AV_NOPTS_VALUE) {
 +        ctx->pts_correction_num_faulty_pts += reordered_pts <= ctx->pts_correction_last_pts;
 +        ctx->pts_correction_last_pts = reordered_pts;
 +    } else if(dts != AV_NOPTS_VALUE)
 +        ctx->pts_correction_last_pts = dts;
 +
 +    if ((ctx->pts_correction_num_faulty_pts<=ctx->pts_correction_num_faulty_dts || dts == AV_NOPTS_VALUE)
 +       && reordered_pts != AV_NOPTS_VALUE)
 +        pts = reordered_pts;
 +    else
 +        pts = dts;
 +
 +    return pts;
 +}
 +
  static int apply_param_change(AVCodecContext *avctx, AVPacket *avpkt)
  {
      int size = 0, ret;
      const uint8_t *data;
      uint32_t flags;
 +    int64_t val;
  
      data = av_packet_get_side_data(avpkt, AV_PKT_DATA_PARAM_CHANGE, &size);
      if (!data)
      if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) {
          if (size < 4)
              goto fail;
 -        avctx->channels = bytestream_get_le32(&data);
 +        val = bytestream_get_le32(&data);
 +        if (val <= 0 || val > INT_MAX) {
 +            av_log(avctx, AV_LOG_ERROR, "Invalid channel count");
 +            return AVERROR_INVALIDDATA;
 +        }
 +        avctx->channels = val;
          size -= 4;
      }
      if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) {
      if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) {
          if (size < 4)
              goto fail;
 -        avctx->sample_rate = bytestream_get_le32(&data);
 +        val = bytestream_get_le32(&data);
 +        if (val <= 0 || val > INT_MAX) {
 +            av_log(avctx, AV_LOG_ERROR, "Invalid sample rate");
 +            return AVERROR_INVALIDDATA;
 +        }
 +        avctx->sample_rate = val;
          size -= 4;
      }
      if (flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) {
@@@ -2104,7 -1452,7 +2104,7 @@@ static int unrefcount_frame(AVCodecInte
      memcpy(frame->data,     avci->to_free->data,     sizeof(frame->data));
      memcpy(frame->linesize, avci->to_free->linesize, sizeof(frame->linesize));
      if (avci->to_free->extended_data != avci->to_free->data) {
 -        int planes = av_get_channel_layout_nb_channels(avci->to_free->channel_layout);
 +        int planes = av_frame_get_channels(avci->to_free);
          int size   = planes * sizeof(*frame->extended_data);
  
          if (!size) {
      frame->height         = avci->to_free->height;
      frame->channel_layout = avci->to_free->channel_layout;
      frame->nb_samples     = avci->to_free->nb_samples;
 +    av_frame_set_channels(frame, av_frame_get_channels(avci->to_free));
  
      return 0;
  }
  
  int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
                                                int *got_picture_ptr,
 -                                              AVPacket *avpkt)
 +                                              const AVPacket *avpkt)
  {
      AVCodecInternal *avci = avctx->internal;
      int ret;
 +    // copy to ensure we do not change avpkt
 +    AVPacket tmp = *avpkt;
 +
 +    if (!avctx->codec)
 +        return AVERROR(EINVAL);
 +    if (avctx->codec->type != AVMEDIA_TYPE_VIDEO) {
 +        av_log(avctx, AV_LOG_ERROR, "Invalid media type for video\n");
 +        return AVERROR(EINVAL);
 +    }
  
      *got_picture_ptr = 0;
      if ((avctx->coded_width || avctx->coded_height) && av_image_check_size(avctx->coded_width, avctx->coded_height, 0, avctx))
 -        return -1;
 -
 -    avctx->internal->pkt = avpkt;
 -    ret = apply_param_change(avctx, avpkt);
 -    if (ret < 0) {
 -        av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n");
 -        if (avctx->err_recognition & AV_EF_EXPLODE)
 -            return ret;
 -    }
 +        return AVERROR(EINVAL);
  
      av_frame_unref(picture);
  
      if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size ||
          (avctx->active_thread_type & FF_THREAD_FRAME)) {
 +        int did_split = av_packet_split_side_data(&tmp);
 +        ret = apply_param_change(avctx, &tmp);
 +        if (ret < 0) {
 +            av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n");
 +            if (avctx->err_recognition & AV_EF_EXPLODE)
 +                goto fail;
 +        }
 +
 +        avctx->internal->pkt = &tmp;
          if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME)
              ret = ff_thread_decode_frame(avctx, picture, got_picture_ptr,
 -                                         avpkt);
 +                                         &tmp);
          else {
              ret = avctx->codec->decode(avctx, picture, got_picture_ptr,
 -                                       avpkt);
 +                                       &tmp);
              if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS))
                  picture->pkt_dts = avpkt->dts;
 +
 +            if(!avctx->has_b_frames){
 +                av_frame_set_pkt_pos(picture, avpkt->pos);
 +            }
 +            //FIXME these should be under if(!avctx->has_b_frames)
              /* get_buffer is supposed to set frame parameters */
              if (!(avctx->codec->capabilities & AV_CODEC_CAP_DR1)) {
 -                picture->sample_aspect_ratio = avctx->sample_aspect_ratio;
 -                picture->width               = avctx->width;
 -                picture->height              = avctx->height;
 -                picture->format              = avctx->pix_fmt;
 +                if (!picture->sample_aspect_ratio.num)    picture->sample_aspect_ratio = avctx->sample_aspect_ratio;
 +                if (!picture->width)                      picture->width               = avctx->width;
 +                if (!picture->height)                     picture->height              = avctx->height;
 +                if (picture->format == AV_PIX_FMT_NONE)   picture->format              = avctx->pix_fmt;
              }
          }
  
 +fail:
          emms_c(); //needed to avoid an emms_c() call before every return;
  
 +        avctx->internal->pkt = NULL;
 +        if (did_split) {
 +            av_packet_free_side_data(&tmp);
 +            if(ret == tmp.size)
 +                ret = avpkt->size;
 +        }
 +
          if (*got_picture_ptr) {
              if (!avctx->refcounted_frames) {
                  int err = unrefcount_frame(avci, picture);
              }
  
              avctx->frame_number++;
 +            av_frame_set_best_effort_timestamp(picture,
 +                                               guess_correct_pts(avctx,
 +                                                                 picture->pkt_pts,
 +                                                                 picture->pkt_dts));
          } else
              av_frame_unref(picture);
      } else
          ret = 0;
  
 +    /* many decoders assign whole AVFrames, thus overwriting extended_data;
 +     * make sure it's set correctly */
 +    av_assert0(!picture->extended_data || picture->extended_data == picture->data);
 +
  #if FF_API_AVCTX_TIMEBASE
      if (avctx->framerate.num > 0 && avctx->framerate.den > 0)
 -        avctx->time_base = av_inv_q(avctx->framerate);
 +        avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1}));
  #endif
  
      return ret;
  int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
                                                AVFrame *frame,
                                                int *got_frame_ptr,
 -                                              AVPacket *avpkt)
 +                                              const AVPacket *avpkt)
  {
      AVCodecInternal *avci = avctx->internal;
      int ret = 0;
  
      *got_frame_ptr = 0;
  
 -    avctx->internal->pkt = avpkt;
 -
      if (!avpkt->data && avpkt->size) {
          av_log(avctx, AV_LOG_ERROR, "invalid packet: NULL data, size != 0\n");
          return AVERROR(EINVAL);
      }
 -
 -    ret = apply_param_change(avctx, avpkt);
 -    if (ret < 0) {
 -        av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n");
 -        if (avctx->err_recognition & AV_EF_EXPLODE)
 -            return ret;
 +    if (!avctx->codec)
 +        return AVERROR(EINVAL);
 +    if (avctx->codec->type != AVMEDIA_TYPE_AUDIO) {
 +        av_log(avctx, AV_LOG_ERROR, "Invalid media type for audio\n");
 +        return AVERROR(EINVAL);
      }
  
      av_frame_unref(frame);
  
 -    if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size) {
 -        ret = avctx->codec->decode(avctx, frame, got_frame_ptr, avpkt);
 +    if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size || (avctx->active_thread_type & FF_THREAD_FRAME)) {
 +        uint8_t *side;
 +        int side_size;
 +        uint32_t discard_padding = 0;
 +        uint8_t skip_reason = 0;
 +        uint8_t discard_reason = 0;
 +        // copy to ensure we do not change avpkt
 +        AVPacket tmp = *avpkt;
 +        int did_split = av_packet_split_side_data(&tmp);
 +        ret = apply_param_change(avctx, &tmp);
 +        if (ret < 0) {
 +            av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n");
 +            if (avctx->err_recognition & AV_EF_EXPLODE)
 +                goto fail;
 +        }
 +
 +        avctx->internal->pkt = &tmp;
 +        if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME)
 +            ret = ff_thread_decode_frame(avctx, frame, got_frame_ptr, &tmp);
 +        else {
 +            ret = avctx->codec->decode(avctx, frame, got_frame_ptr, &tmp);
 +            av_assert0(ret <= tmp.size);
 +            frame->pkt_dts = avpkt->dts;
 +        }
          if (ret >= 0 && *got_frame_ptr) {
              avctx->frame_number++;
 -            frame->pkt_dts = avpkt->dts;
 +            av_frame_set_best_effort_timestamp(frame,
 +                                               guess_correct_pts(avctx,
 +                                                                 frame->pkt_pts,
 +                                                                 frame->pkt_dts));
              if (frame->format == AV_SAMPLE_FMT_NONE)
                  frame->format = avctx->sample_fmt;
 +            if (!frame->channel_layout)
 +                frame->channel_layout = avctx->channel_layout;
 +            if (!av_frame_get_channels(frame))
 +                av_frame_set_channels(frame, avctx->channels);
 +            if (!frame->sample_rate)
 +                frame->sample_rate = avctx->sample_rate;
 +        }
  
 +        side= av_packet_get_side_data(avctx->internal->pkt, AV_PKT_DATA_SKIP_SAMPLES, &side_size);
 +        if(side && side_size>=10) {
 +            avctx->internal->skip_samples = AV_RL32(side);
 +            discard_padding = AV_RL32(side + 4);
 +            av_log(avctx, AV_LOG_DEBUG, "skip %d / discard %d samples due to side data\n",
 +                   avctx->internal->skip_samples, (int)discard_padding);
 +            skip_reason = AV_RL8(side + 8);
 +            discard_reason = AV_RL8(side + 9);
 +        }
 +        if (avctx->internal->skip_samples && *got_frame_ptr &&
 +            !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) {
 +            if(frame->nb_samples <= avctx->internal->skip_samples){
 +                *got_frame_ptr = 0;
 +                avctx->internal->skip_samples -= frame->nb_samples;
 +                av_log(avctx, AV_LOG_DEBUG, "skip whole frame, skip left: %d\n",
 +                       avctx->internal->skip_samples);
 +            } else {
 +                av_samples_copy(frame->extended_data, frame->extended_data, 0, avctx->internal->skip_samples,
 +                                frame->nb_samples - avctx->internal->skip_samples, avctx->channels, frame->format);
 +                if(avctx->pkt_timebase.num && avctx->sample_rate) {
 +                    int64_t diff_ts = av_rescale_q(avctx->internal->skip_samples,
 +                                                   (AVRational){1, avctx->sample_rate},
 +                                                   avctx->pkt_timebase);
 +                    if(frame->pkt_pts!=AV_NOPTS_VALUE)
 +                        frame->pkt_pts += diff_ts;
 +                    if(frame->pkt_dts!=AV_NOPTS_VALUE)
 +                        frame->pkt_dts += diff_ts;
 +                    if (av_frame_get_pkt_duration(frame) >= diff_ts)
 +                        av_frame_set_pkt_duration(frame, av_frame_get_pkt_duration(frame) - diff_ts);
 +                } else {
 +                    av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for skipped samples.\n");
 +                }
 +                av_log(avctx, AV_LOG_DEBUG, "skip %d/%d samples\n",
 +                       avctx->internal->skip_samples, frame->nb_samples);
 +                frame->nb_samples -= avctx->internal->skip_samples;
 +                avctx->internal->skip_samples = 0;
 +            }
 +        }
 +
 +        if (discard_padding > 0 && discard_padding <= frame->nb_samples && *got_frame_ptr &&
 +            !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) {
 +            if (discard_padding == frame->nb_samples) {
 +                *got_frame_ptr = 0;
 +            } else {
 +                if(avctx->pkt_timebase.num && avctx->sample_rate) {
 +                    int64_t diff_ts = av_rescale_q(frame->nb_samples - discard_padding,
 +                                                   (AVRational){1, avctx->sample_rate},
 +                                                   avctx->pkt_timebase);
 +                    av_frame_set_pkt_duration(frame, diff_ts);
 +                } else {
 +                    av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for discarded samples.\n");
 +                }
 +                av_log(avctx, AV_LOG_DEBUG, "discard %d/%d samples\n",
 +                       (int)discard_padding, frame->nb_samples);
 +                frame->nb_samples -= discard_padding;
 +            }
 +        }
 +
 +        if ((avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL) && *got_frame_ptr) {
 +            AVFrameSideData *fside = av_frame_new_side_data(frame, AV_FRAME_DATA_SKIP_SAMPLES, 10);
 +            if (fside) {
 +                AV_WL32(fside->data, avctx->internal->skip_samples);
 +                AV_WL32(fside->data + 4, discard_padding);
 +                AV_WL8(fside->data + 8, skip_reason);
 +                AV_WL8(fside->data + 9, discard_reason);
 +                avctx->internal->skip_samples = 0;
 +            }
 +        }
 +fail:
 +        avctx->internal->pkt = NULL;
 +        if (did_split) {
 +            av_packet_free_side_data(&tmp);
 +            if(ret == tmp.size)
 +                ret = avpkt->size;
 +        }
 +
 +        if (ret >= 0 && *got_frame_ptr) {
              if (!avctx->refcounted_frames) {
                  int err = unrefcount_frame(avci, frame);
                  if (err < 0)
              av_frame_unref(frame);
      }
  
 +    return ret;
 +}
 +
 +#define UTF8_MAX_BYTES 4 /* 5 and 6 bytes sequences should not be used */
 +static int recode_subtitle(AVCodecContext *avctx,
 +                           AVPacket *outpkt, const AVPacket *inpkt)
 +{
 +#if CONFIG_ICONV
 +    iconv_t cd = (iconv_t)-1;
 +    int ret = 0;
 +    char *inb, *outb;
 +    size_t inl, outl;
 +    AVPacket tmp;
 +#endif
 +
 +    if (avctx->sub_charenc_mode != FF_SUB_CHARENC_MODE_PRE_DECODER || inpkt->size == 0)
 +        return 0;
 +
 +#if CONFIG_ICONV
 +    cd = iconv_open("UTF-8", avctx->sub_charenc);
 +    av_assert0(cd != (iconv_t)-1);
 +
 +    inb = inpkt->data;
 +    inl = inpkt->size;
 +
 +    if (inl >= INT_MAX / UTF8_MAX_BYTES - AV_INPUT_BUFFER_PADDING_SIZE) {
 +        av_log(avctx, AV_LOG_ERROR, "Subtitles packet is too big for recoding\n");
 +        ret = AVERROR(ENOMEM);
 +        goto end;
 +    }
 +
 +    ret = av_new_packet(&tmp, inl * UTF8_MAX_BYTES);
 +    if (ret < 0)
 +        goto end;
 +    outpkt->buf  = tmp.buf;
 +    outpkt->data = tmp.data;
 +    outpkt->size = tmp.size;
 +    outb = outpkt->data;
 +    outl = outpkt->size;
 +
 +    if (iconv(cd, &inb, &inl, &outb, &outl) == (size_t)-1 ||
 +        iconv(cd, NULL, NULL, &outb, &outl) == (size_t)-1 ||
 +        outl >= outpkt->size || inl != 0) {
 +        ret = FFMIN(AVERROR(errno), -1);
 +        av_log(avctx, AV_LOG_ERROR, "Unable to recode subtitle event \"%s\" "
 +               "from %s to UTF-8\n", inpkt->data, avctx->sub_charenc);
 +        av_packet_unref(&tmp);
 +        goto end;
 +    }
 +    outpkt->size -= outl;
 +    memset(outpkt->data + outpkt->size, 0, outl);
  
 +end:
 +    if (cd != (iconv_t)-1)
 +        iconv_close(cd);
      return ret;
 +#else
 +    av_log(avctx, AV_LOG_ERROR, "requesting subtitles recoding without iconv");
 +    return AVERROR(EINVAL);
 +#endif
 +}
 +
 +static int utf8_check(const uint8_t *str)
 +{
 +    const uint8_t *byte;
 +    uint32_t codepoint, min;
 +
 +    while (*str) {
 +        byte = str;
 +        GET_UTF8(codepoint, *(byte++), return 0;);
 +        min = byte - str == 1 ? 0 : byte - str == 2 ? 0x80 :
 +              1 << (5 * (byte - str) - 4);
 +        if (codepoint < min || codepoint >= 0x110000 ||
 +            codepoint == 0xFFFE /* BOM */ ||
 +            codepoint >= 0xD800 && codepoint <= 0xDFFF /* surrogates */)
 +            return 0;
 +        str = byte;
 +    }
 +    return 1;
 +}
 +
 +#if FF_API_ASS_TIMING
 +static void insert_ts(AVBPrint *buf, int ts)
 +{
 +    if (ts == -1) {
 +        av_bprintf(buf, "9:59:59.99,");
 +    } else {
 +        int h, m, s;
 +
 +        h = ts/360000;  ts -= 360000*h;
 +        m = ts/  6000;  ts -=   6000*m;
 +        s = ts/   100;  ts -=    100*s;
 +        av_bprintf(buf, "%d:%02d:%02d.%02d,", h, m, s, ts);
 +    }
 +}
 +
 +static int convert_sub_to_old_ass_form(AVSubtitle *sub, const AVPacket *pkt, AVRational tb)
 +{
 +    int i;
 +    AVBPrint buf;
 +
 +    av_bprint_init(&buf, 0, AV_BPRINT_SIZE_UNLIMITED);
 +
 +    for (i = 0; i < sub->num_rects; i++) {
 +        char *final_dialog;
 +        const char *dialog;
 +        AVSubtitleRect *rect = sub->rects[i];
 +        int ts_start, ts_duration = -1;
 +        long int layer;
 +
 +        if (rect->type != SUBTITLE_ASS || !strncmp(rect->ass, "Dialogue: ", 10))
 +            continue;
 +
 +        av_bprint_clear(&buf);
 +
 +        /* skip ReadOrder */
 +        dialog = strchr(rect->ass, ',');
 +        if (!dialog)
 +            continue;
 +        dialog++;
 +
 +        /* extract Layer or Marked */
 +        layer = strtol(dialog, (char**)&dialog, 10);
 +        if (*dialog != ',')
 +            continue;
 +        dialog++;
 +
 +        /* rescale timing to ASS time base (ms) */
 +        ts_start = av_rescale_q(pkt->pts, tb, av_make_q(1, 100));
 +        if (pkt->duration != -1)
 +            ts_duration = av_rescale_q(pkt->duration, tb, av_make_q(1, 100));
 +        sub->end_display_time = FFMAX(sub->end_display_time, 10 * ts_duration);
 +
 +        /* construct ASS (standalone file form with timestamps) string */
 +        av_bprintf(&buf, "Dialogue: %ld,", layer);
 +        insert_ts(&buf, ts_start);
 +        insert_ts(&buf, ts_duration == -1 ? -1 : ts_start + ts_duration);
 +        av_bprintf(&buf, "%s\r\n", dialog);
 +
 +        final_dialog = av_strdup(buf.str);
 +        if (!av_bprint_is_complete(&buf) || !final_dialog) {
 +            av_freep(&final_dialog);
 +            av_bprint_finalize(&buf, NULL);
 +            return AVERROR(ENOMEM);
 +        }
 +        av_freep(&rect->ass);
 +        rect->ass = final_dialog;
 +    }
 +
 +    av_bprint_finalize(&buf, NULL);
 +    return 0;
  }
 +#endif
  
  int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
                               int *got_sub_ptr,
                               AVPacket *avpkt)
  {
 -    int ret;
 +    int i, ret = 0;
 +
 +    if (!avpkt->data && avpkt->size) {
 +        av_log(avctx, AV_LOG_ERROR, "invalid packet: NULL data, size != 0\n");
 +        return AVERROR(EINVAL);
 +    }
 +    if (!avctx->codec)
 +        return AVERROR(EINVAL);
 +    if (avctx->codec->type != AVMEDIA_TYPE_SUBTITLE) {
 +        av_log(avctx, AV_LOG_ERROR, "Invalid media type for subtitles\n");
 +        return AVERROR(EINVAL);
 +    }
  
 -    avctx->internal->pkt = avpkt;
      *got_sub_ptr = 0;
 -    ret = avctx->codec->decode(avctx, sub, got_sub_ptr, avpkt);
 -    if (*got_sub_ptr)
 -        avctx->frame_number++;
 +    get_subtitle_defaults(sub);
 +
 +    if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size) {
 +        AVPacket pkt_recoded;
 +        AVPacket tmp = *avpkt;
 +        int did_split = av_packet_split_side_data(&tmp);
 +        //apply_param_change(avctx, &tmp);
 +
 +        if (did_split) {
 +            /* FFMIN() prevents overflow in case the packet wasn't allocated with
 +             * proper padding.
 +             * If the side data is smaller than the buffer padding size, the
 +             * remaining bytes should have already been filled with zeros by the
 +             * original packet allocation anyway. */
 +            memset(tmp.data + tmp.size, 0,
 +                   FFMIN(avpkt->size - tmp.size, AV_INPUT_BUFFER_PADDING_SIZE));
 +        }
 +
 +        pkt_recoded = tmp;
 +        ret = recode_subtitle(avctx, &pkt_recoded, &tmp);
 +        if (ret < 0) {
 +            *got_sub_ptr = 0;
 +        } else {
 +            avctx->internal->pkt = &pkt_recoded;
 +
 +            if (avctx->pkt_timebase.num && avpkt->pts != AV_NOPTS_VALUE)
 +                sub->pts = av_rescale_q(avpkt->pts,
 +                                        avctx->pkt_timebase, AV_TIME_BASE_Q);
 +            ret = avctx->codec->decode(avctx, sub, got_sub_ptr, &pkt_recoded);
 +            av_assert1((ret >= 0) >= !!*got_sub_ptr &&
 +                       !!*got_sub_ptr >= !!sub->num_rects);
 +
 +#if FF_API_ASS_TIMING
 +            if (avctx->sub_text_format == FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS
 +                && *got_sub_ptr && sub->num_rects)
 +                ret = convert_sub_to_old_ass_form(sub, avpkt, avctx->time_base);
 +#endif
 +
 +            if (sub->num_rects && !sub->end_display_time && avpkt->duration &&
 +                avctx->pkt_timebase.num) {
 +                AVRational ms = { 1, 1000 };
 +                sub->end_display_time = av_rescale_q(avpkt->duration,
 +                                                     avctx->pkt_timebase, ms);
 +            }
 +
 +            for (i = 0; i < sub->num_rects; i++) {
 +                if (sub->rects[i]->ass && !utf8_check(sub->rects[i]->ass)) {
 +                    av_log(avctx, AV_LOG_ERROR,
 +                           "Invalid UTF-8 in decoded subtitles text; "
 +                           "maybe missing -sub_charenc option\n");
 +                    avsubtitle_free(sub);
 +                    return AVERROR_INVALIDDATA;
 +                }
 +            }
 +
 +            if (tmp.data != pkt_recoded.data) { // did we recode?
 +                /* prevent from destroying side data from original packet */
 +                pkt_recoded.side_data = NULL;
 +                pkt_recoded.side_data_elems = 0;
 +
 +                av_packet_unref(&pkt_recoded);
 +            }
 +            if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB)
 +                sub->format = 0;
 +            else if (avctx->codec_descriptor->props & AV_CODEC_PROP_TEXT_SUB)
 +                sub->format = 1;
 +            avctx->internal->pkt = NULL;
 +        }
 +
 +        if (did_split) {
 +            av_packet_free_side_data(&tmp);
 +            if(ret == tmp.size)
 +                ret = avpkt->size;
 +        }
 +
 +        if (*got_sub_ptr)
 +            avctx->frame_number++;
 +    }
 +
      return ret;
  }
  
@@@ -2652,21 -1626,13 +2652,21 @@@ av_cold int avcodec_close(AVCodecContex
  {
      int i;
  
 +    if (!avctx)
 +        return 0;
 +
      if (avcodec_is_open(avctx)) {
          FramePool *pool = avctx->internal->pool;
 -
 +        if (CONFIG_FRAME_THREAD_ENCODER &&
 +            avctx->internal->frame_thread_encoder && avctx->thread_count > 1) {
 +            ff_frame_thread_encoder_free(avctx);
 +        }
          if (HAVE_THREADS && avctx->internal->thread_ctx)
              ff_thread_free(avctx);
          if (avctx->codec && avctx->codec->close)
              avctx->codec->close(avctx);
 +        avctx->internal->byte_buffer_size = 0;
 +        av_freep(&avctx->internal->byte_buffer);
          av_frame_free(&avctx->internal->to_free);
          for (i = 0; i < FF_ARRAY_ELEMS(pool->pools); i++)
              av_buffer_pool_uninit(&pool->pools[i]);
@@@ -2704,20 -1670,10 +2704,20 @@@ FF_ENABLE_DEPRECATION_WARNING
      return 0;
  }
  
 +static enum AVCodecID remap_deprecated_codec_id(enum AVCodecID id)
 +{
 +    switch(id){
 +        //This is for future deprecatec codec ids, its empty since
 +        //last major bump but will fill up again over time, please don't remove it
 +        default                                         : return id;
 +    }
 +}
 +
  static AVCodec *find_encdec(enum AVCodecID id, int encoder)
  {
      AVCodec *p, *experimental = NULL;
      p = first_avcodec;
 +    id= remap_deprecated_codec_id(id);
      while (p) {
          if ((encoder ? av_codec_is_encoder(p) : av_codec_is_decoder(p)) &&
              p->id == id) {
@@@ -2769,24 -1725,27 +2769,24 @@@ AVCodec *avcodec_find_decoder_by_name(c
      return NULL;
  }
  
 -static int get_bit_rate(AVCodecContext *ctx)
 +const char *avcodec_get_name(enum AVCodecID id)
  {
 -    int bit_rate;
 -    int bits_per_sample;
 +    const AVCodecDescriptor *cd;
 +    AVCodec *codec;
  
 -    switch (ctx->codec_type) {
 -    case AVMEDIA_TYPE_VIDEO:
 -    case AVMEDIA_TYPE_DATA:
 -    case AVMEDIA_TYPE_SUBTITLE:
 -    case AVMEDIA_TYPE_ATTACHMENT:
 -        bit_rate = ctx->bit_rate;
 -        break;
 -    case AVMEDIA_TYPE_AUDIO:
 -        bits_per_sample = av_get_bits_per_sample(ctx->codec_id);
 -        bit_rate = bits_per_sample ? ctx->sample_rate * ctx->channels * bits_per_sample : ctx->bit_rate;
 -        break;
 -    default:
 -        bit_rate = 0;
 -        break;
 -    }
 -    return bit_rate;
 +    if (id == AV_CODEC_ID_NONE)
 +        return "none";
 +    cd = avcodec_descriptor_get(id);
 +    if (cd)
 +        return cd->name;
 +    av_log(NULL, AV_LOG_WARNING, "Codec 0x%x is not in the full list.\n", id);
 +    codec = avcodec_find_decoder(id);
 +    if (codec)
 +        return codec->name;
 +    codec = avcodec_find_encoder(id);
 +    if (codec)
 +        return codec->name;
 +    return "unknown_codec";
  }
  
  size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag)
  #define TAG_PRINT(x)                                              \
      (((x) >= '0' && (x) <= '9') ||                                \
       ((x) >= 'a' && (x) <= 'z') || ((x) >= 'A' && (x) <= 'Z') ||  \
 -     ((x) == '.' || (x) == ' '))
 +     ((x) == '.' || (x) == ' ' || (x) == '-' || (x) == '_'))
  
      for (i = 0; i < 4; i++) {
          len = snprintf(buf, buf_size,
  
  void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
  {
 +    const char *codec_type;
      const char *codec_name;
      const char *profile = NULL;
 -    char buf1[32];
 -    int bitrate;
 +    int64_t bitrate;
      int new_line = 0;
      AVRational display_aspect_ratio;
 -    const AVCodecDescriptor *desc = avcodec_descriptor_get(enc->codec_id);
 +    const char *separator = enc->dump_separator ? (const char *)enc->dump_separator : ", ";
  
 -    if (desc) {
 -        codec_name = desc->name;
 -        profile = avcodec_profile_name(enc->codec_id, enc->profile);
 -    } else if (enc->codec_id == AV_CODEC_ID_MPEG2TS) {
 -        /* fake mpeg2 transport stream codec (currently not
 -         * registered) */
 -        codec_name = "mpeg2ts";
 -    } else {
 -        /* output avi tags */
 +    if (!buf || buf_size <= 0)
 +        return;
 +    codec_type = av_get_media_type_string(enc->codec_type);
 +    codec_name = avcodec_get_name(enc->codec_id);
 +    profile = avcodec_profile_name(enc->codec_id, enc->profile);
 +
 +    snprintf(buf, buf_size, "%s: %s", codec_type ? codec_type : "unknown",
 +             codec_name);
 +    buf[0] ^= 'a' ^ 'A'; /* first letter in uppercase */
 +
 +    if (enc->codec && strcmp(enc->codec->name, codec_name))
 +        snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", enc->codec->name);
 +
 +    if (profile)
 +        snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", profile);
 +    if (   enc->codec_type == AVMEDIA_TYPE_VIDEO
 +        && av_log_get_level() >= AV_LOG_VERBOSE
 +        && enc->refs)
 +        snprintf(buf + strlen(buf), buf_size - strlen(buf),
 +                 ", %d reference frame%s",
 +                 enc->refs, enc->refs > 1 ? "s" : "");
 +
 +    if (enc->codec_tag) {
          char tag_buf[32];
          av_get_codec_tag_string(tag_buf, sizeof(tag_buf), enc->codec_tag);
 -        snprintf(buf1, sizeof(buf1), "%s / 0x%04X", tag_buf, enc->codec_tag);
 -        codec_name = buf1;
 +        snprintf(buf + strlen(buf), buf_size - strlen(buf),
 +                 " (%s / 0x%04X)", tag_buf, enc->codec_tag);
      }
  
      switch (enc->codec_type) {
      case AVMEDIA_TYPE_VIDEO:
 -        snprintf(buf, buf_size,
 -                 "Video: %s%s",
 -                 codec_name, enc->mb_decision ? " (hq)" : "");
 -        if (profile)
 -            snprintf(buf + strlen(buf), buf_size - strlen(buf),
 -                     " (%s)", profile);
 -        if (enc->codec_tag) {
 -            char tag_buf[32];
 -            av_get_codec_tag_string(tag_buf, sizeof(tag_buf), enc->codec_tag);
 -            snprintf(buf + strlen(buf), buf_size - strlen(buf),
 -                     " [%s / 0x%04X]", tag_buf, enc->codec_tag);
 -        }
 +        {
 +            char detail[256] = "(";
  
 -        av_strlcat(buf, "\n      ", buf_size);
 -        snprintf(buf + strlen(buf), buf_size - strlen(buf),
 +            av_strlcat(buf, separator, buf_size);
 +
 +            snprintf(buf + strlen(buf), buf_size - strlen(buf),
                   "%s", enc->pix_fmt == AV_PIX_FMT_NONE ? "none" :
                       av_get_pix_fmt_name(enc->pix_fmt));
 +            if (enc->bits_per_raw_sample && enc->pix_fmt != AV_PIX_FMT_NONE &&
 +                enc->bits_per_raw_sample < av_pix_fmt_desc_get(enc->pix_fmt)->comp[0].depth)
 +                av_strlcatf(detail, sizeof(detail), "%d bpc, ", enc->bits_per_raw_sample);
 +            if (enc->color_range != AVCOL_RANGE_UNSPECIFIED)
 +                av_strlcatf(detail, sizeof(detail), "%s, ",
 +                            av_color_range_name(enc->color_range));
 +
 +            if (enc->colorspace != AVCOL_SPC_UNSPECIFIED ||
 +                enc->color_primaries != AVCOL_PRI_UNSPECIFIED ||
 +                enc->color_trc != AVCOL_TRC_UNSPECIFIED) {
 +                if (enc->colorspace != (int)enc->color_primaries ||
 +                    enc->colorspace != (int)enc->color_trc) {
 +                    new_line = 1;
 +                    av_strlcatf(detail, sizeof(detail), "%s/%s/%s, ",
 +                                av_color_space_name(enc->colorspace),
 +                                av_color_primaries_name(enc->color_primaries),
 +                                av_color_transfer_name(enc->color_trc));
 +                } else
 +                    av_strlcatf(detail, sizeof(detail), "%s, ",
 +                                av_get_colorspace_name(enc->colorspace));
 +            }
 +
 +            if (av_log_get_level() >= AV_LOG_DEBUG &&
 +                enc->chroma_sample_location != AVCHROMA_LOC_UNSPECIFIED)
 +                av_strlcatf(detail, sizeof(detail), "%s, ",
 +                            av_chroma_location_name(enc->chroma_sample_location));
  
 -        if (enc->color_range != AVCOL_RANGE_UNSPECIFIED)
 -            snprintf(buf + strlen(buf), buf_size - strlen(buf), ", %s",
 -                     av_color_range_name(enc->color_range));
 -        if (enc->colorspace != AVCOL_SPC_UNSPECIFIED ||
 -            enc->color_primaries != AVCOL_PRI_UNSPECIFIED ||
 -            enc->color_trc != AVCOL_TRC_UNSPECIFIED) {
 -            new_line = 1;
 -            snprintf(buf + strlen(buf), buf_size - strlen(buf), ", %s/%s/%s",
 -                     av_color_space_name(enc->colorspace),
 -                     av_color_primaries_name(enc->color_primaries),
 -                     av_color_transfer_name(enc->color_trc));
 -        }
 -        if (av_log_get_level() >= AV_LOG_DEBUG &&
 -            enc->chroma_sample_location != AVCHROMA_LOC_UNSPECIFIED)
 -            snprintf(buf + strlen(buf), buf_size - strlen(buf), ", %s",
 -                     av_chroma_location_name(enc->chroma_sample_location));
 +            if (strlen(detail) > 1) {
 +                detail[strlen(detail) - 2] = 0;
 +                av_strlcatf(buf, buf_size, "%s)", detail);
 +            }
 +        }
  
          if (enc->width) {
 -            av_strlcat(buf, new_line ? "\n      " : ", ", buf_size);
 +            av_strlcat(buf, new_line ? separator : ", ", buf_size);
  
              snprintf(buf + strlen(buf), buf_size - strlen(buf),
                       "%dx%d",
  
              if (enc->sample_aspect_ratio.num) {
                  av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den,
 -                          enc->width * enc->sample_aspect_ratio.num,
 -                          enc->height * enc->sample_aspect_ratio.den,
 +                          enc->width * (int64_t)enc->sample_aspect_ratio.num,
 +                          enc->height * (int64_t)enc->sample_aspect_ratio.den,
                            1024 * 1024);
                  snprintf(buf + strlen(buf), buf_size - strlen(buf),
 -                         " [PAR %d:%d DAR %d:%d]",
 +                         " [SAR %d:%d DAR %d:%d]",
                           enc->sample_aspect_ratio.num, enc->sample_aspect_ratio.den,
                           display_aspect_ratio.num, display_aspect_ratio.den);
              }
          if (encode) {
              snprintf(buf + strlen(buf), buf_size - strlen(buf),
                       ", q=%d-%d", enc->qmin, enc->qmax);
 +        } else {
 +            if (enc->properties & FF_CODEC_PROPERTY_CLOSED_CAPTIONS)
 +                snprintf(buf + strlen(buf), buf_size - strlen(buf),
 +                         ", Closed Captions");
 +            if (enc->properties & FF_CODEC_PROPERTY_LOSSLESS)
 +                snprintf(buf + strlen(buf), buf_size - strlen(buf),
 +                         ", lossless");
          }
          break;
      case AVMEDIA_TYPE_AUDIO:
 -        snprintf(buf, buf_size,
 -                 "Audio: %s",
 -                 codec_name);
 -        if (profile)
 -            snprintf(buf + strlen(buf), buf_size - strlen(buf),
 -                     " (%s)", profile);
 -        if (enc->codec_tag) {
 -            char tag_buf[32];
 -            av_get_codec_tag_string(tag_buf, sizeof(tag_buf), enc->codec_tag);
 -            snprintf(buf + strlen(buf), buf_size - strlen(buf),
 -                     " [%s / 0x%04X]", tag_buf, enc->codec_tag);
 -        }
 +        av_strlcat(buf, separator, buf_size);
  
 -        av_strlcat(buf, "\n      ", buf_size);
          if (enc->sample_rate) {
              snprintf(buf + strlen(buf), buf_size - strlen(buf),
                       "%d Hz, ", enc->sample_rate);
              snprintf(buf + strlen(buf), buf_size - strlen(buf),
                       ", %s", av_get_sample_fmt_name(enc->sample_fmt));
          }
 +        if (   enc->bits_per_raw_sample > 0
 +            && enc->bits_per_raw_sample != av_get_bytes_per_sample(enc->sample_fmt) * 8)
 +            snprintf(buf + strlen(buf), buf_size - strlen(buf),
 +                     " (%d bit)", enc->bits_per_raw_sample);
          break;
      case AVMEDIA_TYPE_DATA:
 -        snprintf(buf, buf_size, "Data: %s", codec_name);
 +        if (av_log_get_level() >= AV_LOG_DEBUG) {
 +            int g = av_gcd(enc->time_base.num, enc->time_base.den);
 +            if (g)
 +                snprintf(buf + strlen(buf), buf_size - strlen(buf),
 +                         ", %d/%d",
 +                         enc->time_base.num / g, enc->time_base.den / g);
 +        }
          break;
      case AVMEDIA_TYPE_SUBTITLE:
 -        snprintf(buf, buf_size, "Subtitle: %s", codec_name);
 -        break;
 -    case AVMEDIA_TYPE_ATTACHMENT:
 -        snprintf(buf, buf_size, "Attachment: %s", codec_name);
 +        if (enc->width)
 +            snprintf(buf + strlen(buf), buf_size - strlen(buf),
 +                     ", %dx%d", enc->width, enc->height);
          break;
      default:
 -        snprintf(buf, buf_size, "Invalid Codec type %d", enc->codec_type);
          return;
      }
      if (encode) {
      bitrate = get_bit_rate(enc);
      if (bitrate != 0) {
          snprintf(buf + strlen(buf), buf_size - strlen(buf),
 -                 ", %d kb/s", bitrate / 1000);
 +                 ", %"PRId64" kb/s", bitrate / 1000);
 +    } else if (enc->rc_max_rate > 0) {
 +        snprintf(buf + strlen(buf), buf_size - strlen(buf),
 +                 ", max. %"PRId64" kb/s", (int64_t)enc->rc_max_rate / 1000);
      }
  }
  
@@@ -3015,25 -1948,18 +3015,25 @@@ const char *avcodec_profile_name(enum A
  
  unsigned avcodec_version(void)
  {
 +//    av_assert0(AV_CODEC_ID_V410==164);
 +    av_assert0(AV_CODEC_ID_PCM_S8_PLANAR==65563);
 +    av_assert0(AV_CODEC_ID_ADPCM_G722==69660);
 +//     av_assert0(AV_CODEC_ID_BMV_AUDIO==86071);
 +    av_assert0(AV_CODEC_ID_SRT==94216);
 +    av_assert0(LIBAVCODEC_VERSION_MICRO >= 100);
 +
      return LIBAVCODEC_VERSION_INT;
  }
  
  const char *avcodec_configuration(void)
  {
 -    return LIBAV_CONFIGURATION;
 +    return FFMPEG_CONFIGURATION;
  }
  
  const char *avcodec_license(void)
  {
  #define LICENSE_PREFIX "libavcodec license: "
 -    return LICENSE_PREFIX LIBAV_LICENSE + sizeof(LICENSE_PREFIX) - 1;
 +    return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1;
  }
  
  void avcodec_flush_buffers(AVCodecContext *avctx)
      else if (avctx->codec->flush)
          avctx->codec->flush(avctx);
  
 +    avctx->pts_correction_last_pts =
 +    avctx->pts_correction_last_dts = INT64_MIN;
 +
      if (!avctx->refcounted_frames)
          av_frame_unref(avctx->internal->to_free);
  }
  int av_get_exact_bits_per_sample(enum AVCodecID codec_id)
  {
      switch (codec_id) {
 +    case AV_CODEC_ID_8SVX_EXP:
 +    case AV_CODEC_ID_8SVX_FIB:
      case AV_CODEC_ID_ADPCM_CT:
      case AV_CODEC_ID_ADPCM_IMA_APC:
      case AV_CODEC_ID_ADPCM_IMA_EA_SEAD:
 +    case AV_CODEC_ID_ADPCM_IMA_OKI:
      case AV_CODEC_ID_ADPCM_IMA_WS:
      case AV_CODEC_ID_ADPCM_G722:
      case AV_CODEC_ID_ADPCM_YAMAHA:
 +    case AV_CODEC_ID_ADPCM_AICA:
          return 4;
 +    case AV_CODEC_ID_DSD_LSBF:
 +    case AV_CODEC_ID_DSD_MSBF:
 +    case AV_CODEC_ID_DSD_LSBF_PLANAR:
 +    case AV_CODEC_ID_DSD_MSBF_PLANAR:
      case AV_CODEC_ID_PCM_ALAW:
      case AV_CODEC_ID_PCM_MULAW:
      case AV_CODEC_ID_PCM_S8:
 +    case AV_CODEC_ID_PCM_S8_PLANAR:
      case AV_CODEC_ID_PCM_U8:
      case AV_CODEC_ID_PCM_ZORK:
 +    case AV_CODEC_ID_SDX2_DPCM:
          return 8;
      case AV_CODEC_ID_PCM_S16BE:
      case AV_CODEC_ID_PCM_S16BE_PLANAR:
      }
  }
  
 +enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be)
 +{
 +    static const enum AVCodecID map[AV_SAMPLE_FMT_NB][2] = {
 +        [AV_SAMPLE_FMT_U8  ] = { AV_CODEC_ID_PCM_U8,    AV_CODEC_ID_PCM_U8    },
 +        [AV_SAMPLE_FMT_S16 ] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE },
 +        [AV_SAMPLE_FMT_S32 ] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE },
 +        [AV_SAMPLE_FMT_FLT ] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE },
 +        [AV_SAMPLE_FMT_DBL ] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE },
 +        [AV_SAMPLE_FMT_U8P ] = { AV_CODEC_ID_PCM_U8,    AV_CODEC_ID_PCM_U8    },
 +        [AV_SAMPLE_FMT_S16P] = { AV_CODEC_ID_PCM_S16LE, AV_CODEC_ID_PCM_S16BE },
 +        [AV_SAMPLE_FMT_S32P] = { AV_CODEC_ID_PCM_S32LE, AV_CODEC_ID_PCM_S32BE },
 +        [AV_SAMPLE_FMT_FLTP] = { AV_CODEC_ID_PCM_F32LE, AV_CODEC_ID_PCM_F32BE },
 +        [AV_SAMPLE_FMT_DBLP] = { AV_CODEC_ID_PCM_F64LE, AV_CODEC_ID_PCM_F64BE },
 +    };
 +    if (fmt < 0 || fmt >= AV_SAMPLE_FMT_NB)
 +        return AV_CODEC_ID_NONE;
 +    if (be < 0 || be > 1)
 +        be = AV_NE(1, 0);
 +    return map[fmt][be];
 +}
 +
  int av_get_bits_per_sample(enum AVCodecID codec_id)
  {
      switch (codec_id) {
      }
  }
  
- int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
+ static int get_audio_frame_duration(enum AVCodecID id, int sr, int ch, int ba,
 -                                    uint32_t tag, int bits_per_coded_sample, int frame_bytes)
++                                    uint32_t tag, int bits_per_coded_sample, int64_t bitrate,
++                                    uint8_t * extradata, int frame_size, int frame_bytes)
  {
-     int id, sr, ch, ba, tag, bps;
-     id  = avctx->codec_id;
-     sr  = avctx->sample_rate;
-     ch  = avctx->channels;
-     ba  = avctx->block_align;
-     tag = avctx->codec_tag;
-     bps = av_get_exact_bits_per_sample(avctx->codec_id);
+     int bps = av_get_exact_bits_per_sample(id);
  
      /* codecs with an exact constant bits per sample */
 -    if (bps > 0 && ch > 0 && frame_bytes > 0)
 -        return (frame_bytes * 8) / (bps * ch);
 +    if (bps > 0 && ch > 0 && frame_bytes > 0 && ch < 32768 && bps < 32768)
 +        return (frame_bytes * 8LL) / (bps * ch);
-     bps = avctx->bits_per_coded_sample;
+     bps = bits_per_coded_sample;
  
      /* codecs with a fixed packet duration */
      switch (id) {
      case AV_CODEC_ID_ADPCM_IMA_QT: return   64;
      case AV_CODEC_ID_ADPCM_EA_XAS: return  128;
      case AV_CODEC_ID_AMR_NB:
 +    case AV_CODEC_ID_EVRC:
      case AV_CODEC_ID_GSM:
      case AV_CODEC_ID_QCELP:
 -    case AV_CODEC_ID_RA_144:
      case AV_CODEC_ID_RA_288:       return  160;
 -    case AV_CODEC_ID_IMC:          return  256;
      case AV_CODEC_ID_AMR_WB:
      case AV_CODEC_ID_GSM_MS:       return  320;
      case AV_CODEC_ID_MP1:          return  384;
      case AV_CODEC_ID_ATRAC1:       return  512;
      case AV_CODEC_ID_ATRAC3:       return 1024;
 +    case AV_CODEC_ID_ATRAC3P:      return 2048;
      case AV_CODEC_ID_MP2:
      case AV_CODEC_ID_MUSEPACK7:    return 1152;
      case AV_CODEC_ID_AC3:          return 1536;
              return 240 * (frame_bytes / 32);
          if (id == AV_CODEC_ID_NELLYMOSER)
              return 256 * (frame_bytes / 64);
 +        if (id == AV_CODEC_ID_RA_144)
 +            return 160 * (frame_bytes / 20);
 +        if (id == AV_CODEC_ID_G723_1)
 +            return 240 * (frame_bytes / 24);
  
          if (bps > 0) {
              /* calc from frame_bytes and bits_per_coded_sample */
                  return frame_bytes * 8 / bps;
          }
  
 -        if (ch > 0) {
 +        if (ch > 0 && ch < INT_MAX/16) {
              /* calc from frame_bytes and channels */
              switch (id) {
 +            case AV_CODEC_ID_ADPCM_AFC:
 +                return frame_bytes / (9 * ch) * 16;
 +            case AV_CODEC_ID_ADPCM_PSX:
 +            case AV_CODEC_ID_ADPCM_DTK:
 +                return frame_bytes / (16 * ch) * 28;
              case AV_CODEC_ID_ADPCM_4XM:
              case AV_CODEC_ID_ADPCM_IMA_ISS:
                  return (frame_bytes - 4 * ch) * 2 / ch;
                  return (frame_bytes - 4) * 2 / ch;
              case AV_CODEC_ID_ADPCM_IMA_AMV:
                  return (frame_bytes - 8) * 2 / ch;
-                 if (avctx->extradata)
 +            case AV_CODEC_ID_ADPCM_THP:
 +            case AV_CODEC_ID_ADPCM_THP_LE:
++                if (extradata)
 +                    return frame_bytes * 14 / (8 * ch);
 +                break;
              case AV_CODEC_ID_ADPCM_XA:
                  return (frame_bytes / 128) * 224 / ch;
              case AV_CODEC_ID_INTERPLAY_DPCM:
                  return 6 * frame_bytes / ch;
              case AV_CODEC_ID_PCM_LXF:
                  return 2 * (frame_bytes / (5 * ch));
 +            case AV_CODEC_ID_IAC:
 +            case AV_CODEC_ID_IMC:
 +                return 4 * frame_bytes / ch;
              }
  
              if (tag) {
              if (ba > 0) {
                  /* calc from frame_bytes, channels, and block_align */
                  int blocks = frame_bytes / ba;
-                 switch (avctx->codec_id) {
+                 switch (id) {
                  case AV_CODEC_ID_ADPCM_IMA_WAV:
 -                    return blocks * (1 + (ba - 4 * ch) / (4 * ch) * 8);
 +                    if (bps < 2 || bps > 5)
 +                        return 0;
 +                    return blocks * (1 + (ba - 4 * ch) / (bps * ch) * 8);
                  case AV_CODEC_ID_ADPCM_IMA_DK3:
                      return blocks * (((ba - 16) * 2 / 3 * 4) / ch);
                  case AV_CODEC_ID_ADPCM_IMA_DK4:
                      return blocks * (1 + (ba - 4 * ch) * 2 / ch);
 +                case AV_CODEC_ID_ADPCM_IMA_RAD:
 +                    return blocks * ((ba - 4 * ch) * 2 / ch);
                  case AV_CODEC_ID_ADPCM_MS:
                      return blocks * (2 + (ba - 7 * ch) * 2 / ch);
                  }
  
              if (bps > 0) {
                  /* calc from frame_bytes, channels, and bits_per_coded_sample */
-                 switch (avctx->codec_id) {
+                 switch (id) {
                  case AV_CODEC_ID_PCM_DVD:
 +                    if(bps<4)
 +                        return 0;
                      return 2 * (frame_bytes / ((bps * 2 / 8) * ch));
                  case AV_CODEC_ID_PCM_BLURAY:
 +                    if(bps<4)
 +                        return 0;
                      return frame_bytes / ((FFALIGN(ch, 2) * bps) / 8);
                  case AV_CODEC_ID_S302M:
                      return 2 * (frame_bytes / ((bps + 4) / 4)) / ch;
          }
      }
  
-     if (avctx->frame_size > 1 && frame_bytes)
-         return avctx->frame_size;
 +    /* Fall back on using frame_size */
-     if (avctx->bit_rate>0 && frame_bytes>0 && avctx->sample_rate>0 && avctx->block_align>1) {
-         if (avctx->codec_id == AV_CODEC_ID_WMAV1 || avctx->codec_id == AV_CODEC_ID_WMAV2)
-             return  (frame_bytes * 8LL * avctx->sample_rate) / avctx->bit_rate;
++    if (frame_size > 1 && frame_bytes)
++        return frame_size;
 +
 +    //For WMA we currently have no other means to calculate duration thus we
 +    //do it here by assuming CBR, which is true for all known cases.
++    if (bitrate > 0 && frame_bytes > 0 && sr > 0 && ba > 1) {
++        if (id == AV_CODEC_ID_WMAV1 || id == AV_CODEC_ID_WMAV2)
++            return  (frame_bytes * 8LL * sr) / bitrate;
 +    }
 +
      return 0;
  }
  
+ int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
+ {
+     return get_audio_frame_duration(avctx->codec_id, avctx->sample_rate,
+                                     avctx->channels, avctx->block_align,
+                                     avctx->codec_tag, avctx->bits_per_coded_sample,
++                                    avctx->bit_rate, avctx->extradata, avctx->frame_size,
+                                     frame_bytes);
+ }
+ int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes)
+ {
+     return get_audio_frame_duration(par->codec_id, par->sample_rate,
+                                     par->channels, par->block_align,
+                                     par->codec_tag, par->bits_per_coded_sample,
++                                    par->bit_rate, par->extradata, par->frame_size,
+                                     frame_bytes);
+ }
  #if !HAVE_THREADS
  int ff_thread_init(AVCodecContext *s)
  {
@@@ -3361,7 -2227,7 +3374,7 @@@ int ff_match_2uint16(const uint16_t(*ta
  FF_DISABLE_DEPRECATION_WARNINGS
  void av_log_missing_feature(void *avc, const char *feature, int want_sample)
  {
 -    av_log(avc, AV_LOG_WARNING, "%s is not implemented. Update your Libav "
 +    av_log(avc, AV_LOG_WARNING, "%s is not implemented. Update your FFmpeg "
              "version to the newest one from Git. If the problem still "
              "occurs, it means that your file has a feature which has not "
              "been implemented.\n", feature);
@@@ -3378,8 -2244,8 +3391,8 @@@ void av_log_ask_for_sample(void *avc, c
      if (msg)
          av_vlog(avc, AV_LOG_WARNING, msg, argument_list);
      av_log(avc, AV_LOG_WARNING, "If you want to help, upload a sample "
 -            "of this file to ftp://upload.libav.org/incoming/ "
 -            "and contact the libav-devel mailing list.\n");
 +            "of this file to ftp://upload.ffmpeg.org/incoming/ "
 +            "and contact the ffmpeg-devel mailing list. (ffmpeg-devel@ffmpeg.org)\n");
  
      va_end(argument_list);
  }
@@@ -3387,15 -2253,14 +3400,15 @@@ FF_ENABLE_DEPRECATION_WARNING
  #endif /* FF_API_MISSING_SAMPLE */
  
  static AVHWAccel *first_hwaccel = NULL;
 +static AVHWAccel **last_hwaccel = &first_hwaccel;
  
  void av_register_hwaccel(AVHWAccel *hwaccel)
  {
 -    AVHWAccel **p = &first_hwaccel;
 -    while (*p)
 -        p = &(*p)->next;
 -    *p = hwaccel;
 +    AVHWAccel **p = last_hwaccel;
      hwaccel->next = NULL;
 +    while(*p || avpriv_atomic_ptr_cas((void * volatile *)p, NULL, hwaccel))
 +        p = &(*p)->next;
 +    last_hwaccel = &hwaccel->next;
  }
  
  AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel)
@@@ -3435,48 -2300,6 +3448,48 @@@ int av_lockmgr_register(int (*cb)(void 
      return 0;
  }
  
 +int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec)
 +{
 +    if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || !codec->init)
 +        return 0;
 +
 +    if (lockmgr_cb) {
 +        if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN))
 +            return -1;
 +    }
 +
 +    if (avpriv_atomic_int_add_and_fetch(&entangled_thread_counter, 1) != 1) {
 +        av_log(log_ctx, AV_LOG_ERROR,
 +               "Insufficient thread locking. At least %d threads are "
 +               "calling avcodec_open2() at the same time right now.\n",
 +               entangled_thread_counter);
 +        if (!lockmgr_cb)
 +            av_log(log_ctx, AV_LOG_ERROR, "No lock manager is set, please see av_lockmgr_register()\n");
 +        ff_avcodec_locked = 1;
 +        ff_unlock_avcodec(codec);
 +        return AVERROR(EINVAL);
 +    }
 +    av_assert0(!ff_avcodec_locked);
 +    ff_avcodec_locked = 1;
 +    return 0;
 +}
 +
 +int ff_unlock_avcodec(const AVCodec *codec)
 +{
 +    if (codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE || !codec->init)
 +        return 0;
 +
 +    av_assert0(ff_avcodec_locked);
 +    ff_avcodec_locked = 0;
 +    avpriv_atomic_int_add_and_fetch(&entangled_thread_counter, -1);
 +    if (lockmgr_cb) {
 +        if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE))
 +            return -1;
 +    }
 +
 +    return 0;
 +}
 +
  int avpriv_lock_avformat(void)
  {
      if (lockmgr_cb) {
@@@ -3500,7 -2323,7 +3513,7 @@@ unsigned int avpriv_toupper4(unsigned i
      return av_toupper(x & 0xFF) +
            (av_toupper((x >>  8) & 0xFF) << 8)  +
            (av_toupper((x >> 16) & 0xFF) << 16) +
 -          (av_toupper((x >> 24) & 0xFF) << 24);
 +((unsigned)av_toupper((x >> 24) & 0xFF) << 24);
  }
  
  int ff_thread_ref_frame(ThreadFrame *dst, ThreadFrame *src)
      if (ret < 0)
          return ret;
  
 +    av_assert0(!dst->progress);
 +
      if (src->progress &&
          !(dst->progress = av_buffer_ref(src->progress))) {
          ff_thread_release_buffer(dst->owner, dst);
  
  #if !HAVE_THREADS
  
 +enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
 +{
 +    return ff_get_format(avctx, fmt);
 +}
 +
  int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
  {
      f->owner = avctx;
@@@ -3555,28 -2371,6 +3568,28 @@@ void ff_thread_await_progress(ThreadFra
  {
  }
  
 +int ff_thread_can_start_frame(AVCodecContext *avctx)
 +{
 +    return 1;
 +}
 +
 +int ff_alloc_entries(AVCodecContext *avctx, int count)
 +{
 +    return 0;
 +}
 +
 +void ff_reset_entries(AVCodecContext *avctx)
 +{
 +}
 +
 +void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift)
 +{
 +}
 +
 +void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n)
 +{
 +}
 +
  #endif
  
  int avcodec_is_open(AVCodecContext *s)
      return !!s->internal;
  }
  
 -const uint8_t *avpriv_find_start_code(const uint8_t *restrict p,
 +int avpriv_bprint_to_extradata(AVCodecContext *avctx, struct AVBPrint *buf)
 +{
 +    int ret;
 +    char *str;
 +
 +    ret = av_bprint_finalize(buf, &str);
 +    if (ret < 0)
 +        return ret;
 +    if (!av_bprint_is_complete(buf)) {
 +        av_free(str);
 +        return AVERROR(ENOMEM);
 +    }
 +
 +    avctx->extradata = str;
 +    /* Note: the string is NUL terminated (so extradata can be read as a
 +     * string), but the ending character is not accounted in the size (in
 +     * binary formats you are likely not supposed to mux that character). When
 +     * extradata is copied, it is also padded with AV_INPUT_BUFFER_PADDING_SIZE
 +     * zeros. */
 +    avctx->extradata_size = buf->len;
 +    return 0;
 +}
 +
 +const uint8_t *avpriv_find_start_code(const uint8_t *av_restrict p,
                                        const uint8_t *end,
 -                                      uint32_t * restrict state)
 +                                      uint32_t *av_restrict state)
  {
      int i;
  
 -    assert(p <= end);
 +    av_assert0(p <= end);
      if (p >= end)
          return end;
  
@@@ -3831,23 -2602,3 +3844,23 @@@ int avcodec_parameters_to_context(AVCod
  
      return 0;
  }
 +
 +#ifdef TEST
 +int main(void){
 +    AVCodec *codec = NULL;
 +    int ret = 0;
 +    avcodec_register_all();
 +
 +    while (codec = av_codec_next(codec)) {
 +        if (av_codec_is_encoder(codec)) {
 +            if (codec->type == AVMEDIA_TYPE_AUDIO) {
 +                if (!codec->sample_fmts) {
 +                    av_log(NULL, AV_LOG_FATAL, "Encoder %s is missing the sample_fmts field\n", codec->name);
 +                    ret = 1;
 +                }
 +            }
 +        }
 +    }
 +    return ret;
 +}
 +#endif /* TEST */